From 9e633eb1796a34b7af9f43015caa9ce5568e9226 Mon Sep 17 00:00:00 2001 From: UNV Date: Mon, 21 Apr 2025 05:33:40 +0300 Subject: [PATCH 1/2] Reformatting java-compiler-artifact-impl. --- .../artifact/impl/ManifestBuilder.java | 32 +- .../artifact/impl/ManifestFileUtil.java | 477 +++++++++--------- .../JarArtifactFromModulesDialog.java | 245 ++++----- .../impl/artifacts/JarArtifactType.java | 59 +-- .../artifacts/JarFromModulesTemplate.java | 287 ++++++----- .../impl/artifacts/ManifestFilesInfo.java | 99 ++-- .../CompositeElementWithManifest.java | 6 +- .../impl/elements/JarArchiveElementType.java | 90 ++-- .../elements/JarArchivePackagingElement.java | 22 +- .../impl/ui/ManifestFileConfiguration.java | 152 +++--- .../ElementWithManifestPropertiesPanel.java | 258 +++++----- 11 files changed, 889 insertions(+), 838 deletions(-) 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..833028bfa 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 @@ -21,25 +21,25 @@ 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); + @NonNls + 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..fa7c27b74 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 @@ -66,266 +66,291 @@ * @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 + ) { + final VirtualFile metaInfDir = ArtifactUtil.findSourceFileByOutputPath(root, MANIFEST_DIR_NAME, context, artifactType); + if (metaInfDir != null) { + return metaInfDir; + } + + 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; + } + } + return true; + } } - } - return true; + ); + + if (!sourceDir.isNull()) { + return sourceDir.get(); } - } - ); - if (!sourceDir.isNull()) { - return sourceDir.get(); + + 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); + } - 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, final @Nullable VirtualFile file) { + final 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, + 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); + } - 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<>(); + final 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) { + 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, " ")); + } + 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, + 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); } - for (String path : classpath) { - if (!updatedClasspath.contains(path)) { - updatedClasspath.add(path); - } + 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; } - } - 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 + 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); + } + 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.setTitle("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( + 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); + } + }); } - 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); + + @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(); } - 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(final Project project, final TextFieldWithBrowseButton field) { + field.addActionListener(e -> { + final 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(final PsiClass aClass) { + return Application.get() + .runReadAction((Computable)() -> 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..5117795e7 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 @@ -42,133 +42,134 @@ * @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("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) { + 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(AllIcons.Nodes.Module); + append(module.getName()); + } + else { + append(""); + setIcon(AllIcons.Nodes.ModuleGroup); + } + } } - } } 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..28df925e7 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 @@ -31,6 +31,7 @@ import consulo.ui.image.Image; import jakarta.annotation.Nonnull; + import java.util.Collections; import java.util.List; @@ -39,39 +40,39 @@ */ @ExtensionImpl(order = "after zip-artifact") public class JarArtifactType extends ArtifactType { - public JarArtifactType() { - super("jar", "Jar"); - } + public JarArtifactType() { + super("jar", "Jar"); + } - public static JarArtifactType getInstance() { - return EP_NAME.findExtension(JarArtifactType.class); - } + public static JarArtifactType getInstance() { + return EP_NAME.findExtension(JarArtifactType.class); + } - @Nonnull - @Override - public Image getIcon() { - return AllIcons.Nodes.Artifact; - } + @Nonnull + @Override + public Image getIcon() { + return AllIcons.Nodes.Artifact; + } - @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..02d25bb9d 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 @@ -45,158 +45,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( + 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() + ); + 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)); + final PackagingElementFactory factory = PackagingElementFactory.getInstance(myContext.getProject()); + final 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())); - } + 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)); } - } - else { - final List> children = factory.createLibraryElements(library); - classpath.addAll(ManifestFileUtil.getClasspathForElements(children, myContext, PlainArtifactType.getInstance())); - root.addOrFindChildren(children); - } + 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 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 { + final PackagingElement child = + factory.createFileCopyWithParentDirectories(VirtualFilePathUtil.getLocalFile(classesRoot).getPath(), "/"); + root.addOrFindChild(child); + classpath.addAll(ManifestFileUtil.getClasspathForElements( + Collections.singletonList(child), + myContext, + PlainArtifactType.getInstance() + )); + } + } + + } + else { + final 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 String getPresentableName() { + return "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..8abc48bb8 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,71 @@ 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, + final PackagingElementResolvingContext context + ) { + final 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()) { + final ManifestFileConfiguration configuration = entry.getValue(); + final String path = configuration.getManifestFilePath(); + if (path == null) { + continue; + } - final ManifestFileConfiguration original = myOriginalManifestFiles.get(entry.getKey()); - if (original != null && original.equals(configuration)) { - continue; - } + final 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) { + 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); + } + } - 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..93a2355ca 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 @@ -37,31 +37,31 @@ */ @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 AllIcons.Nodes.PpJar; + } - @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, @@ -70,29 +70,29 @@ public PackagingElementPropertiesPanel createElementPropertiesPanel(@NotNull Jar 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 + 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; + } + 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); } - 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..f5fe48c53 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 @@ -26,17 +26,17 @@ * @since 16:05/18.06.13 */ 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..9aa1c9807 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 @@ -25,90 +25,94 @@ * @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 void setManifestFilePath(String manifestFilePath) { - myManifestFilePath = manifestFilePath; - } - - @Override - public boolean equals(Object o) { - if (this == o) { - return true; + + 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; } - if (!(o instanceof ManifestFileConfiguration)) { - return false; + + public List getClasspath() { + return myClasspath; } - ManifestFileConfiguration that = (ManifestFileConfiguration) o; + public boolean isWritable() { + return myWritable; + } - if (!myClasspath.equals(that.myClasspath)) { - return false; + public void setClasspath(List classpath) { + myClasspath = classpath; } - if (myMainClass != null ? !myMainClass.equals(that.myMainClass) : that.myMainClass != null) { - return false; + + public String getMainClass() { + return myMainClass; } - if (myManifestFilePath != null ? !myManifestFilePath.equals(that.myManifestFilePath) : that.myManifestFilePath != null) { - return false; + + public void setMainClass(String mainClass) { + myMainClass = mainClass; } - return true; - } + public String getManifestFilePath() { + return myManifestFilePath; + } - @Override - public int hashCode() { - throw new UnsupportedOperationException(); - } + public void setManifestFilePath(String manifestFilePath) { + myManifestFilePath = manifestFilePath; + } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (!(o instanceof ManifestFileConfiguration)) { + return false; + } + + ManifestFileConfiguration that = (ManifestFileConfiguration)o; + + if (!myClasspath.equals(that.myClasspath)) { + return false; + } + if (myMainClass != null ? !myMainClass.equals(that.myMainClass) : that.myMainClass != null) { + return false; + } + if (myManifestFilePath != null ? !myManifestFilePath.equals(that.myManifestFilePath) : that.myManifestFilePath != null) { + return false; + } + + return true; + } + + @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..1e16dfcc9 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 @@ -32,6 +32,7 @@ import jakarta.annotation.Nonnull; import jakarta.annotation.Nullable; + import javax.swing.*; import javax.swing.event.DocumentEvent; import java.awt.event.ActionEvent; @@ -42,144 +43,143 @@ * @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, 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(); + } + }); } - 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; + 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.setTitle("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); */ } - } - private List getConfiguredClasspath() { - return StringUtil.split(myClasspathField.getText(), " "); - } + @Override + public void reset() { + myTitleLabel.setText("'" + myElement.getName() + "' manifest properties:"); + myManifestNotFoundLabel.setText("META-INF/MANIFEST.MF file not found in '" + myElement.getName() + "'"); + updateManifest(); + } - @Override - @Nonnull - public JComponent createComponent() { - return myMainPanel; - } + @Override + public boolean isModified() { + return myManifestFileConfiguration != null && (!myManifestFileConfiguration.getClasspath().equals(getConfiguredClasspath()) + || !Comparing.equal(myManifestFileConfiguration.getMainClass(), getConfiguredMainClass()) + || !Comparing.equal(myManifestFileConfiguration.getManifestFilePath(), getConfiguredManifestPath())); + } - @Nullable - private String getConfiguredMainClass() { - final String className = myMainClassField.getText(); - return className.length() != 0 ? className : null; - } + @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()); + } + } + + 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; + } } From ebfbb39bfd50556d0b5a47199184f332324089f9 Mon Sep 17 00:00:00 2001 From: UNV Date: Mon, 21 Apr 2025 06:02:32 +0300 Subject: [PATCH 2/2] Fixing compilation of ArtifactTypes. Some refactoring. --- .../artifact/impl/ManifestBuilder.java | 2 - .../artifact/impl/ManifestFileUtil.java | 109 ++++++++++-------- .../JarArtifactFromModulesDialog.java | 21 ++-- .../impl/artifacts/JarArtifactType.java | 10 +- .../artifacts/JarFromModulesTemplate.java | 39 ++++--- .../impl/artifacts/ManifestFilesInfo.java | 17 ++- .../impl/elements/JarArchiveElementType.java | 27 +++-- .../elements/JarArchivePackagingElement.java | 2 +- .../impl/ui/ManifestFileConfiguration.java | 28 ++--- .../ElementWithManifestPropertiesPanel.java | 41 +++---- .../src/main/java/module-info.java | 2 +- .../roots/AnnotationOrderRootType.java | 8 +- 12 files changed, 143 insertions(+), 163 deletions(-) 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 833028bfa..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,12 +16,10 @@ 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); 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 fa7c27b74..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; @@ -90,13 +93,13 @@ public static VirtualFile suggestManifestFileDirectory( PackagingElementResolvingContext context, ArtifactType artifactType ) { - final VirtualFile metaInfDir = ArtifactUtil.findSourceFileByOutputPath(root, MANIFEST_DIR_NAME, context, artifactType); + VirtualFile metaInfDir = ArtifactUtil.findSourceFileByOutputPath(root, MANIFEST_DIR_NAME, context, artifactType); if (metaInfDir != null) { return metaInfDir; } - final Ref sourceDir = Ref.create(null); - final Ref sourceFile = Ref.create(null); + final SimpleReference sourceDir = SimpleReference.create(null); + final SimpleReference sourceFile = SimpleReference.create(null); ArtifactUtil.processElementsWithSubstitutions( root.getChildren(), context, @@ -106,13 +109,13 @@ public static VirtualFile suggestManifestFileDirectory( @Override public boolean process(@Nonnull PackagingElement element, @Nonnull PackagingElementPath path) { if (element instanceof FileCopyPackagingElement fileCopyPackagingElement) { - final VirtualFile file = fileCopyPackagingElement.findFile(); + VirtualFile file = fileCopyPackagingElement.findFile(); if (file != null) { sourceFile.set(file); } } else if (element instanceof DirectoryCopyPackagingElement directoryCopyPackagingElement) { - final VirtualFile file = directoryCopyPackagingElement.findFile(); + VirtualFile file = directoryCopyPackagingElement.findFile(); if (file != null) { sourceDir.set(file); return false; @@ -128,14 +131,14 @@ else if (element instanceof DirectoryCopyPackagingElement directoryCopyPackaging } - final Project project = context.getProject(); + 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(); + VirtualFile[] files = enumerator.withoutDepModules().withoutLibraries().withoutSdk().productionOnly().sources().getRoots(); if (files.length > 0) { return files[0]; } @@ -144,8 +147,8 @@ public static VirtualFile suggestManifestFileDirectory(@Nonnull Project project, @Nullable - private static VirtualFile suggestBaseDir(@Nonnull Project project, final @Nullable VirtualFile file) { - final VirtualFile[] contentRoots = ProjectRootManager.getInstance(project).getContentRoots(); + 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]; } @@ -172,12 +175,12 @@ public static Manifest readManifest(@Nonnull VirtualFile manifestFile) { public static void updateManifest( @Nonnull VirtualFile file, - final @Nullable String mainClass, - final @Nullable List classpath, - final boolean replaceValues + @Nullable String mainClass, + @Nullable List classpath, + boolean replaceValues ) { - final Manifest manifest = readManifest(file); - final Attributes mainAttributes = manifest.getMainAttributes(); + Manifest manifest = readManifest(file); + Attributes mainAttributes = manifest.getMainAttributes(); if (mainClass != null) { mainAttributes.put(Attributes.Name.MAIN_CLASS, mainClass); @@ -193,7 +196,7 @@ else if (replaceValues) { } else { updatedClasspath = new ArrayList<>(); - final String oldClasspath = (String)mainAttributes.get(Attributes.Name.CLASS_PATH); + String oldClasspath = (String)mainAttributes.get(Attributes.Name.CLASS_PATH); if (!StringUtil.isEmpty(oldClasspath)) { updatedClasspath.addAll(StringUtil.split(oldClasspath, " ")); } @@ -221,11 +224,11 @@ else if (replaceValues) { @Nonnull public static ManifestFileConfiguration createManifestFileConfiguration(@Nonnull VirtualFile manifestFile) { - final String path = manifestFile.getPath(); + 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<>(); + String classpathText = manifest.getMainAttributes().getValue(Attributes.Name.CLASS_PATH); + List classpath = new ArrayList<>(); if (classpathText != null) { classpath.addAll(StringUtil.split(classpathText, " ")); } @@ -235,21 +238,21 @@ public static ManifestFileConfiguration createManifestFileConfiguration(@Nonnull public static List getClasspathForElements( List> elements, PackagingElementResolvingContext context, - final ArtifactType artifactType + ArtifactType artifactType ) { - final List classpath = new ArrayList<>(); - final PackagingElementProcessor> processor = new PackagingElementProcessor<>() { + List classpath = new ArrayList<>(); + PackagingElementProcessor> processor = new PackagingElementProcessor<>() { @Override public boolean process(@Nonnull PackagingElement element, @Nonnull PackagingElementPath path) { if (element instanceof FileCopyPackagingElement fileCopyPackagingElement) { - final String fileName = fileCopyPackagingElement.getOutputFileName(); + 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(); + String archiveName = archivePackagingElement.getName(); classpath.add(ArtifactUtil.appendToPath(path.getPathString(), archiveName)); } return true; @@ -262,10 +265,11 @@ else if (element instanceof ArchivePackagingElement archivePackagingElement) { } @Nullable - public static VirtualFile showDialogAndCreateManifest(final ArtifactEditorContext context, final CompositePackagingElement element) { + @RequiredUIAccess + public static VirtualFile showDialogAndCreateManifest(ArtifactEditorContext context, CompositePackagingElement element) { FileChooserDescriptor descriptor = createDescriptorForManifestDirectory(); - final VirtualFile directory = suggestManifestFileDirectory(element, context, context.getArtifactType()); - final VirtualFile file = IdeaFileChooser.chooseFile(descriptor, context.getProject(), directory); + VirtualFile directory = suggestManifestFileDirectory(element, context, context.getArtifactType()); + VirtualFile file = IdeaFileChooser.chooseFile(descriptor, context.getProject(), directory); if (file == null) { return null; } @@ -274,9 +278,10 @@ public static VirtualFile showDialogAndCreateManifest(final ArtifactEditorContex } @Nullable - public static VirtualFile createManifestFile(final @Nonnull VirtualFile directory, final @Nonnull Project project) { - project.getApplication().assertIsDispatchThread(); - final Ref exc = Ref.create(null); + @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 { @@ -308,38 +313,42 @@ public static VirtualFile createManifestFile(final @Nonnull VirtualFile director public static FileChooserDescriptor createDescriptorForManifestDirectory() { FileChooserDescriptor descriptor = FileChooserDescriptorFactory.createSingleFolderDescriptor(); - descriptor.setTitle("Select Directory for META-INF/MANIFEST.MF file"); + descriptor.withTitleValue(LocalizeValue.localizeTODO("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 + @Nonnull String path, + @Nonnull ArtifactEditorContext context, + @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); + 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); + } } - }); + ); } + @RequiredUIAccess @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 = + 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(); } - public static void setupMainClassField(final Project project, final TextFieldWithBrowseButton field) { + public static void setupMainClassField(Project project, TextFieldWithBrowseButton field) { field.addActionListener(e -> { - final PsiClass selected = selectMainClass(project, field.getText()); + PsiClass selected = selectMainClass(project, field.getText()); if (selected != null) { field.setText(selected.getQualifiedName()); } @@ -348,9 +357,9 @@ public static void setupMainClassField(final Project project, final TextFieldWit private static class MainClassFilter implements ClassFilter { @Override - public boolean isAccepted(final PsiClass aClass) { + public boolean isAccepted(PsiClass aClass) { return Application.get() - .runReadAction((Computable)() -> PsiMethodUtil.MAIN_CLASS.test(aClass) && PsiMethodUtil.hasMainMethod(aClass)); + .runReadAction((Supplier)() -> 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 5117795e7..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; @@ -44,7 +44,7 @@ public class JarArtifactFromModulesDialog extends DialogWrapper { private JPanel myMainPanel; private TextFieldWithBrowseButton myMainClassField; - private JComboBox myModuleComboBox; + private JComboBox myModuleComboBox; private JLabel myMainClassLabel; private TextFieldWithBrowseButton myManifestDirField; private JLabel myManifestDirLabel; @@ -56,11 +56,11 @@ public class JarArtifactFromModulesDialog extends DialogWrapper { public JarArtifactFromModulesDialog(PackagingElementResolvingContext context) { super(context.getProject()); myContext = context; - setTitle("Create Jar from Modules"); + setTitle(LocalizeValue.localizeTODO("Create Jar from Modules")); myMainClassLabel.setLabelFor(myMainClassField.getTextField()); myManifestDirLabel.setLabelFor(myManifestDirField.getTextField()); - final Project project = myContext.getProject(); + Project project = myContext.getProject(); ManifestFileUtil.setupMainClassField(project, myMainClassField); myMainClassField.getTextField().getDocument().addDocumentListener(new DocumentAdapter() { @Override @@ -68,12 +68,7 @@ protected void textChanged(DocumentEvent e) { updateManifestDirField(); } }); - final ActionListener actionListener = new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - updateManifestDirField(); - } - }; + final ActionListener actionListener = e -> updateManifestDirField(); myExtractJarsRadioButton.addActionListener(actionListener); myCopyJarsRadioButton.addActionListener(actionListener); @@ -163,12 +158,12 @@ 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); + setIcon(PlatformIconGroup.nodesModule()); append(module.getName()); } else { append(""); - setIcon(AllIcons.Nodes.ModuleGroup); + 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 28df925e7..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,7 +27,9 @@ 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; @@ -41,17 +43,17 @@ @ExtensionImpl(order = "after zip-artifact") public class JarArtifactType extends ArtifactType { public JarArtifactType() { - super("jar", "Jar"); + super("jar", LocalizeValue.localizeTODO("Jar")); } public static JarArtifactType getInstance() { - return EP_NAME.findExtension(JarArtifactType.class); + return Application.get().getExtensionPoint(ArtifactType.class).findExtension(JarArtifactType.class); } @Nonnull @Override public Image getIcon() { - return AllIcons.Nodes.Artifact; + return PlatformIconGroup.nodesArtifact(); } @Override 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 02d25bb9d..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; @@ -74,16 +75,16 @@ public NewArtifactConfiguration createArtifact() { @Nullable @RequiredUIAccess public NewArtifactConfiguration doCreateArtifact( - final Module[] modules, - final String mainClassName, - final String directoryForManifest, - final boolean extractLibrariesToJar, - final boolean includeTests + Module[] modules, + String mainClassName, + String directoryForManifest, + boolean extractLibrariesToJar, + boolean includeTests ) { VirtualFile manifestFile = null; - final Project project = myContext.getProject(); + Project project = myContext.getProject(); if (mainClassName != null && !mainClassName.isEmpty() || !extractLibrariesToJar) { - final VirtualFile directory; + VirtualFile directory; try { directory = project.getApplication().runWriteAction( (ThrowableComputable)() -> VirtualFileUtil.createDirectoryIfMissing(directoryForManifest) @@ -111,17 +112,17 @@ public NewArtifactConfiguration doCreateArtifact( String name = modules.length == 1 ? modules[0].getName() : project.getName(); - final PackagingElementFactory factory = PackagingElementFactory.getInstance(myContext.getProject()); - final CompositePackagingElement archive = factory.createZipArchive(ArtifactUtil.suggestArtifactFileName(name) + ".jar"); + PackagingElementFactory factory = PackagingElementFactory.getInstance(myContext.getProject()); + CompositePackagingElement archive = factory.createZipArchive(ArtifactUtil.suggestArtifactFileName(name) + ".jar"); OrderEnumerator orderEnumerator = ProjectRootManager.getInstance(project).orderEntries(Arrays.asList(modules)); - final Set libraries = new HashSet<>(); + Set libraries = new HashSet<>(); if (!includeTests) { orderEnumerator = orderEnumerator.productionOnly(); } - final ModulesProvider modulesProvider = myContext.getModulesProvider(); - final OrderEnumerator enumerator = orderEnumerator.using(modulesProvider).withoutSdk().runtimeOnly().recursively(); + 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)) { @@ -133,18 +134,18 @@ public NewArtifactConfiguration doCreateArtifact( return true; }); - final JarArtifactType jarArtifactType = JarArtifactType.getInstance(); + JarArtifactType jarArtifactType = JarArtifactType.getInstance(); if (manifestFile != null && !manifestFile.equals(ManifestFileUtil.findManifestFile(archive, myContext, jarArtifactType))) { archive.addFirstChild(factory.createFileCopyWithParentDirectories(manifestFile.getPath(), ManifestFileUtil.MANIFEST_DIR_NAME)); } - final String artifactName = name + ":jar"; + String artifactName = name + ":jar"; if (extractLibrariesToJar) { addExtractedLibrariesToJar(archive, factory, libraries); return new NewArtifactConfiguration(archive, artifactName, jarArtifactType); } else { - final ArtifactRootElement root = factory.createArtifactRootElement(); + ArtifactRootElement root = factory.createArtifactRootElement(); List classpath = new ArrayList<>(); root.addOrFindChild(archive); addLibraries(libraries, root, archive, classpath); @@ -167,7 +168,7 @@ private void addLibraries( archive.addOrFindChild(factory.createDirectoryCopyWithParentDirectories(classesRoot.getPath(), "/")); } else { - final PackagingElement child = + PackagingElement child = factory.createFileCopyWithParentDirectories(VirtualFilePathUtil.getLocalFile(classesRoot).getPath(), "/"); root.addOrFindChild(child); classpath.addAll(ManifestFileUtil.getClasspathForElements( @@ -180,7 +181,7 @@ private void addLibraries( } else { - final List> children = factory.createLibraryElements(library); + List> children = factory.createLibraryElements(library); classpath.addAll(ManifestFileUtil.getClasspathForElements(children, myContext, PlainArtifactType.getInstance())); root.addOrFindChildren(children); } @@ -211,7 +212,7 @@ private static void addExtractedLibrariesToJar( } @Override - public String getPresentableName() { - return "From modules with dependencies..."; + 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 8abc48bb8..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 @@ -33,17 +33,16 @@ 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 final Map myManifestFiles = new HashMap<>(); + private final Map myOriginalManifestFiles = new HashMap<>(); @Nullable public ManifestFileConfiguration getManifestFile( CompositePackagingElement element, ArtifactType artifactType, - final PackagingElementResolvingContext context + PackagingElementResolvingContext context ) { - final VirtualFile manifestFile = ManifestFileUtil.findManifestFile(element, context, artifactType); + VirtualFile manifestFile = ManifestFileUtil.findManifestFile(element, context, artifactType); if (manifestFile == null) { return null; } @@ -59,20 +58,20 @@ public ManifestFileConfiguration getManifestFile( public void saveManifestFiles() { for (Map.Entry entry : myManifestFiles.entrySet()) { - final ManifestFileConfiguration configuration = entry.getValue(); - final String path = configuration.getManifestFilePath(); + ManifestFileConfiguration configuration = entry.getValue(); + String path = configuration.getManifestFilePath(); if (path == null) { continue; } - final ManifestFileConfiguration original = myOriginalManifestFiles.get(entry.getKey()); + 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)); + File ioFile = new File(FileUtil.toSystemDependentName(path)); FileUtil.createIfDoesntExist(ioFile); file = LocalFileSystem.getInstance().refreshAndFindFileByIoFile(ioFile); if (file == null) { 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 93a2355ca..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; @@ -54,7 +55,7 @@ public boolean isAvailableForAdd(@Nonnull ArtifactEditorContext context, @Nonnul @Nonnull @Override public Image getIcon() { - return AllIcons.Nodes.PpJar; + return PlatformIconGroup.filetypesArchive(); } @Nonnull @@ -63,20 +64,22 @@ 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 + @RequiredUIAccess public CompositePackagingElement createComposite( CompositePackagingElement parent, @Nullable String baseName, @Nonnull ArtifactEditorContext context ) { - final String initialValue = ArtifactUtil.suggestFileName(parent, baseName != null ? baseName : "archive", ".jar"); + String initialValue = ArtifactUtil.suggestFileName(parent, baseName != null ? baseName : "archive", ".jar"); String path = Messages.showInputDialog( context.getProject(), "Enter archive name: ", @@ -89,9 +92,9 @@ public CompositePackagingElement createComposite( return null; } path = FileUtil.toSystemIndependentName(path); - final String parentPath = PathUtil.getParentPath(path); - final String fileName = PathUtil.getFileName(path); - final PackagingElement element = new JarArchivePackagingElement(fileName); + String parentPath = PathUtil.getParentPath(path); + String fileName = PathUtil.getFileName(path); + 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 f5fe48c53..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,7 +23,7 @@ /** * @author VISTALL - * @since 16:05/18.06.13 + * @since 2013-06-18 */ public class JarArchivePackagingElement extends ArchivePackagingElement { public JarArchivePackagingElement() { 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 9aa1c9807..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,13 +20,14 @@ 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 List myClasspath = new ArrayList<>(); private String myMainClass; private String myManifestFilePath; @@ -81,26 +82,11 @@ public void setManifestFilePath(String manifestFilePath) { @Override public boolean equals(Object o) { - if (this == o) { - return true; - } - if (!(o instanceof ManifestFileConfiguration)) { - return false; - } - - ManifestFileConfiguration that = (ManifestFileConfiguration)o; - - if (!myClasspath.equals(that.myClasspath)) { - return false; - } - if (myMainClass != null ? !myMainClass.equals(that.myMainClass) : that.myMainClass != null) { - return false; - } - if (myManifestFilePath != null ? !myManifestFilePath.equals(that.myManifestFilePath) : that.myManifestFilePath != null) { - return false; - } - - return true; + return this == o + || o instanceof ManifestFileConfiguration that + && myClasspath.equals(that.myClasspath) + && Objects.equals(myMainClass, that.myMainClass) + && Objects.equals(myManifestFilePath, that.myManifestFilePath); } @Override 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 1e16dfcc9..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,22 +22,21 @@ 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 @@ -56,38 +55,24 @@ public abstract class ElementWithManifestPropertiesPanel 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(); - } - }); + myUseExistingManifestButton.addActionListener(e -> chooseManifest()); + myCreateManifestButton.addActionListener(e -> createManifest()); } + @RequiredUIAccess private void createManifest() { final VirtualFile file = ManifestFileUtil.showDialogAndCreateManifest(myContext, myElement); if (file == null) { @@ -107,7 +92,7 @@ public boolean isFileVisible(VirtualFile file, boolean showHiddenFiles) { .MANIFEST_FILE_NAME)); } }; - descriptor.setTitle("Specify Path to MANIFEST.MF file"); + descriptor.withTitleValue(LocalizeValue.localizeTODO("Specify Path to MANIFEST.MF file")); final VirtualFile file = IdeaFileChooser.chooseFile(descriptor, myContext.getProject(), null); if (file == null) { return; @@ -121,7 +106,7 @@ public boolean isFileVisible(VirtualFile file, boolean showHiddenFiles) { private void updateManifest() { /*myManifestFileConfiguration = myContext.getManifestFile(myElement, myContext.getArtifactType()); final String card; - if(myManifestFileConfiguration != null) + if (myManifestFileConfiguration != null) { card = "properties"; myManifestPathField.setText(FileUtil.toSystemDependentName(myManifestFileConfiguration.getManifestFilePath())); @@ -139,6 +124,7 @@ private void updateManifest() { } @Override + @RequiredUIAccess public void reset() { myTitleLabel.setText("'" + myElement.getName() + "' manifest properties:"); myManifestNotFoundLabel.setText("META-INF/MANIFEST.MF file not found in '" + myElement.getName() + "'"); @@ -146,10 +132,11 @@ public void reset() { } @Override + @RequiredUIAccess public boolean isModified() { return myManifestFileConfiguration != null && (!myManifestFileConfiguration.getClasspath().equals(getConfiguredClasspath()) - || !Comparing.equal(myManifestFileConfiguration.getMainClass(), getConfiguredMainClass()) - || !Comparing.equal(myManifestFileConfiguration.getManifestFilePath(), getConfiguredManifestPath())); + || !Objects.equals(myManifestFileConfiguration.getMainClass(), getConfiguredMainClass()) + || !Objects.equals(myManifestFileConfiguration.getManifestFilePath(), getConfiguredManifestPath())); } @Nullable 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) {