From ee0b0d2157857fd7fae3fa83b4029a442c4bcc7f Mon Sep 17 00:00:00 2001 From: nik Date: Fri, 22 Jun 2012 14:06:18 +0400 Subject: [PATCH] IDEA-87710: Cannot build artifact with "module production output" if module doesn't have production code --- .../artifacts/JarFromModulesTemplate.java | 12 +++++++++--- .../elements/ModuleOutputElementTypeBase.java | 14 +++++++++++++- .../ProductionModuleOutputElementType.java | 15 +++------------ .../elements/TestModuleOutputElementType.java | 19 ++----------------- 4 files changed, 27 insertions(+), 33 deletions(-) diff --git a/java/compiler/impl/src/com/intellij/packaging/impl/artifacts/JarFromModulesTemplate.java b/java/compiler/impl/src/com/intellij/packaging/impl/artifacts/JarFromModulesTemplate.java index 542db382fd4b..308a211d385a 100644 --- a/java/compiler/impl/src/com/intellij/packaging/impl/artifacts/JarFromModulesTemplate.java +++ b/java/compiler/impl/src/com/intellij/packaging/impl/artifacts/JarFromModulesTemplate.java @@ -23,6 +23,7 @@ import com.intellij.openapi.roots.OrderEnumerator; import com.intellij.openapi.roots.OrderRootType; import com.intellij.openapi.roots.ProjectRootManager; import com.intellij.openapi.roots.libraries.Library; +import com.intellij.openapi.roots.ui.configuration.ModulesProvider; import com.intellij.openapi.ui.Messages; import com.intellij.openapi.vfs.VfsUtil; import com.intellij.openapi.vfs.VirtualFile; @@ -30,6 +31,8 @@ import com.intellij.packaging.artifacts.ArtifactTemplate; import com.intellij.packaging.elements.*; import com.intellij.packaging.impl.elements.LibraryPackagingElement; import com.intellij.packaging.impl.elements.ManifestFileUtil; +import com.intellij.packaging.impl.elements.ProductionModuleOutputElementType; +import com.intellij.packaging.impl.elements.TestModuleOutputElementType; import com.intellij.util.CommonProcessors; import com.intellij.util.PathUtil; import com.intellij.util.Processor; @@ -101,13 +104,16 @@ public class JarFromModulesTemplate extends ArtifactTemplate { if (!includeTests) { orderEnumerator = orderEnumerator.productionOnly(); } - final OrderEnumerator enumerator = orderEnumerator.using(myContext.getModulesProvider()).withoutSdk().runtimeOnly().recursively(); + final ModulesProvider modulesProvider = myContext.getModulesProvider(); + final OrderEnumerator enumerator = orderEnumerator.using(modulesProvider).withoutSdk().runtimeOnly().recursively(); enumerator.forEachLibrary(new CommonProcessors.CollectProcessor(libraries)); enumerator.forEachModule(new Processor() { @Override public boolean process(Module module) { - archive.addOrFindChild(factory.createModuleOutput(module)); - if (includeTests) { + if (ProductionModuleOutputElementType.ELEMENT_TYPE.isSuitableModule(modulesProvider, module)) { + archive.addOrFindChild(factory.createModuleOutput(module)); + } + if (includeTests && TestModuleOutputElementType.ELEMENT_TYPE.isSuitableModule(modulesProvider, module)) { archive.addOrFindChild(factory.createTestModuleOutput(module)); } return true; diff --git a/java/compiler/impl/src/com/intellij/packaging/impl/elements/ModuleOutputElementTypeBase.java b/java/compiler/impl/src/com/intellij/packaging/impl/elements/ModuleOutputElementTypeBase.java index 87b08326e791..6fed0255aee4 100644 --- a/java/compiler/impl/src/com/intellij/packaging/impl/elements/ModuleOutputElementTypeBase.java +++ b/java/compiler/impl/src/com/intellij/packaging/impl/elements/ModuleOutputElementTypeBase.java @@ -20,6 +20,7 @@ import com.intellij.openapi.module.ModulePointer; import com.intellij.openapi.module.ModulePointerManager; import com.intellij.openapi.project.Project; import com.intellij.openapi.project.ProjectBundle; +import com.intellij.openapi.roots.ui.configuration.ModulesProvider; import com.intellij.packaging.artifacts.Artifact; import com.intellij.packaging.elements.CompositePackagingElement; import com.intellij.packaging.elements.PackagingElement; @@ -59,5 +60,16 @@ public abstract class ModuleOutputElementTypeBase getSuitableModules(ArtifactEditorContext context); + private List getSuitableModules(ArtifactEditorContext context) { + ModulesProvider modulesProvider = context.getModulesProvider(); + ArrayList modules = new ArrayList(); + for (Module module : modulesProvider.getModules()) { + if (isSuitableModule(modulesProvider, module)) { + modules.add(module); + } + } + return modules; + } + + public abstract boolean isSuitableModule(ModulesProvider modulesProvider, Module module); } diff --git a/java/compiler/impl/src/com/intellij/packaging/impl/elements/ProductionModuleOutputElementType.java b/java/compiler/impl/src/com/intellij/packaging/impl/elements/ProductionModuleOutputElementType.java index 3565c05aaa48..249992223d6b 100644 --- a/java/compiler/impl/src/com/intellij/packaging/impl/elements/ProductionModuleOutputElementType.java +++ b/java/compiler/impl/src/com/intellij/packaging/impl/elements/ProductionModuleOutputElementType.java @@ -21,12 +21,9 @@ import com.intellij.openapi.module.Module; import com.intellij.openapi.module.ModulePointer; import com.intellij.openapi.project.Project; import com.intellij.openapi.roots.ui.configuration.ModulesProvider; -import com.intellij.packaging.ui.ArtifactEditorContext; import org.jetbrains.annotations.NotNull; import javax.swing.*; -import java.util.ArrayList; -import java.util.List; /** * @author nik @@ -52,14 +49,8 @@ public class ProductionModuleOutputElementType extends ModuleOutputElementTypeBa return AllIcons.Nodes.ModuleOpen; } - protected List getSuitableModules(ArtifactEditorContext context) { - ArrayList modules = new ArrayList(); - ModulesProvider modulesProvider = context.getModulesProvider(); - for (Module module : modulesProvider.getModules()) { - if (modulesProvider.getRootModel(module).getSourceRootUrls(false).length > 0) { - modules.add(module); - } - } - return modules; + @Override + public boolean isSuitableModule(ModulesProvider modulesProvider, Module module) { + return modulesProvider.getRootModel(module).getSourceRootUrls(false).length > 0; } } diff --git a/java/compiler/impl/src/com/intellij/packaging/impl/elements/TestModuleOutputElementType.java b/java/compiler/impl/src/com/intellij/packaging/impl/elements/TestModuleOutputElementType.java index 4ec37440927a..c65cb1662466 100644 --- a/java/compiler/impl/src/com/intellij/packaging/impl/elements/TestModuleOutputElementType.java +++ b/java/compiler/impl/src/com/intellij/packaging/impl/elements/TestModuleOutputElementType.java @@ -20,16 +20,12 @@ import com.intellij.openapi.module.Module; import com.intellij.openapi.module.ModulePointer; import com.intellij.openapi.project.Project; import com.intellij.openapi.roots.ContentEntry; -import com.intellij.openapi.roots.ModuleRootModel; import com.intellij.openapi.roots.SourceFolder; import com.intellij.openapi.roots.ui.configuration.ModulesProvider; -import com.intellij.packaging.ui.ArtifactEditorContext; import com.intellij.util.PlatformIcons; import org.jetbrains.annotations.NotNull; import javax.swing.*; -import java.util.ArrayList; -import java.util.List; /** * @author nik @@ -56,19 +52,8 @@ public class TestModuleOutputElementType extends ModuleOutputElementTypeBase getSuitableModules(ArtifactEditorContext context) { - ModulesProvider modulesProvider = context.getModulesProvider(); - ArrayList modules = new ArrayList(); - for (Module module : modulesProvider.getModules()) { - if (hasTestSourceRoots(modulesProvider.getRootModel(module))) { - modules.add(module); - } - } - return modules; - } - - private static boolean hasTestSourceRoots(final ModuleRootModel rootModel) { - for (ContentEntry entry : rootModel.getContentEntries()) { + public boolean isSuitableModule(ModulesProvider modulesProvider, Module module) { + for (ContentEntry entry : modulesProvider.getRootModel(module).getContentEntries()) { for (SourceFolder folder : entry.getSourceFolders()) { if (folder.isTestSource()) return true; }