diff --git a/java-compiler-artifact-impl/src/main/java/com/intellij/java/compiler/artifact/impl/ManifestBuilder.java b/java-compiler-artifact-impl/src/main/java/com/intellij/java/compiler/artifact/impl/ManifestBuilder.java index 70a4bd15f..b049fdc52 100644 --- a/java-compiler-artifact-impl/src/main/java/com/intellij/java/compiler/artifact/impl/ManifestBuilder.java +++ b/java-compiler-artifact-impl/src/main/java/com/intellij/java/compiler/artifact/impl/ManifestBuilder.java @@ -16,30 +16,28 @@ package com.intellij.java.compiler.artifact.impl; import consulo.application.Application; -import org.jetbrains.annotations.NonNls; import java.util.jar.Attributes; public class ManifestBuilder { - @NonNls - private static final String NAME = "Created-By"; - private static final Attributes.Name CREATED_BY = new Attributes.Name(NAME); + private static final String NAME = "Created-By"; + private static final Attributes.Name CREATED_BY = new Attributes.Name(NAME); - private ManifestBuilder() { - } + private ManifestBuilder() { + } - public static void setGlobalAttributes(Attributes mainAttributes) { - setVersionAttribute(mainAttributes); - setIfNone(mainAttributes, CREATED_BY, Application.get().getName().get()); - } + public static void setGlobalAttributes(Attributes mainAttributes) { + setVersionAttribute(mainAttributes); + setIfNone(mainAttributes, CREATED_BY, Application.get().getName().get()); + } - public static void setVersionAttribute(Attributes mainAttributes) { - setIfNone(mainAttributes, Attributes.Name.MANIFEST_VERSION, "1.0"); - } + public static void setVersionAttribute(Attributes mainAttributes) { + setIfNone(mainAttributes, Attributes.Name.MANIFEST_VERSION, "1.0"); + } - private static void setIfNone(Attributes mainAttributes, Attributes.Name attrName, String value) { - if (mainAttributes.getValue(attrName) == null) { - mainAttributes.put(attrName, value); + private static void setIfNone(Attributes mainAttributes, Attributes.Name attrName, String value) { + if (mainAttributes.getValue(attrName) == null) { + mainAttributes.put(attrName, value); + } } - } } \ No newline at end of file diff --git a/java-compiler-artifact-impl/src/main/java/com/intellij/java/compiler/artifact/impl/ManifestFileUtil.java b/java-compiler-artifact-impl/src/main/java/com/intellij/java/compiler/artifact/impl/ManifestFileUtil.java index 8b8d97146..f97e6948f 100644 --- a/java-compiler-artifact-impl/src/main/java/com/intellij/java/compiler/artifact/impl/ManifestFileUtil.java +++ b/java-compiler-artifact-impl/src/main/java/com/intellij/java/compiler/artifact/impl/ManifestFileUtil.java @@ -25,7 +25,6 @@ import com.intellij.java.language.util.TreeClassChooserFactory; import consulo.application.Application; import consulo.application.WriteAction; -import consulo.application.util.function.Computable; import consulo.compiler.artifact.ArtifactType; import consulo.compiler.artifact.ArtifactUtil; import consulo.compiler.artifact.PackagingElementPath; @@ -36,18 +35,21 @@ import consulo.fileChooser.FileChooserDescriptorFactory; import consulo.fileChooser.IdeaFileChooser; import consulo.language.psi.scope.GlobalSearchScope; +import consulo.localize.LocalizeValue; import consulo.logging.Logger; import consulo.module.Module; import consulo.module.content.ProjectRootManager; import consulo.module.content.layer.OrderEnumerator; import consulo.platform.base.localize.CommonLocalize; import consulo.project.Project; +import consulo.ui.UIAccess; +import consulo.ui.annotation.RequiredUIAccess; import consulo.ui.ex.awt.Messages; import consulo.ui.ex.awt.TextFieldWithBrowseButton; import consulo.util.io.FileUtil; import consulo.util.io.PathUtil; import consulo.util.lang.StringUtil; -import consulo.util.lang.ref.Ref; +import consulo.util.lang.ref.SimpleReference; import consulo.virtualFileSystem.VirtualFile; import consulo.virtualFileSystem.util.VirtualFileUtil; import jakarta.annotation.Nonnull; @@ -58,6 +60,7 @@ import java.io.OutputStream; import java.util.ArrayList; import java.util.List; +import java.util.function.Supplier; import java.util.jar.Attributes; import java.util.jar.JarFile; import java.util.jar.Manifest; @@ -66,266 +69,297 @@ * @author nik */ public class ManifestFileUtil { - private static final Logger LOGGER = Logger.getInstance(ManifestFileUtil.class); + private static final Logger LOGGER = Logger.getInstance(ManifestFileUtil.class); - public static final String MANIFEST_PATH = JarFile.MANIFEST_NAME; - public static final String MANIFEST_FILE_NAME = PathUtil.getFileName(MANIFEST_PATH); - public static final String MANIFEST_DIR_NAME = PathUtil.getParentPath(MANIFEST_PATH); + public static final String MANIFEST_PATH = JarFile.MANIFEST_NAME; + public static final String MANIFEST_FILE_NAME = PathUtil.getFileName(MANIFEST_PATH); + public static final String MANIFEST_DIR_NAME = PathUtil.getParentPath(MANIFEST_PATH); - private ManifestFileUtil() { - } - - @Nullable - public static VirtualFile findManifestFile(@Nonnull CompositePackagingElement root, PackagingElementResolvingContext context, ArtifactType artifactType) { - return ArtifactUtil.findSourceFileByOutputPath(root, MANIFEST_PATH, context, artifactType); - } + private ManifestFileUtil() { + } - @Nullable - public static VirtualFile suggestManifestFileDirectory(@Nonnull CompositePackagingElement root, PackagingElementResolvingContext context, ArtifactType artifactType) { - final VirtualFile metaInfDir = ArtifactUtil.findSourceFileByOutputPath(root, MANIFEST_DIR_NAME, context, artifactType); - if (metaInfDir != null) { - return metaInfDir; + @Nullable + public static VirtualFile findManifestFile( + @Nonnull CompositePackagingElement root, + PackagingElementResolvingContext context, + ArtifactType artifactType + ) { + return ArtifactUtil.findSourceFileByOutputPath(root, MANIFEST_PATH, context, artifactType); } - final Ref sourceDir = Ref.create(null); - final Ref sourceFile = Ref.create(null); - ArtifactUtil.processElementsWithSubstitutions( - root.getChildren(), - context, - artifactType, - PackagingElementPath.EMPTY, - new PackagingElementProcessor<>() { - @Override - public boolean process(@Nonnull PackagingElement element, @Nonnull PackagingElementPath path) { - if (element instanceof FileCopyPackagingElement fileCopyPackagingElement) { - final VirtualFile file = fileCopyPackagingElement.findFile(); - if (file != null) { - sourceFile.set(file); - } - } else if (element instanceof DirectoryCopyPackagingElement directoryCopyPackagingElement) { - final VirtualFile file = directoryCopyPackagingElement.findFile(); - if (file != null) { - sourceDir.set(file); - return false; + @Nullable + public static VirtualFile suggestManifestFileDirectory( + @Nonnull CompositePackagingElement root, + PackagingElementResolvingContext context, + ArtifactType artifactType + ) { + VirtualFile metaInfDir = ArtifactUtil.findSourceFileByOutputPath(root, MANIFEST_DIR_NAME, context, artifactType); + if (metaInfDir != null) { + return metaInfDir; + } + + final SimpleReference sourceDir = SimpleReference.create(null); + final SimpleReference sourceFile = SimpleReference.create(null); + ArtifactUtil.processElementsWithSubstitutions( + root.getChildren(), + context, + artifactType, + PackagingElementPath.EMPTY, + new PackagingElementProcessor<>() { + @Override + public boolean process(@Nonnull PackagingElement element, @Nonnull PackagingElementPath path) { + if (element instanceof FileCopyPackagingElement fileCopyPackagingElement) { + VirtualFile file = fileCopyPackagingElement.findFile(); + if (file != null) { + sourceFile.set(file); + } + } + else if (element instanceof DirectoryCopyPackagingElement directoryCopyPackagingElement) { + VirtualFile file = directoryCopyPackagingElement.findFile(); + if (file != null) { + sourceDir.set(file); + return false; + } + } + return true; + } } - } - return true; + ); + + if (!sourceDir.isNull()) { + return sourceDir.get(); } - } - ); - if (!sourceDir.isNull()) { - return sourceDir.get(); + + Project project = context.getProject(); + return suggestBaseDir(project, sourceFile.get()); } + @Nullable + public static VirtualFile suggestManifestFileDirectory(@Nonnull Project project, @Nullable Module module) { + OrderEnumerator enumerator = module != null ? OrderEnumerator.orderEntries(module) : OrderEnumerator.orderEntries(project); + VirtualFile[] files = enumerator.withoutDepModules().withoutLibraries().withoutSdk().productionOnly().sources().getRoots(); + if (files.length > 0) { + return files[0]; + } + return suggestBaseDir(project, null); + } - final Project project = context.getProject(); - return suggestBaseDir(project, sourceFile.get()); - } - @Nullable - public static VirtualFile suggestManifestFileDirectory(@Nonnull Project project, @Nullable Module module) { - OrderEnumerator enumerator = module != null ? OrderEnumerator.orderEntries(module) : OrderEnumerator.orderEntries(project); - final VirtualFile[] files = enumerator.withoutDepModules().withoutLibraries().withoutSdk().productionOnly().sources().getRoots(); - if (files.length > 0) { - return files[0]; - } - return suggestBaseDir(project, null); - } + @Nullable + private static VirtualFile suggestBaseDir(@Nonnull Project project, @Nullable VirtualFile file) { + VirtualFile[] contentRoots = ProjectRootManager.getInstance(project).getContentRoots(); + if (file == null && contentRoots.length > 0) { + return contentRoots[0]; + } + if (file != null) { + for (VirtualFile contentRoot : contentRoots) { + if (VirtualFileUtil.isAncestor(contentRoot, file, false)) { + return contentRoot; + } + } + } - @Nullable - private static VirtualFile suggestBaseDir(@Nonnull Project project, final @Nullable VirtualFile file) { - final VirtualFile[] contentRoots = ProjectRootManager.getInstance(project).getContentRoots(); - if (file == null && contentRoots.length > 0) { - return contentRoots[0]; + return project.getBaseDir(); } - if (file != null) { - for (VirtualFile contentRoot : contentRoots) { - if (VirtualFileUtil.isAncestor(contentRoot, file, false)) { - return contentRoot; + public static Manifest readManifest(@Nonnull VirtualFile manifestFile) { + try (InputStream inputStream = manifestFile.getInputStream()) { + return new Manifest(inputStream); + } + catch (IOException ignored) { + return new Manifest(); } - } } - return project.getBaseDir(); - } + public static void updateManifest( + @Nonnull VirtualFile file, + @Nullable String mainClass, + @Nullable List classpath, + boolean replaceValues + ) { + Manifest manifest = readManifest(file); + Attributes mainAttributes = manifest.getMainAttributes(); + + if (mainClass != null) { + mainAttributes.put(Attributes.Name.MAIN_CLASS, mainClass); + } + else if (replaceValues) { + mainAttributes.remove(Attributes.Name.MAIN_CLASS); + } - public static Manifest readManifest(@Nonnull VirtualFile manifestFile) { - try (InputStream inputStream = manifestFile.getInputStream()) { - return new Manifest(inputStream); - } - catch (IOException ignored) { - return new Manifest(); + if (classpath != null && !classpath.isEmpty()) { + List updatedClasspath; + if (replaceValues) { + updatedClasspath = classpath; + } + else { + updatedClasspath = new ArrayList<>(); + String oldClasspath = (String)mainAttributes.get(Attributes.Name.CLASS_PATH); + if (!StringUtil.isEmpty(oldClasspath)) { + updatedClasspath.addAll(StringUtil.split(oldClasspath, " ")); + } + for (String path : classpath) { + if (!updatedClasspath.contains(path)) { + updatedClasspath.add(path); + } + } + } + mainAttributes.put(Attributes.Name.CLASS_PATH, StringUtil.join(updatedClasspath, " ")); + } + else if (replaceValues) { + mainAttributes.remove(Attributes.Name.CLASS_PATH); + } + + ManifestBuilder.setVersionAttribute(mainAttributes); + + try (OutputStream outputStream = file.getOutputStream(ManifestFileUtil.class)) { + manifest.write(outputStream); + } + catch (IOException e) { + LOGGER.info(e); + } } - } - - public static void updateManifest( - @Nonnull VirtualFile file, - final @Nullable String mainClass, - final @Nullable List classpath, - final boolean replaceValues - ) { - final Manifest manifest = readManifest(file); - final Attributes mainAttributes = manifest.getMainAttributes(); - - if (mainClass != null) { - mainAttributes.put(Attributes.Name.MAIN_CLASS, mainClass); - } else if (replaceValues) { - mainAttributes.remove(Attributes.Name.MAIN_CLASS); + + @Nonnull + public static ManifestFileConfiguration createManifestFileConfiguration(@Nonnull VirtualFile manifestFile) { + String path = manifestFile.getPath(); + Manifest manifest = readManifest(manifestFile); + String mainClass = manifest.getMainAttributes().getValue(Attributes.Name.MAIN_CLASS); + String classpathText = manifest.getMainAttributes().getValue(Attributes.Name.CLASS_PATH); + List classpath = new ArrayList<>(); + if (classpathText != null) { + classpath.addAll(StringUtil.split(classpathText, " ")); + } + return new ManifestFileConfiguration(path, classpath, mainClass, manifestFile.isWritable()); } - if (classpath != null && !classpath.isEmpty()) { - List updatedClasspath; - if (replaceValues) { - updatedClasspath = classpath; - } else { - updatedClasspath = new ArrayList<>(); - final String oldClasspath = (String) mainAttributes.get(Attributes.Name.CLASS_PATH); - if (!StringUtil.isEmpty(oldClasspath)) { - updatedClasspath.addAll(StringUtil.split(oldClasspath, " ")); + public static List getClasspathForElements( + List> elements, + PackagingElementResolvingContext context, + ArtifactType artifactType + ) { + List classpath = new ArrayList<>(); + PackagingElementProcessor> processor = new PackagingElementProcessor<>() { + @Override + public boolean process(@Nonnull PackagingElement element, @Nonnull PackagingElementPath path) { + if (element instanceof FileCopyPackagingElement fileCopyPackagingElement) { + String fileName = fileCopyPackagingElement.getOutputFileName(); + classpath.add(ArtifactUtil.appendToPath(path.getPathString(), fileName)); + } + else if (element instanceof DirectoryCopyPackagingElement) { + classpath.add(path.getPathString()); + } + else if (element instanceof ArchivePackagingElement archivePackagingElement) { + String archiveName = archivePackagingElement.getName(); + classpath.add(ArtifactUtil.appendToPath(path.getPathString(), archiveName)); + } + return true; + } + }; + for (PackagingElement element : elements) { + ArtifactUtil.processPackagingElements(element, null, processor, context, true, artifactType); } - for (String path : classpath) { - if (!updatedClasspath.contains(path)) { - updatedClasspath.add(path); - } + return classpath; + } + + @Nullable + @RequiredUIAccess + public static VirtualFile showDialogAndCreateManifest(ArtifactEditorContext context, CompositePackagingElement element) { + FileChooserDescriptor descriptor = createDescriptorForManifestDirectory(); + VirtualFile directory = suggestManifestFileDirectory(element, context, context.getArtifactType()); + VirtualFile file = IdeaFileChooser.chooseFile(descriptor, context.getProject(), directory); + if (file == null) { + return null; } - } - mainAttributes.put(Attributes.Name.CLASS_PATH, StringUtil.join(updatedClasspath, " ")); - } else if (replaceValues) { - mainAttributes.remove(Attributes.Name.CLASS_PATH); + + return createManifestFile(file, context.getProject()); } - ManifestBuilder.setVersionAttribute(mainAttributes); + @Nullable + @RequiredUIAccess + public static VirtualFile createManifestFile(@Nonnull VirtualFile directory, final @Nonnull Project project) { + UIAccess.assertIsUIThread(); + final SimpleReference exc = SimpleReference.create(null); + final VirtualFile file = WriteAction.compute(() -> { + VirtualFile dir = directory; + try { + if (!dir.getName().equals(MANIFEST_DIR_NAME)) { + dir = VirtualFileUtil.createDirectoryIfMissing(dir, MANIFEST_DIR_NAME); + } + final VirtualFile f = dir.createChildData(ManifestFileUtil.class, MANIFEST_FILE_NAME); + try (OutputStream output = f.getOutputStream(ManifestFileUtil.class)) { + final Manifest manifest = new Manifest(); + ManifestBuilder.setVersionAttribute(manifest.getMainAttributes()); + manifest.write(output); + } + return f; + } + catch (IOException e) { + exc.set(e); + return null; + } + }); - try (OutputStream outputStream = file.getOutputStream(ManifestFileUtil.class)) { - manifest.write(outputStream); + final IOException exception = exc.get(); + if (exception != null) { + LOGGER.info(exception); + Messages.showErrorDialog(project, exception.getMessage(), CommonLocalize.titleError().get()); + return null; + } + return file; } - catch (IOException e) { - LOGGER.info(e); + + public static FileChooserDescriptor createDescriptorForManifestDirectory() { + FileChooserDescriptor descriptor = FileChooserDescriptorFactory.createSingleFolderDescriptor(); + descriptor.withTitleValue(LocalizeValue.localizeTODO("Select Directory for META-INF/MANIFEST.MF file")); + return descriptor; } - } - - @Nonnull - public static ManifestFileConfiguration createManifestFileConfiguration(@Nonnull VirtualFile manifestFile) { - final String path = manifestFile.getPath(); - Manifest manifest = readManifest(manifestFile); - String mainClass = manifest.getMainAttributes().getValue(Attributes.Name.MAIN_CLASS); - final String classpathText = manifest.getMainAttributes().getValue(Attributes.Name.CLASS_PATH); - final List classpath = new ArrayList<>(); - if (classpathText != null) { - classpath.addAll(StringUtil.split(classpathText, " ")); + + public static void addManifestFileToLayout( + @Nonnull String path, + @Nonnull ArtifactEditorContext context, + @Nonnull CompositePackagingElement element + ) { + context.editLayout( + context.getArtifact(), + () -> { + VirtualFile file = findManifestFile(element, context, context.getArtifactType()); + if (file == null || !FileUtil.pathsEqual(file.getPath(), path)) { + PackagingElementFactory.getInstance(context.getProject()) + .addFileCopy(element, MANIFEST_DIR_NAME, path, MANIFEST_FILE_NAME); + } + } + ); } - return new ManifestFileConfiguration(path, classpath, mainClass, manifestFile.isWritable()); - } - - public static List getClasspathForElements(List> elements, PackagingElementResolvingContext context, final ArtifactType artifactType) { - final List classpath = new ArrayList<>(); - final PackagingElementProcessor> processor = new PackagingElementProcessor<>() { - @Override - public boolean process(@Nonnull PackagingElement element, @Nonnull PackagingElementPath path) { - if (element instanceof FileCopyPackagingElement fileCopyPackagingElement) { - final String fileName = fileCopyPackagingElement.getOutputFileName(); - classpath.add(ArtifactUtil.appendToPath(path.getPathString(), fileName)); - } else if (element instanceof DirectoryCopyPackagingElement) { - classpath.add(path.getPathString()); - } else if (element instanceof ArchivePackagingElement archivePackagingElement) { - final String archiveName = archivePackagingElement.getName(); - classpath.add(ArtifactUtil.appendToPath(path.getPathString(), archiveName)); - } - return true; - } - }; - for (PackagingElement element : elements) { - ArtifactUtil.processPackagingElements(element, null, processor, context, true, artifactType); + + @RequiredUIAccess + @Nullable + public static PsiClass selectMainClass(Project project, @Nullable String initialClassName) { + TreeClassChooserFactory chooserFactory = TreeClassChooserFactory.getInstance(project); + GlobalSearchScope searchScope = GlobalSearchScope.allScope(project); + PsiClass aClass = initialClassName != null ? JavaPsiFacade.getInstance(project).findClass(initialClassName, searchScope) : null; + TreeClassChooser chooser = + chooserFactory.createWithInnerClassesScopeChooser("Select Main Class", searchScope, new MainClassFilter(), aClass); + chooser.showDialog(); + return chooser.getSelected(); } - return classpath; - } - - @Nullable - public static VirtualFile showDialogAndCreateManifest(final ArtifactEditorContext context, final CompositePackagingElement element) { - FileChooserDescriptor descriptor = createDescriptorForManifestDirectory(); - final VirtualFile directory = suggestManifestFileDirectory(element, context, context.getArtifactType()); - final VirtualFile file = IdeaFileChooser.chooseFile(descriptor, context.getProject(), directory); - if (file == null) { - return null; + + public static void setupMainClassField(Project project, TextFieldWithBrowseButton field) { + field.addActionListener(e -> { + PsiClass selected = selectMainClass(project, field.getText()); + if (selected != null) { + field.setText(selected.getQualifiedName()); + } + }); } - return createManifestFile(file, context.getProject()); - } - - @Nullable - public static VirtualFile createManifestFile(final @Nonnull VirtualFile directory, final @Nonnull Project project) { - project.getApplication().assertIsDispatchThread(); - final Ref exc = Ref.create(null); - final VirtualFile file = WriteAction.compute(() -> { - VirtualFile dir = directory; - try { - if (!dir.getName().equals(MANIFEST_DIR_NAME)) { - dir = VirtualFileUtil.createDirectoryIfMissing(dir, MANIFEST_DIR_NAME); - } - final VirtualFile f = dir.createChildData(ManifestFileUtil.class, MANIFEST_FILE_NAME); - try (OutputStream output = f.getOutputStream(ManifestFileUtil.class)) { - final Manifest manifest = new Manifest(); - ManifestBuilder.setVersionAttribute(manifest.getMainAttributes()); - manifest.write(output); + private static class MainClassFilter implements ClassFilter { + @Override + public boolean isAccepted(PsiClass aClass) { + return Application.get() + .runReadAction((Supplier)() -> PsiMethodUtil.MAIN_CLASS.test(aClass) && PsiMethodUtil.hasMainMethod(aClass)); } - return f; - } catch (IOException e) { - exc.set(e); - return null; - } - }); - - final IOException exception = exc.get(); - if (exception != null) { - LOGGER.info(exception); - Messages.showErrorDialog(project, exception.getMessage(), CommonLocalize.titleError().get()); - return null; - } - return file; - } - - public static FileChooserDescriptor createDescriptorForManifestDirectory() { - FileChooserDescriptor descriptor = FileChooserDescriptorFactory.createSingleFolderDescriptor(); - descriptor.setTitle("Select Directory for META-INF/MANIFEST.MF file"); - return descriptor; - } - - public static void addManifestFileToLayout(final @Nonnull String path, final @Nonnull ArtifactEditorContext context, final @Nonnull CompositePackagingElement element) { - context.editLayout(context.getArtifact(), () -> { - final VirtualFile file = findManifestFile(element, context, context.getArtifactType()); - if (file == null || !FileUtil.pathsEqual(file.getPath(), path)) { - PackagingElementFactory.getInstance(context.getProject()).addFileCopy(element, MANIFEST_DIR_NAME, path, MANIFEST_FILE_NAME); - } - }); - } - - @Nullable - public static PsiClass selectMainClass(Project project, final @Nullable String initialClassName) { - final TreeClassChooserFactory chooserFactory = TreeClassChooserFactory.getInstance(project); - final GlobalSearchScope searchScope = GlobalSearchScope.allScope(project); - final PsiClass aClass = initialClassName != null ? JavaPsiFacade.getInstance(project).findClass(initialClassName, searchScope) : null; - final TreeClassChooser chooser = chooserFactory.createWithInnerClassesScopeChooser("Select Main Class", searchScope, new MainClassFilter(), aClass); - chooser.showDialog(); - return chooser.getSelected(); - } - - public static void setupMainClassField(final Project project, final TextFieldWithBrowseButton field) { - field.addActionListener(e -> { - final PsiClass selected = selectMainClass(project, field.getText()); - if (selected != null) { - field.setText(selected.getQualifiedName()); - } - }); - } - - private static class MainClassFilter implements ClassFilter { - @Override - public boolean isAccepted(final PsiClass aClass) { - return Application.get() - .runReadAction((Computable)() -> PsiMethodUtil.MAIN_CLASS.test(aClass) && PsiMethodUtil.hasMainMethod(aClass)); } - } } diff --git a/java-compiler-artifact-impl/src/main/java/com/intellij/java/compiler/artifact/impl/artifacts/JarArtifactFromModulesDialog.java b/java-compiler-artifact-impl/src/main/java/com/intellij/java/compiler/artifact/impl/artifacts/JarArtifactFromModulesDialog.java index f064339bb..b6fa8eea0 100644 --- a/java-compiler-artifact-impl/src/main/java/com/intellij/java/compiler/artifact/impl/artifacts/JarArtifactFromModulesDialog.java +++ b/java-compiler-artifact-impl/src/main/java/com/intellij/java/compiler/artifact/impl/artifacts/JarArtifactFromModulesDialog.java @@ -16,10 +16,11 @@ package com.intellij.java.compiler.artifact.impl.artifacts; import com.intellij.java.compiler.artifact.impl.ManifestFileUtil; -import consulo.application.AllIcons; import consulo.compiler.artifact.element.PackagingElementResolvingContext; +import consulo.localize.LocalizeValue; import consulo.module.Module; import consulo.module.ModulesAlphaComparator; +import consulo.platform.base.icon.PlatformIconGroup; import consulo.project.Project; import consulo.ui.ex.awt.ColoredListCellRenderer; import consulo.ui.ex.awt.ComboboxSpeedSearch; @@ -34,7 +35,6 @@ import javax.swing.*; import javax.swing.event.DocumentEvent; -import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.Arrays; @@ -42,133 +42,129 @@ * @author nik */ public class JarArtifactFromModulesDialog extends DialogWrapper { - private JPanel myMainPanel; - private TextFieldWithBrowseButton myMainClassField; - private JComboBox myModuleComboBox; - private JLabel myMainClassLabel; - private TextFieldWithBrowseButton myManifestDirField; - private JLabel myManifestDirLabel; - private JRadioButton myExtractJarsRadioButton; - private JRadioButton myCopyJarsRadioButton; - private JCheckBox myIncludeTestsCheckBox; - private PackagingElementResolvingContext myContext; - - public JarArtifactFromModulesDialog(PackagingElementResolvingContext context) { - super(context.getProject()); - myContext = context; - setTitle("Create Jar from Modules"); - myMainClassLabel.setLabelFor(myMainClassField.getTextField()); - myManifestDirLabel.setLabelFor(myManifestDirField.getTextField()); - - final Project project = myContext.getProject(); - ManifestFileUtil.setupMainClassField(project, myMainClassField); - myMainClassField.getTextField().getDocument().addDocumentListener(new DocumentAdapter() { - @Override - protected void textChanged(DocumentEvent e) { - updateManifestDirField(); - } - }); - final ActionListener actionListener = new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { + private JPanel myMainPanel; + private TextFieldWithBrowseButton myMainClassField; + private JComboBox myModuleComboBox; + private JLabel myMainClassLabel; + private TextFieldWithBrowseButton myManifestDirField; + private JLabel myManifestDirLabel; + private JRadioButton myExtractJarsRadioButton; + private JRadioButton myCopyJarsRadioButton; + private JCheckBox myIncludeTestsCheckBox; + private PackagingElementResolvingContext myContext; + + public JarArtifactFromModulesDialog(PackagingElementResolvingContext context) { + super(context.getProject()); + myContext = context; + setTitle(LocalizeValue.localizeTODO("Create Jar from Modules")); + myMainClassLabel.setLabelFor(myMainClassField.getTextField()); + myManifestDirLabel.setLabelFor(myManifestDirField.getTextField()); + + Project project = myContext.getProject(); + ManifestFileUtil.setupMainClassField(project, myMainClassField); + myMainClassField.getTextField().getDocument().addDocumentListener(new DocumentAdapter() { + @Override + protected void textChanged(DocumentEvent e) { + updateManifestDirField(); + } + }); + final ActionListener actionListener = e -> updateManifestDirField(); + myExtractJarsRadioButton.addActionListener(actionListener); + myCopyJarsRadioButton.addActionListener(actionListener); + updateManifestDirField(); - } - }; - myExtractJarsRadioButton.addActionListener(actionListener); - myCopyJarsRadioButton.addActionListener(actionListener); - - updateManifestDirField(); - myManifestDirField.addBrowseFolderListener(null, null, project, ManifestFileUtil.createDescriptorForManifestDirectory()); - - setupModulesCombobox(context); - init(); - } - - private void setupModulesCombobox(PackagingElementResolvingContext context) { - final Module[] modules = context.getModulesProvider().getModules().clone(); - Arrays.sort(modules, ModulesAlphaComparator.INSTANCE); - if (modules.length > 1) { - myModuleComboBox.addItem(null); + myManifestDirField.addBrowseFolderListener(null, null, project, ManifestFileUtil.createDescriptorForManifestDirectory()); + + setupModulesCombobox(context); + init(); + } + + private void setupModulesCombobox(PackagingElementResolvingContext context) { + final Module[] modules = context.getModulesProvider().getModules().clone(); + Arrays.sort(modules, ModulesAlphaComparator.INSTANCE); + if (modules.length > 1) { + myModuleComboBox.addItem(null); + } + for (Module module : modules) { + myModuleComboBox.addItem(module); + } + myModuleComboBox.setRenderer(new ModuleListRenderer()); + new ComboboxSpeedSearch(myModuleComboBox) { + @Override + protected String getElementText(Object element) { + return element instanceof Module ? ((Module)element).getName() : ""; + } + }; + } + + private void updateManifestDirField() { + final boolean enable = !myMainClassField.getText().isEmpty() || !myExtractJarsRadioButton.isSelected(); + setManifestDirFieldEnabled(enable); + if (enable && myManifestDirField.getText().isEmpty()) { + final VirtualFile file = ManifestFileUtil.suggestManifestFileDirectory(myContext.getProject(), getSelectedModule()); + if (file != null) { + myManifestDirField.setText(FileUtil.toSystemDependentName(file.getPath())); + } + } + } + + @Nullable + private Module getSelectedModule() { + return (Module)myModuleComboBox.getSelectedItem(); + } + + @Nonnull + public Module[] getSelectedModules() { + final Module module = getSelectedModule(); + if (module != null) { + return new Module[]{module}; + } + return myContext.getModulesProvider().getModules(); + } + + @Nonnull + public String getDirectoryForManifest() { + return FileUtil.toSystemIndependentName(myManifestDirField.getText()); + } + + public boolean isExtractLibrariesToJar() { + return myExtractJarsRadioButton.isSelected(); } - for (Module module : modules) { - myModuleComboBox.addItem(module); + + public boolean isIncludeTests() { + return myIncludeTestsCheckBox.isSelected(); + } + + public String getMainClassName() { + return myMainClassField.getText(); } - myModuleComboBox.setRenderer(new ModuleListRenderer()); - new ComboboxSpeedSearch(myModuleComboBox) { - @Override - protected String getElementText(Object element) { - return element instanceof Module ? ((Module) element).getName() : ""; - } - }; - } - - private void updateManifestDirField() { - final boolean enable = !myMainClassField.getText().isEmpty() || !myExtractJarsRadioButton.isSelected(); - setManifestDirFieldEnabled(enable); - if (enable && myManifestDirField.getText().isEmpty()) { - final VirtualFile file = ManifestFileUtil.suggestManifestFileDirectory(myContext.getProject(), getSelectedModule()); - if (file != null) { - myManifestDirField.setText(FileUtil.toSystemDependentName(file.getPath())); - } + + private void setManifestDirFieldEnabled(boolean enabled) { + myManifestDirLabel.setEnabled(enabled); + myManifestDirField.setEnabled(enabled); } - } - - @Nullable - private Module getSelectedModule() { - return (Module) myModuleComboBox.getSelectedItem(); - } - - @Nonnull - public Module[] getSelectedModules() { - final Module module = getSelectedModule(); - if (module != null) { - return new Module[]{module}; + + @Override + protected JComponent createCenterPanel() { + return myMainPanel; } - return myContext.getModulesProvider().getModules(); - } - - @Nonnull - public String getDirectoryForManifest() { - return FileUtil.toSystemIndependentName(myManifestDirField.getText()); - } - - public boolean isExtractLibrariesToJar() { - return myExtractJarsRadioButton.isSelected(); - } - - public boolean isIncludeTests() { - return myIncludeTestsCheckBox.isSelected(); - } - - public String getMainClassName() { - return myMainClassField.getText(); - } - - private void setManifestDirFieldEnabled(boolean enabled) { - myManifestDirLabel.setEnabled(enabled); - myManifestDirField.setEnabled(enabled); - } - - @Override - protected JComponent createCenterPanel() { - return myMainPanel; - } - - @Override - protected String getHelpId() { - return "reference.project.structure.artifacts.jar.from.module"; - } - - private static class ModuleListRenderer extends ColoredListCellRenderer { + @Override - protected void customizeCellRenderer(@Nonnull JList jList, Module module, int i, boolean b, boolean b1) { - if (module != null) { - setIcon(AllIcons.Nodes.Module); - append(module.getName()); - } else { - append(""); - setIcon(AllIcons.Nodes.ModuleGroup); - } + protected String getHelpId() { + return "reference.project.structure.artifacts.jar.from.module"; + } + + private static class ModuleListRenderer extends ColoredListCellRenderer { + @Override + protected void customizeCellRenderer(@Nonnull JList jList, Module module, int i, boolean b, boolean b1) { + if (module != null) { + setIcon(PlatformIconGroup.nodesModule()); + append(module.getName()); + } + else { + append(""); + setIcon(PlatformIconGroup.nodesModulegroup()); + } + } } - } } diff --git a/java-compiler-artifact-impl/src/main/java/com/intellij/java/compiler/artifact/impl/artifacts/JarArtifactType.java b/java-compiler-artifact-impl/src/main/java/com/intellij/java/compiler/artifact/impl/artifacts/JarArtifactType.java index 3c5e326be..645cf80d8 100644 --- a/java-compiler-artifact-impl/src/main/java/com/intellij/java/compiler/artifact/impl/artifacts/JarArtifactType.java +++ b/java-compiler-artifact-impl/src/main/java/com/intellij/java/compiler/artifact/impl/artifacts/JarArtifactType.java @@ -17,7 +17,7 @@ import com.intellij.java.compiler.artifact.impl.elements.JarArchivePackagingElement; import consulo.annotation.component.ExtensionImpl; -import consulo.application.AllIcons; +import consulo.application.Application; import consulo.compiler.artifact.ArtifactTemplate; import consulo.compiler.artifact.ArtifactType; import consulo.compiler.artifact.ArtifactUtil; @@ -27,10 +27,13 @@ import consulo.compiler.artifact.element.PackagingElementResolvingContext; import consulo.java.language.module.extension.JavaModuleExtension; import consulo.language.util.ModuleUtilCore; +import consulo.localize.LocalizeValue; import consulo.module.content.layer.ModulesProvider; +import consulo.platform.base.icon.PlatformIconGroup; import consulo.ui.image.Image; import jakarta.annotation.Nonnull; + import java.util.Collections; import java.util.List; @@ -39,39 +42,39 @@ */ @ExtensionImpl(order = "after zip-artifact") public class JarArtifactType extends ArtifactType { - public JarArtifactType() { - super("jar", "Jar"); - } + public JarArtifactType() { + super("jar", LocalizeValue.localizeTODO("Jar")); + } - public static JarArtifactType getInstance() { - return EP_NAME.findExtension(JarArtifactType.class); - } + public static JarArtifactType getInstance() { + return Application.get().getExtensionPoint(ArtifactType.class).findExtension(JarArtifactType.class); + } - @Nonnull - @Override - public Image getIcon() { - return AllIcons.Nodes.Artifact; - } + @Nonnull + @Override + public Image getIcon() { + return PlatformIconGroup.nodesArtifact(); + } - @Override - public String getDefaultPathFor(@Nonnull PackagingElementOutputKind kind) { - return "/"; - } + @Override + public String getDefaultPathFor(@Nonnull PackagingElementOutputKind kind) { + return "/"; + } - @Override - public boolean isAvailableForAdd(@Nonnull ModulesProvider modulesProvider) { - return ModuleUtilCore.hasModuleExtension(modulesProvider, JavaModuleExtension.class); - } + @Override + public boolean isAvailableForAdd(@Nonnull ModulesProvider modulesProvider) { + return ModuleUtilCore.hasModuleExtension(modulesProvider, JavaModuleExtension.class); + } - @Nonnull - @Override - public CompositePackagingElement createRootElement(@Nonnull PackagingElementFactory factory, @Nonnull String artifactName) { - return new JarArchivePackagingElement(ArtifactUtil.suggestArtifactFileName(artifactName) + ".jar"); - } + @Nonnull + @Override + public CompositePackagingElement createRootElement(@Nonnull PackagingElementFactory factory, @Nonnull String artifactName) { + return new JarArchivePackagingElement(ArtifactUtil.suggestArtifactFileName(artifactName) + ".jar"); + } - @Nonnull - @Override - public List getNewArtifactTemplates(@Nonnull PackagingElementResolvingContext context) { - return Collections.singletonList(new JarFromModulesTemplate(context)); - } + @Nonnull + @Override + public List getNewArtifactTemplates(@Nonnull PackagingElementResolvingContext context) { + return Collections.singletonList(new JarFromModulesTemplate(context)); + } } diff --git a/java-compiler-artifact-impl/src/main/java/com/intellij/java/compiler/artifact/impl/artifacts/JarFromModulesTemplate.java b/java-compiler-artifact-impl/src/main/java/com/intellij/java/compiler/artifact/impl/artifacts/JarFromModulesTemplate.java index e061abd53..f3b7cf7fa 100644 --- a/java-compiler-artifact-impl/src/main/java/com/intellij/java/compiler/artifact/impl/artifacts/JarFromModulesTemplate.java +++ b/java-compiler-artifact-impl/src/main/java/com/intellij/java/compiler/artifact/impl/artifacts/JarFromModulesTemplate.java @@ -24,6 +24,7 @@ import consulo.compiler.artifact.element.*; import consulo.content.base.BinariesOrderRootType; import consulo.content.library.Library; +import consulo.localize.LocalizeValue; import consulo.logging.Logger; import consulo.module.Module; import consulo.module.content.ProjectRootManager; @@ -45,158 +46,173 @@ * @author nik */ public class JarFromModulesTemplate extends ArtifactTemplate { - private static final Logger LOG = Logger.getInstance(JarFromModulesTemplate.class); + private static final Logger LOG = Logger.getInstance(JarFromModulesTemplate.class); - private PackagingElementResolvingContext myContext; + private PackagingElementResolvingContext myContext; - public JarFromModulesTemplate(PackagingElementResolvingContext context) { - myContext = context; - } - - @Override - @RequiredUIAccess - public NewArtifactConfiguration createArtifact() { - JarArtifactFromModulesDialog dialog = new JarArtifactFromModulesDialog(myContext); - dialog.show(); - if (!dialog.isOK()) { - return null; + public JarFromModulesTemplate(PackagingElementResolvingContext context) { + myContext = context; } - return doCreateArtifact( - dialog.getSelectedModules(), - dialog.getMainClassName(), - dialog.getDirectoryForManifest(), - dialog.isExtractLibrariesToJar(), - dialog.isIncludeTests() - ); - } - - @Nullable - @RequiredUIAccess - public NewArtifactConfiguration doCreateArtifact( - final Module[] modules, - final String mainClassName, - final String directoryForManifest, - final boolean extractLibrariesToJar, - final boolean includeTests - ) { - VirtualFile manifestFile = null; - final Project project = myContext.getProject(); - if (mainClassName != null && !mainClassName.isEmpty() || !extractLibrariesToJar) { - final VirtualFile directory; - try { - directory = project.getApplication().runWriteAction( - (ThrowableComputable) () -> VirtualFileUtil.createDirectoryIfMissing(directoryForManifest) - ); - } - catch (IOException e) { - LOG.info(e); - Messages.showErrorDialog( - project, - "Cannot create directory '" + directoryForManifest + "': " + e.getMessage(), - CommonLocalize.titleError().get() + @Override + @RequiredUIAccess + public NewArtifactConfiguration createArtifact() { + JarArtifactFromModulesDialog dialog = new JarArtifactFromModulesDialog(myContext); + dialog.show(); + if (!dialog.isOK()) { + return null; + } + + return doCreateArtifact( + dialog.getSelectedModules(), + dialog.getMainClassName(), + dialog.getDirectoryForManifest(), + dialog.isExtractLibrariesToJar(), + dialog.isIncludeTests() ); - return null; - } - if (directory == null) return null; - - manifestFile = ManifestFileUtil.createManifestFile(directory, project); - if (manifestFile == null) { - return null; - } - ManifestFileUtil.updateManifest(manifestFile, mainClassName, null, true); } - String name = modules.length == 1 ? modules[0].getName() : project.getName(); + @Nullable + @RequiredUIAccess + public NewArtifactConfiguration doCreateArtifact( + Module[] modules, + String mainClassName, + String directoryForManifest, + boolean extractLibrariesToJar, + boolean includeTests + ) { + VirtualFile manifestFile = null; + Project project = myContext.getProject(); + if (mainClassName != null && !mainClassName.isEmpty() || !extractLibrariesToJar) { + VirtualFile directory; + try { + directory = project.getApplication().runWriteAction( + (ThrowableComputable)() -> VirtualFileUtil.createDirectoryIfMissing(directoryForManifest) + ); + } + catch (IOException e) { + LOG.info(e); + Messages.showErrorDialog( + project, + "Cannot create directory '" + directoryForManifest + "': " + e.getMessage(), + CommonLocalize.titleError().get() + ); + return null; + } + if (directory == null) { + return null; + } + + manifestFile = ManifestFileUtil.createManifestFile(directory, project); + if (manifestFile == null) { + return null; + } + ManifestFileUtil.updateManifest(manifestFile, mainClassName, null, true); + } - final PackagingElementFactory factory = PackagingElementFactory.getInstance(myContext.getProject()); - final CompositePackagingElement archive = factory.createZipArchive(ArtifactUtil.suggestArtifactFileName(name) + ".jar"); + String name = modules.length == 1 ? modules[0].getName() : project.getName(); - OrderEnumerator orderEnumerator = ProjectRootManager.getInstance(project).orderEntries(Arrays.asList(modules)); + PackagingElementFactory factory = PackagingElementFactory.getInstance(myContext.getProject()); + CompositePackagingElement archive = factory.createZipArchive(ArtifactUtil.suggestArtifactFileName(name) + ".jar"); - final Set libraries = new HashSet<>(); - if (!includeTests) { - orderEnumerator = orderEnumerator.productionOnly(); - } - final ModulesProvider modulesProvider = myContext.getModulesProvider(); - final OrderEnumerator enumerator = orderEnumerator.using(modulesProvider).withoutSdk().runtimeOnly().recursively(); - enumerator.forEachLibrary(new CommonProcessors.CollectProcessor<>(libraries)); - enumerator.forEachModule(module -> { - if (ProductionModuleOutputElementType.getInstance().isSuitableModule(modulesProvider, module)) { - archive.addOrFindChild(factory.createModuleOutput(module)); - } - if (includeTests && TestModuleOutputElementType.getInstance().isSuitableModule(modulesProvider, module)) { - archive.addOrFindChild(factory.createTestModuleOutput(module)); - } - return true; - }); - - final JarArtifactType jarArtifactType = JarArtifactType.getInstance(); - if (manifestFile != null && !manifestFile.equals(ManifestFileUtil.findManifestFile(archive, myContext, jarArtifactType))) { - archive.addFirstChild(factory.createFileCopyWithParentDirectories(manifestFile.getPath(), ManifestFileUtil.MANIFEST_DIR_NAME)); - } + OrderEnumerator orderEnumerator = ProjectRootManager.getInstance(project).orderEntries(Arrays.asList(modules)); - final String artifactName = name + ":jar"; - if (extractLibrariesToJar) { - addExtractedLibrariesToJar(archive, factory, libraries); - return new NewArtifactConfiguration(archive, artifactName, jarArtifactType); - } - else { - final ArtifactRootElement root = factory.createArtifactRootElement(); - List classpath = new ArrayList<>(); - root.addOrFindChild(archive); - addLibraries(libraries, root, archive, classpath); - ManifestFileUtil.updateManifest(manifestFile, mainClassName, classpath, true); - return new NewArtifactConfiguration(root, artifactName, PlainArtifactType.getInstance()); - } - } - - private void addLibraries(Set libraries, ArtifactRootElement root, CompositePackagingElement archive, - List classpath) { - PackagingElementFactory factory = PackagingElementFactory.getInstance(myContext.getProject()); - for (Library library : libraries) { - if (LibraryPackagingElement.getKindForLibrary(library).containsDirectoriesWithClasses()) { - for (VirtualFile classesRoot : library.getFiles(BinariesOrderRootType.getInstance())) { - if (classesRoot.isInLocalFileSystem()) { - archive.addOrFindChild(factory.createDirectoryCopyWithParentDirectories(classesRoot.getPath(), "/")); - } - else { - final PackagingElement child = factory.createFileCopyWithParentDirectories(VirtualFilePathUtil.getLocalFile(classesRoot).getPath(), "/"); - root.addOrFindChild(child); - classpath.addAll(ManifestFileUtil.getClasspathForElements(Collections.singletonList(child), myContext, PlainArtifactType.getInstance())); - } + Set libraries = new HashSet<>(); + if (!includeTests) { + orderEnumerator = orderEnumerator.productionOnly(); + } + ModulesProvider modulesProvider = myContext.getModulesProvider(); + OrderEnumerator enumerator = orderEnumerator.using(modulesProvider).withoutSdk().runtimeOnly().recursively(); + enumerator.forEachLibrary(new CommonProcessors.CollectProcessor<>(libraries)); + enumerator.forEachModule(module -> { + if (ProductionModuleOutputElementType.getInstance().isSuitableModule(modulesProvider, module)) { + archive.addOrFindChild(factory.createModuleOutput(module)); + } + if (includeTests && TestModuleOutputElementType.getInstance().isSuitableModule(modulesProvider, module)) { + archive.addOrFindChild(factory.createTestModuleOutput(module)); + } + return true; + }); + + JarArtifactType jarArtifactType = JarArtifactType.getInstance(); + if (manifestFile != null && !manifestFile.equals(ManifestFileUtil.findManifestFile(archive, myContext, jarArtifactType))) { + archive.addFirstChild(factory.createFileCopyWithParentDirectories(manifestFile.getPath(), ManifestFileUtil.MANIFEST_DIR_NAME)); } - } - else { - final List> children = factory.createLibraryElements(library); - classpath.addAll(ManifestFileUtil.getClasspathForElements(children, myContext, PlainArtifactType.getInstance())); - root.addOrFindChildren(children); - } + String artifactName = name + ":jar"; + if (extractLibrariesToJar) { + addExtractedLibrariesToJar(archive, factory, libraries); + return new NewArtifactConfiguration(archive, artifactName, jarArtifactType); + } + else { + ArtifactRootElement root = factory.createArtifactRootElement(); + List classpath = new ArrayList<>(); + root.addOrFindChild(archive); + addLibraries(libraries, root, archive, classpath); + ManifestFileUtil.updateManifest(manifestFile, mainClassName, classpath, true); + return new NewArtifactConfiguration(root, artifactName, PlainArtifactType.getInstance()); + } } - } - - private static void addExtractedLibrariesToJar(CompositePackagingElement archive, PackagingElementFactory factory, Set libraries) { - for (Library library : libraries) { - if (LibraryPackagingElement.getKindForLibrary(library).containsJarFiles()) { - for (VirtualFile classesRoot : library.getFiles(BinariesOrderRootType.getInstance())) { - if (classesRoot.isInLocalFileSystem()) { - archive.addOrFindChild(factory.createDirectoryCopyWithParentDirectories(classesRoot.getPath(), "/")); - } - else { - archive.addOrFindChild(factory.createExtractedDirectory(classesRoot)); - } + + private void addLibraries( + Set libraries, + ArtifactRootElement root, + CompositePackagingElement archive, + List classpath + ) { + PackagingElementFactory factory = PackagingElementFactory.getInstance(myContext.getProject()); + for (Library library : libraries) { + if (LibraryPackagingElement.getKindForLibrary(library).containsDirectoriesWithClasses()) { + for (VirtualFile classesRoot : library.getFiles(BinariesOrderRootType.getInstance())) { + if (classesRoot.isInLocalFileSystem()) { + archive.addOrFindChild(factory.createDirectoryCopyWithParentDirectories(classesRoot.getPath(), "/")); + } + else { + PackagingElement child = + factory.createFileCopyWithParentDirectories(VirtualFilePathUtil.getLocalFile(classesRoot).getPath(), "/"); + root.addOrFindChild(child); + classpath.addAll(ManifestFileUtil.getClasspathForElements( + Collections.singletonList(child), + myContext, + PlainArtifactType.getInstance() + )); + } + } + + } + else { + List> children = factory.createLibraryElements(library); + classpath.addAll(ManifestFileUtil.getClasspathForElements(children, myContext, PlainArtifactType.getInstance())); + root.addOrFindChildren(children); + } } + } - } - else { - archive.addOrFindChildren(factory.createLibraryElements(library)); - } + private static void addExtractedLibrariesToJar( + CompositePackagingElement archive, + PackagingElementFactory factory, + Set libraries + ) { + for (Library library : libraries) { + if (LibraryPackagingElement.getKindForLibrary(library).containsJarFiles()) { + for (VirtualFile classesRoot : library.getFiles(BinariesOrderRootType.getInstance())) { + if (classesRoot.isInLocalFileSystem()) { + archive.addOrFindChild(factory.createDirectoryCopyWithParentDirectories(classesRoot.getPath(), "/")); + } + else { + archive.addOrFindChild(factory.createExtractedDirectory(classesRoot)); + } + } + + } + else { + archive.addOrFindChildren(factory.createLibraryElements(library)); + } + } } - } - @Override - public String getPresentableName() { - return "From modules with dependencies..."; - } + @Override + public LocalizeValue getPresentableName() { + return LocalizeValue.localizeTODO("From modules with dependencies..."); + } } diff --git a/java-compiler-artifact-impl/src/main/java/com/intellij/java/compiler/artifact/impl/artifacts/ManifestFilesInfo.java b/java-compiler-artifact-impl/src/main/java/com/intellij/java/compiler/artifact/impl/artifacts/ManifestFilesInfo.java index bb8de7857..f5ef26fce 100644 --- a/java-compiler-artifact-impl/src/main/java/com/intellij/java/compiler/artifact/impl/artifacts/ManifestFilesInfo.java +++ b/java-compiler-artifact-impl/src/main/java/com/intellij/java/compiler/artifact/impl/artifacts/ManifestFilesInfo.java @@ -26,66 +26,70 @@ import consulo.virtualFileSystem.VirtualFile; import jakarta.annotation.Nullable; + import java.io.File; import java.util.HashMap; import java.util.Map; public class ManifestFilesInfo { - private static final Logger LOG = Logger.getInstance(ManifestFilesInfo.class); - private final Map myManifestFiles = new HashMap(); - private final Map myOriginalManifestFiles = new HashMap(); + private static final Logger LOG = Logger.getInstance(ManifestFilesInfo.class); + private final Map myManifestFiles = new HashMap<>(); + private final Map myOriginalManifestFiles = new HashMap<>(); - @Nullable - public ManifestFileConfiguration getManifestFile(CompositePackagingElement element, ArtifactType artifactType, - final PackagingElementResolvingContext context) { - final VirtualFile manifestFile = ManifestFileUtil.findManifestFile(element, context, artifactType); - if (manifestFile == null) { - return null; - } + @Nullable + public ManifestFileConfiguration getManifestFile( + CompositePackagingElement element, + ArtifactType artifactType, + PackagingElementResolvingContext context + ) { + VirtualFile manifestFile = ManifestFileUtil.findManifestFile(element, context, artifactType); + if (manifestFile == null) { + return null; + } - ManifestFileConfiguration configuration = myManifestFiles.get(manifestFile); - if (configuration == null) { - configuration = ManifestFileUtil.createManifestFileConfiguration(manifestFile); - myOriginalManifestFiles.put(manifestFile, new ManifestFileConfiguration(configuration)); - myManifestFiles.put(manifestFile, configuration); + ManifestFileConfiguration configuration = myManifestFiles.get(manifestFile); + if (configuration == null) { + configuration = ManifestFileUtil.createManifestFileConfiguration(manifestFile); + myOriginalManifestFiles.put(manifestFile, new ManifestFileConfiguration(configuration)); + myManifestFiles.put(manifestFile, configuration); + } + return configuration; } - return configuration; - } - public void saveManifestFiles() { - for (Map.Entry entry : myManifestFiles.entrySet()) { - final ManifestFileConfiguration configuration = entry.getValue(); - final String path = configuration.getManifestFilePath(); - if (path == null) { - continue; - } + public void saveManifestFiles() { + for (Map.Entry entry : myManifestFiles.entrySet()) { + ManifestFileConfiguration configuration = entry.getValue(); + String path = configuration.getManifestFilePath(); + if (path == null) { + continue; + } - final ManifestFileConfiguration original = myOriginalManifestFiles.get(entry.getKey()); - if (original != null && original.equals(configuration)) { - continue; - } + ManifestFileConfiguration original = myOriginalManifestFiles.get(entry.getKey()); + if (original != null && original.equals(configuration)) { + continue; + } - VirtualFile file = LocalFileSystem.getInstance().findFileByPath(path); - if (file == null) { - final File ioFile = new File(FileUtil.toSystemDependentName(path)); - FileUtil.createIfDoesntExist(ioFile); - file = LocalFileSystem.getInstance().refreshAndFindFileByIoFile(ioFile); - if (file == null) { - //todo[nik] improve - LOG.error("cannot create file: " + ioFile); - } - } + VirtualFile file = LocalFileSystem.getInstance().findFileByPath(path); + if (file == null) { + File ioFile = new File(FileUtil.toSystemDependentName(path)); + FileUtil.createIfDoesntExist(ioFile); + file = LocalFileSystem.getInstance().refreshAndFindFileByIoFile(ioFile); + if (file == null) { + //todo[nik] improve + LOG.error("cannot create file: " + ioFile); + } + } - ManifestFileUtil.updateManifest(file, configuration.getMainClass(), configuration.getClasspath(), true); + ManifestFileUtil.updateManifest(file, configuration.getMainClass(), configuration.getClasspath(), true); + } } - } - public boolean isManifestFilesModified() { - return !myOriginalManifestFiles.equals(myManifestFiles); - } + public boolean isManifestFilesModified() { + return !myOriginalManifestFiles.equals(myManifestFiles); + } - public void clear() { - myManifestFiles.clear(); - myOriginalManifestFiles.clear(); - } + public void clear() { + myManifestFiles.clear(); + myOriginalManifestFiles.clear(); + } } diff --git a/java-compiler-artifact-impl/src/main/java/com/intellij/java/compiler/artifact/impl/elements/CompositeElementWithManifest.java b/java-compiler-artifact-impl/src/main/java/com/intellij/java/compiler/artifact/impl/elements/CompositeElementWithManifest.java index e78e661e6..5bde5541d 100644 --- a/java-compiler-artifact-impl/src/main/java/com/intellij/java/compiler/artifact/impl/elements/CompositeElementWithManifest.java +++ b/java-compiler-artifact-impl/src/main/java/com/intellij/java/compiler/artifact/impl/elements/CompositeElementWithManifest.java @@ -23,7 +23,7 @@ */ @Deprecated public abstract class CompositeElementWithManifest extends CompositePackagingElement { - protected CompositeElementWithManifest(PackagingElementType type) { - super(type); - } + protected CompositeElementWithManifest(PackagingElementType type) { + super(type); + } } diff --git a/java-compiler-artifact-impl/src/main/java/com/intellij/java/compiler/artifact/impl/elements/JarArchiveElementType.java b/java-compiler-artifact-impl/src/main/java/com/intellij/java/compiler/artifact/impl/elements/JarArchiveElementType.java index b4b5ab76b..300fe6f7b 100644 --- a/java-compiler-artifact-impl/src/main/java/com/intellij/java/compiler/artifact/impl/elements/JarArchiveElementType.java +++ b/java-compiler-artifact-impl/src/main/java/com/intellij/java/compiler/artifact/impl/elements/JarArchiveElementType.java @@ -16,7 +16,6 @@ package com.intellij.java.compiler.artifact.impl.elements; import consulo.annotation.component.ExtensionImpl; -import consulo.application.AllIcons; import consulo.compiler.artifact.Artifact; import consulo.compiler.artifact.ArtifactUtil; import consulo.compiler.artifact.element.*; @@ -24,7 +23,9 @@ import consulo.compiler.localize.CompilerLocalize; import consulo.java.language.module.extension.JavaModuleExtension; import consulo.language.util.ModuleUtilCore; +import consulo.platform.base.icon.PlatformIconGroup; import consulo.project.Project; +import consulo.ui.annotation.RequiredUIAccess; import consulo.ui.ex.awt.Messages; import consulo.ui.image.Image; import consulo.util.io.FileUtil; @@ -37,62 +38,64 @@ */ @ExtensionImpl(order = "after zip-archive-element") public class JarArchiveElementType extends CompositePackagingElementType { - @Nonnull - public static JarArchiveElementType getInstance() { - return getInstance(JarArchiveElementType.class); - } + @Nonnull + public static JarArchiveElementType getInstance() { + return getInstance(JarArchiveElementType.class); + } - public JarArchiveElementType() { - super("jar-archive", CompilerLocalize.elementTypeNameJarArchive().get()); - } + public JarArchiveElementType() { + super("jar-archive", CompilerLocalize.elementTypeNameJarArchive().get()); + } - @Override - public boolean isAvailableForAdd(@Nonnull ArtifactEditorContext context, @Nonnull Artifact artifact) { - return ModuleUtilCore.hasModuleExtension(context.getModulesProvider(), JavaModuleExtension.class); - } + @Override + public boolean isAvailableForAdd(@Nonnull ArtifactEditorContext context, @Nonnull Artifact artifact) { + return ModuleUtilCore.hasModuleExtension(context.getModulesProvider(), JavaModuleExtension.class); + } - @Nonnull - @Override - public Image getIcon() { - return AllIcons.Nodes.PpJar; - } + @Nonnull + @Override + public Image getIcon() { + return PlatformIconGroup.filetypesArchive(); + } - @Nonnull - @Override - public JarArchivePackagingElement createEmpty(@Nonnull Project project) { - return new JarArchivePackagingElement(); - } + @Nonnull + @Override + public JarArchivePackagingElement createEmpty(@Nonnull Project project) { + return new JarArchivePackagingElement(); + } - /*@Override - public PackagingElementPropertiesPanel createElementPropertiesPanel(@NotNull JarArchivePackagingElement element, - @NotNull ArtifactEditorContext context) - { - return new JarArchiveElementPropertiesPanel(element, context); - } */ + /*@Override + public PackagingElementPropertiesPanel createElementPropertiesPanel( + @Nonnull JarArchivePackagingElement element, + @Nonnull ArtifactEditorContext context + ) { + return new JarArchiveElementPropertiesPanel(element, context); + }*/ - @Override - public CompositePackagingElement createComposite( - CompositePackagingElement parent, - @Nullable String baseName, - @Nonnull ArtifactEditorContext context - ) { - final String initialValue = ArtifactUtil.suggestFileName(parent, baseName != null ? baseName : "archive", ".jar"); - String path = Messages.showInputDialog( - context.getProject(), - "Enter archive name: ", - "New Archive", - null, - initialValue, - new FilePathValidator() - ); - if (path == null) { - return null; + @Override + @RequiredUIAccess + public CompositePackagingElement createComposite( + CompositePackagingElement parent, + @Nullable String baseName, + @Nonnull ArtifactEditorContext context + ) { + String initialValue = ArtifactUtil.suggestFileName(parent, baseName != null ? baseName : "archive", ".jar"); + String path = Messages.showInputDialog( + context.getProject(), + "Enter archive name: ", + "New Archive", + null, + initialValue, + new FilePathValidator() + ); + if (path == null) { + return null; + } + path = FileUtil.toSystemIndependentName(path); + String parentPath = PathUtil.getParentPath(path); + String fileName = PathUtil.getFileName(path); + PackagingElement element = new JarArchivePackagingElement(fileName); + return (CompositePackagingElement)PackagingElementFactory.getInstance(context.getProject()) + .createParentDirectories(parentPath, element); } - path = FileUtil.toSystemIndependentName(path); - final String parentPath = PathUtil.getParentPath(path); - final String fileName = PathUtil.getFileName(path); - final PackagingElement element = new JarArchivePackagingElement(fileName); - return (CompositePackagingElement) PackagingElementFactory.getInstance(context.getProject()) - .createParentDirectories(parentPath, element); - } } diff --git a/java-compiler-artifact-impl/src/main/java/com/intellij/java/compiler/artifact/impl/elements/JarArchivePackagingElement.java b/java-compiler-artifact-impl/src/main/java/com/intellij/java/compiler/artifact/impl/elements/JarArchivePackagingElement.java index 7753ba9ef..52521a05e 100644 --- a/java-compiler-artifact-impl/src/main/java/com/intellij/java/compiler/artifact/impl/elements/JarArchivePackagingElement.java +++ b/java-compiler-artifact-impl/src/main/java/com/intellij/java/compiler/artifact/impl/elements/JarArchivePackagingElement.java @@ -23,20 +23,20 @@ /** * @author VISTALL - * @since 16:05/18.06.13 + * @since 2013-06-18 */ public class JarArchivePackagingElement extends ArchivePackagingElement { - public JarArchivePackagingElement() { - super(JarArchiveElementType.getInstance()); - } + public JarArchivePackagingElement() { + super(JarArchiveElementType.getInstance()); + } - public JarArchivePackagingElement(@Nonnull String archiveFileName) { - super(JarArchiveElementType.getInstance(), archiveFileName); - } + public JarArchivePackagingElement(@Nonnull String archiveFileName) { + super(JarArchiveElementType.getInstance(), archiveFileName); + } - @Override - public ArchivePackageWriter getPackageWriter() { - // use zip - later write own with manifest correction - return ZipArchivePackagingElement.ZipArchivePackageWriter.INSTANCE; - } + @Override + public ArchivePackageWriter getPackageWriter() { + // use zip - later write own with manifest correction + return ZipArchivePackagingElement.ZipArchivePackageWriter.INSTANCE; + } } diff --git a/java-compiler-artifact-impl/src/main/java/com/intellij/java/compiler/artifact/impl/ui/ManifestFileConfiguration.java b/java-compiler-artifact-impl/src/main/java/com/intellij/java/compiler/artifact/impl/ui/ManifestFileConfiguration.java index 53bd98b86..f69b0c54a 100644 --- a/java-compiler-artifact-impl/src/main/java/com/intellij/java/compiler/artifact/impl/ui/ManifestFileConfiguration.java +++ b/java-compiler-artifact-impl/src/main/java/com/intellij/java/compiler/artifact/impl/ui/ManifestFileConfiguration.java @@ -20,95 +20,85 @@ import java.util.ArrayList; import java.util.List; +import java.util.Objects; /** * @author nik */ public class ManifestFileConfiguration { - private final boolean myWritable; - private List myClasspath = new ArrayList(); - private String myMainClass; - private String myManifestFilePath; - - public ManifestFileConfiguration(@Nonnull ManifestFileConfiguration configuration) { - myWritable = configuration.isWritable(); - myClasspath.addAll(configuration.getClasspath()); - myMainClass = configuration.getMainClass(); - myManifestFilePath = configuration.getManifestFilePath(); - } - - public ManifestFileConfiguration(@Nonnull String manifestFilePath, @Nullable List classpath, @Nullable String mainClass, - boolean isWritable) { - myWritable = isWritable; - if (classpath != null) { - myClasspath.addAll(classpath); + private final boolean myWritable; + private List myClasspath = new ArrayList<>(); + private String myMainClass; + private String myManifestFilePath; + + public ManifestFileConfiguration(@Nonnull ManifestFileConfiguration configuration) { + myWritable = configuration.isWritable(); + myClasspath.addAll(configuration.getClasspath()); + myMainClass = configuration.getMainClass(); + myManifestFilePath = configuration.getManifestFilePath(); } - myMainClass = mainClass; - myManifestFilePath = manifestFilePath; - } - - public List getClasspath() { - return myClasspath; - } - - public boolean isWritable() { - return myWritable; - } - public void setClasspath(List classpath) { - myClasspath = classpath; - } - - public String getMainClass() { - return myMainClass; - } - - public void setMainClass(String mainClass) { - myMainClass = mainClass; - } - - public String getManifestFilePath() { - return myManifestFilePath; - } + public ManifestFileConfiguration( + @Nonnull String manifestFilePath, + @Nullable List classpath, + @Nullable String mainClass, + boolean isWritable + ) { + myWritable = isWritable; + if (classpath != null) { + myClasspath.addAll(classpath); + } + myMainClass = mainClass; + myManifestFilePath = manifestFilePath; + } - public void setManifestFilePath(String manifestFilePath) { - myManifestFilePath = manifestFilePath; - } + public List getClasspath() { + return myClasspath; + } - @Override - public boolean equals(Object o) { - if (this == o) { - return true; + public boolean isWritable() { + return myWritable; } - if (!(o instanceof ManifestFileConfiguration)) { - return false; + + public void setClasspath(List classpath) { + myClasspath = classpath; } - ManifestFileConfiguration that = (ManifestFileConfiguration) o; + public String getMainClass() { + return myMainClass; + } - if (!myClasspath.equals(that.myClasspath)) { - return false; + public void setMainClass(String mainClass) { + myMainClass = mainClass; } - if (myMainClass != null ? !myMainClass.equals(that.myMainClass) : that.myMainClass != null) { - return false; + + public String getManifestFilePath() { + return myManifestFilePath; } - if (myManifestFilePath != null ? !myManifestFilePath.equals(that.myManifestFilePath) : that.myManifestFilePath != null) { - return false; + + public void setManifestFilePath(String manifestFilePath) { + myManifestFilePath = manifestFilePath; } - return true; - } + @Override + public boolean equals(Object o) { + return this == o + || o instanceof ManifestFileConfiguration that + && myClasspath.equals(that.myClasspath) + && Objects.equals(myMainClass, that.myMainClass) + && Objects.equals(myManifestFilePath, that.myManifestFilePath); + } - @Override - public int hashCode() { - throw new UnsupportedOperationException(); - } + @Override + public int hashCode() { + throw new UnsupportedOperationException(); + } - public void addToClasspath(List classpath) { - for (String path : classpath) { - if (!myClasspath.contains(path)) { - myClasspath.add(path); - } + public void addToClasspath(List classpath) { + for (String path : classpath) { + if (!myClasspath.contains(path)) { + myClasspath.add(path); + } + } } - } } diff --git a/java-compiler-artifact-impl/src/main/java/com/intellij/java/compiler/artifact/impl/ui/properties/ElementWithManifestPropertiesPanel.java b/java-compiler-artifact-impl/src/main/java/com/intellij/java/compiler/artifact/impl/ui/properties/ElementWithManifestPropertiesPanel.java index f8daec0cf..4cbfa16e8 100644 --- a/java-compiler-artifact-impl/src/main/java/com/intellij/java/compiler/artifact/impl/ui/properties/ElementWithManifestPropertiesPanel.java +++ b/java-compiler-artifact-impl/src/main/java/com/intellij/java/compiler/artifact/impl/ui/properties/ElementWithManifestPropertiesPanel.java @@ -22,164 +22,151 @@ import consulo.compiler.artifact.ui.PackagingElementPropertiesPanel; import consulo.fileChooser.FileChooserDescriptor; import consulo.fileChooser.IdeaFileChooser; +import consulo.localize.LocalizeValue; +import consulo.ui.annotation.RequiredUIAccess; import consulo.ui.ex.awt.Messages; import consulo.ui.ex.awt.TextFieldWithBrowseButton; import consulo.ui.ex.awt.event.DocumentAdapter; import consulo.util.io.FileUtil; -import consulo.util.lang.Comparing; import consulo.util.lang.StringUtil; import consulo.virtualFileSystem.VirtualFile; - import jakarta.annotation.Nonnull; import jakarta.annotation.Nullable; + import javax.swing.*; import javax.swing.event.DocumentEvent; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; import java.util.List; +import java.util.Objects; /** * @author nik */ public abstract class ElementWithManifestPropertiesPanel> extends PackagingElementPropertiesPanel { - private final E myElement; - private final ArtifactEditorContext myContext; - private JPanel myMainPanel; - private TextFieldWithBrowseButton myMainClassField; - private TextFieldWithBrowseButton myClasspathField; - private JLabel myTitleLabel; - private JButton myCreateManifestButton; - private JButton myUseExistingManifestButton; - private JPanel myPropertiesPanel; - private JTextField myManifestPathField; - private JLabel myManifestNotFoundLabel; - private ManifestFileConfiguration myManifestFileConfiguration; - - public ElementWithManifestPropertiesPanel(E element, final ArtifactEditorContext context) { - myElement = element; - myContext = context; - - ManifestFileUtil.setupMainClassField(context.getProject(), myMainClassField); - - myClasspathField.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - Messages.showTextAreaDialog(myClasspathField.getTextField(), "Edit Classpath", "classpath-attribute-editor"); - } - }); - myClasspathField.getTextField().getDocument().addDocumentListener(new DocumentAdapter() { - @Override - protected void textChanged(DocumentEvent e) { - myContext.queueValidation(); - } - }); - myUseExistingManifestButton.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - chooseManifest(); - } - }); - myCreateManifestButton.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - createManifest(); - } - }); - } - - private void createManifest() { - final VirtualFile file = ManifestFileUtil.showDialogAndCreateManifest(myContext, myElement); - if (file == null) { - return; + private final E myElement; + private final ArtifactEditorContext myContext; + private JPanel myMainPanel; + private TextFieldWithBrowseButton myMainClassField; + private TextFieldWithBrowseButton myClasspathField; + private JLabel myTitleLabel; + private JButton myCreateManifestButton; + private JButton myUseExistingManifestButton; + private JPanel myPropertiesPanel; + private JTextField myManifestPathField; + private JLabel myManifestNotFoundLabel; + private ManifestFileConfiguration myManifestFileConfiguration; + + public ElementWithManifestPropertiesPanel(E element, ArtifactEditorContext context) { + myElement = element; + myContext = context; + + ManifestFileUtil.setupMainClassField(context.getProject(), myMainClassField); + + myClasspathField.addActionListener(e -> Messages.showTextAreaDialog(myClasspathField.getTextField(), "Edit Classpath", "classpath-attribute-editor")); + myClasspathField.getTextField().getDocument().addDocumentListener(new DocumentAdapter() { + @Override + protected void textChanged(DocumentEvent e) { + myContext.queueValidation(); + } + }); + myUseExistingManifestButton.addActionListener(e -> chooseManifest()); + myCreateManifestButton.addActionListener(e -> createManifest()); } - ManifestFileUtil.addManifestFileToLayout(file.getPath(), myContext, myElement); - updateManifest(); - myContext.getThisArtifactEditor().updateLayoutTree(); - } - - private void chooseManifest() { - final FileChooserDescriptor descriptor = new FileChooserDescriptor(true, false, false, false, false, false) { - @Override - public boolean isFileVisible(VirtualFile file, boolean showHiddenFiles) { - return super.isFileVisible(file, showHiddenFiles) && (file.isDirectory() || file.getName().equalsIgnoreCase(ManifestFileUtil - .MANIFEST_FILE_NAME)); - } - }; - descriptor.setTitle("Specify Path to MANIFEST.MF file"); - final VirtualFile file = IdeaFileChooser.chooseFile(descriptor, myContext.getProject(), null); - if (file == null) { - return; + @RequiredUIAccess + private void createManifest() { + final VirtualFile file = ManifestFileUtil.showDialogAndCreateManifest(myContext, myElement); + if (file == null) { + return; + } + + ManifestFileUtil.addManifestFileToLayout(file.getPath(), myContext, myElement); + updateManifest(); + myContext.getThisArtifactEditor().updateLayoutTree(); } - ManifestFileUtil.addManifestFileToLayout(file.getPath(), myContext, myElement); - updateManifest(); - myContext.getThisArtifactEditor().updateLayoutTree(); - } + private void chooseManifest() { + final FileChooserDescriptor descriptor = new FileChooserDescriptor(true, false, false, false, false, false) { + @Override + public boolean isFileVisible(VirtualFile file, boolean showHiddenFiles) { + return super.isFileVisible(file, showHiddenFiles) && (file.isDirectory() || file.getName().equalsIgnoreCase(ManifestFileUtil + .MANIFEST_FILE_NAME)); + } + }; + descriptor.withTitleValue(LocalizeValue.localizeTODO("Specify Path to MANIFEST.MF file")); + final VirtualFile file = IdeaFileChooser.chooseFile(descriptor, myContext.getProject(), null); + if (file == null) { + return; + } + + ManifestFileUtil.addManifestFileToLayout(file.getPath(), myContext, myElement); + updateManifest(); + myContext.getThisArtifactEditor().updateLayoutTree(); + } - private void updateManifest() { + private void updateManifest() { /*myManifestFileConfiguration = myContext.getManifestFile(myElement, myContext.getArtifactType()); - final String card; - if(myManifestFileConfiguration != null) - { - card = "properties"; - myManifestPathField.setText(FileUtil.toSystemDependentName(myManifestFileConfiguration.getManifestFilePath())); - myMainClassField.setText(StringUtil.notNullize(myManifestFileConfiguration.getMainClass())); - myMainClassField.setEnabled(myManifestFileConfiguration.isWritable()); - myClasspathField.setText(StringUtil.join(myManifestFileConfiguration.getClasspath(), " ")); - myClasspathField.setEnabled(myManifestFileConfiguration.isWritable()); - } - else - { - card = "buttons"; - myManifestPathField.setText(""); - } - ((CardLayout) myPropertiesPanel.getLayout()).show(myPropertiesPanel, card); */ - } - - @Override - public void reset() { - myTitleLabel.setText("'" + myElement.getName() + "' manifest properties:"); - myManifestNotFoundLabel.setText("META-INF/MANIFEST.MF file not found in '" + myElement.getName() + "'"); - updateManifest(); - } - - @Override - public boolean isModified() { - return myManifestFileConfiguration != null && (!myManifestFileConfiguration.getClasspath().equals(getConfiguredClasspath()) || !Comparing - .equal(myManifestFileConfiguration.getMainClass(), getConfiguredMainClass()) || !Comparing.equal(myManifestFileConfiguration - .getManifestFilePath(), getConfiguredManifestPath())); - } - - @Nullable - private String getConfiguredManifestPath() { - final String path = myManifestPathField.getText(); - return path.length() != 0 ? FileUtil.toSystemIndependentName(path) : null; - } - - @Override - public void apply() { - if (myManifestFileConfiguration != null) { - myManifestFileConfiguration.setMainClass(getConfiguredMainClass()); - myManifestFileConfiguration.setClasspath(getConfiguredClasspath()); - myManifestFileConfiguration.setManifestFilePath(getConfiguredManifestPath()); + final String card; + if (myManifestFileConfiguration != null) + { + card = "properties"; + myManifestPathField.setText(FileUtil.toSystemDependentName(myManifestFileConfiguration.getManifestFilePath())); + myMainClassField.setText(StringUtil.notNullize(myManifestFileConfiguration.getMainClass())); + myMainClassField.setEnabled(myManifestFileConfiguration.isWritable()); + myClasspathField.setText(StringUtil.join(myManifestFileConfiguration.getClasspath(), " ")); + myClasspathField.setEnabled(myManifestFileConfiguration.isWritable()); + } + else + { + card = "buttons"; + myManifestPathField.setText(""); + } + ((CardLayout) myPropertiesPanel.getLayout()).show(myPropertiesPanel, card); */ + } + + @Override + @RequiredUIAccess + public void reset() { + myTitleLabel.setText("'" + myElement.getName() + "' manifest properties:"); + myManifestNotFoundLabel.setText("META-INF/MANIFEST.MF file not found in '" + myElement.getName() + "'"); + updateManifest(); + } + + @Override + @RequiredUIAccess + public boolean isModified() { + return myManifestFileConfiguration != null && (!myManifestFileConfiguration.getClasspath().equals(getConfiguredClasspath()) + || !Objects.equals(myManifestFileConfiguration.getMainClass(), getConfiguredMainClass()) + || !Objects.equals(myManifestFileConfiguration.getManifestFilePath(), getConfiguredManifestPath())); } - } - private List getConfiguredClasspath() { - return StringUtil.split(myClasspathField.getText(), " "); - } + @Nullable + private String getConfiguredManifestPath() { + final String path = myManifestPathField.getText(); + return path.length() != 0 ? FileUtil.toSystemIndependentName(path) : null; + } - @Override - @Nonnull - public JComponent createComponent() { - return myMainPanel; - } + @Override + public void apply() { + if (myManifestFileConfiguration != null) { + myManifestFileConfiguration.setMainClass(getConfiguredMainClass()); + myManifestFileConfiguration.setClasspath(getConfiguredClasspath()); + myManifestFileConfiguration.setManifestFilePath(getConfiguredManifestPath()); + } + } - @Nullable - private String getConfiguredMainClass() { - final String className = myMainClassField.getText(); - return className.length() != 0 ? className : null; - } + private List getConfiguredClasspath() { + return StringUtil.split(myClasspathField.getText(), " "); + } + @Override + @Nonnull + public JComponent createComponent() { + return myMainPanel; + } + + @Nullable + private String getConfiguredMainClass() { + final String className = myMainClassField.getText(); + return className.length() != 0 ? className : null; + } } diff --git a/java-compiler-artifact-impl/src/main/java/module-info.java b/java-compiler-artifact-impl/src/main/java/module-info.java index 40a1c4a42..ccf9bf3ca 100644 --- a/java-compiler-artifact-impl/src/main/java/module-info.java +++ b/java-compiler-artifact-impl/src/main/java/module-info.java @@ -1,6 +1,6 @@ /** * @author VISTALL - * @since 06/12/2022 + * @since 2022-12-06 */ module consulo.java.compiler.artifact.impl { requires consulo.ide.api; diff --git a/java-language-api/src/main/java/com/intellij/java/language/projectRoots/roots/AnnotationOrderRootType.java b/java-language-api/src/main/java/com/intellij/java/language/projectRoots/roots/AnnotationOrderRootType.java index e936c8347..f62fbd1ec 100644 --- a/java-language-api/src/main/java/com/intellij/java/language/projectRoots/roots/AnnotationOrderRootType.java +++ b/java-language-api/src/main/java/com/intellij/java/language/projectRoots/roots/AnnotationOrderRootType.java @@ -46,8 +46,8 @@ public AnnotationOrderRootType() { @Nonnull public static VirtualFile[] getFiles(@Nonnull OrderEntry entry) { - List result = new ArrayList(); - RootPolicy> policy = new RootPolicy>() { + List result = new ArrayList<>(); + RootPolicy> policy = new RootPolicy<>() { @Override public List visitOrderEntry(OrderEntry orderEntry, List value) { if (orderEntry instanceof OrderEntryWithTracking) { @@ -62,8 +62,8 @@ public List visitOrderEntry(OrderEntry orderEntry, List result = new ArrayList(); - RootPolicy> policy = new RootPolicy>() { + List result = new ArrayList<>(); + RootPolicy> policy = new RootPolicy<>() { @Override public List visitOrderEntry(OrderEntry orderEntry, List value) { if (orderEntry instanceof OrderEntryWithTracking) {