diff --git a/java/compiler/impl/src/com/intellij/packaging/impl/compiler/ArtifactAdditionalCompileScopeProvider.java b/java/compiler/impl/src/com/intellij/packaging/impl/compiler/ArtifactAdditionalCompileScopeProvider.java index 78f9c1221117..ceb8bb47b490 100644 --- a/java/compiler/impl/src/com/intellij/packaging/impl/compiler/ArtifactAdditionalCompileScopeProvider.java +++ b/java/compiler/impl/src/com/intellij/packaging/impl/compiler/ArtifactAdditionalCompileScopeProvider.java @@ -41,7 +41,7 @@ public class ArtifactAdditionalCompileScopeProvider extends AdditionalCompileSco } return new ReadAction() { protected void run(final Result result) { - final Set artifacts = ArtifactCompileScope.getArtifactsToBuild(project, baseScope); + final Set artifacts = ArtifactCompileScope.getArtifactsToBuild(project, baseScope, false); result.setResult(ArtifactCompileScope.createScopeForModulesInArtifacts(project, artifacts)); } }.execute().getResultObject(); diff --git a/java/compiler/impl/src/com/intellij/packaging/impl/compiler/ArtifactCompileScope.java b/java/compiler/impl/src/com/intellij/packaging/impl/compiler/ArtifactCompileScope.java index ac5a83cdc275..f2f4ad0cb264 100644 --- a/java/compiler/impl/src/com/intellij/packaging/impl/compiler/ArtifactCompileScope.java +++ b/java/compiler/impl/src/com/intellij/packaging/impl/compiler/ArtifactCompileScope.java @@ -22,6 +22,7 @@ import com.intellij.openapi.module.Module; import com.intellij.openapi.module.ModuleManager; import com.intellij.openapi.project.Project; import com.intellij.openapi.util.Key; +import com.intellij.openapi.util.text.StringUtil; import com.intellij.packaging.artifacts.Artifact; import com.intellij.packaging.artifacts.ArtifactManager; import com.intellij.packaging.elements.PackagingElementResolvingContext; @@ -62,12 +63,14 @@ public class ArtifactCompileScope { return baseScope; } - public static Set getArtifactsToBuild(final Project project, final CompileScope compileScope) { + public static Set getArtifactsToBuild(final Project project, + final CompileScope compileScope, + final boolean addIncludedArtifactsWithOutputPathsOnly) { final Artifact[] artifactsFromScope = getArtifacts(compileScope); final ArtifactManager artifactManager = ArtifactManager.getInstance(project); PackagingElementResolvingContext context = artifactManager.getResolvingContext(); if (artifactsFromScope != null) { - return addIncludedArtifacts(Arrays.asList(artifactsFromScope), context); + return addIncludedArtifacts(Arrays.asList(artifactsFromScope), context, addIncludedArtifactsWithOutputPathsOnly); } final Set cached = compileScope.getUserData(CACHED_ARTIFACTS_KEY); @@ -86,7 +89,7 @@ public class ArtifactCompileScope { } } } - Set result = addIncludedArtifacts(artifacts, context); + Set result = addIncludedArtifacts(artifacts, context, addIncludedArtifactsWithOutputPathsOnly); compileScope.putUserData(CACHED_ARTIFACTS_KEY, result); return result; } @@ -107,25 +110,31 @@ public class ArtifactCompileScope { } @NotNull - private static Set addIncludedArtifacts(@NotNull Collection artifacts, @NotNull PackagingElementResolvingContext context) { + private static Set addIncludedArtifacts(@NotNull Collection artifacts, + @NotNull PackagingElementResolvingContext context, + final boolean withOutputPathOnly) { Set result = new HashSet(); for (Artifact artifact : artifacts) { - collectIncludedArtifacts(artifact, context, result); + collectIncludedArtifacts(artifact, context, new HashSet(), result, withOutputPathOnly); } return result; } - private static void collectIncludedArtifacts(Artifact artifact, final PackagingElementResolvingContext context, final Set result) { - if (!result.add(artifact)) { + private static void collectIncludedArtifacts(Artifact artifact, final PackagingElementResolvingContext context, + final Set processed, final Set result, final boolean withOutputPathOnly) { + if (!processed.add(artifact)) { return; } + if (!withOutputPathOnly || !StringUtil.isEmpty(artifact.getOutputPath())) { + result.add(artifact); + } ArtifactUtil.processPackagingElements(artifact, ArtifactElementType.ARTIFACT_ELEMENT_TYPE, new Processor() { @Override public boolean process(ArtifactPackagingElement element) { Artifact included = element.findArtifact(context); if (included != null) { - collectIncludedArtifacts(included, context, result); + collectIncludedArtifacts(included, context, processed, result, withOutputPathOnly); } return true; } diff --git a/java/compiler/impl/src/com/intellij/packaging/impl/compiler/ArtifactsCompilerInstance.java b/java/compiler/impl/src/com/intellij/packaging/impl/compiler/ArtifactsCompilerInstance.java index 376a1e56b1c7..ee2ac83f8b12 100644 --- a/java/compiler/impl/src/com/intellij/packaging/impl/compiler/ArtifactsCompilerInstance.java +++ b/java/compiler/impl/src/com/intellij/packaging/impl/compiler/ArtifactsCompilerInstance.java @@ -90,7 +90,7 @@ public class ArtifactsCompilerInstance extends GenericCompilerInstance artifacts; if (selectedOnly) { - artifacts = ArtifactCompileScope.getArtifactsToBuild(getProject(), myContext.getCompileScope()); + artifacts = ArtifactCompileScope.getArtifactsToBuild(getProject(), myContext.getCompileScope(), true); } else { artifacts = new HashSet(Arrays.asList(ArtifactManager.getInstance(getProject()).getArtifacts()));