diff --git a/java/compiler/impl/src/com/intellij/compiler/CompilerManagerImpl.java b/java/compiler/impl/src/com/intellij/compiler/CompilerManagerImpl.java index 46a090da8a92..64356bf491b2 100644 --- a/java/compiler/impl/src/com/intellij/compiler/CompilerManagerImpl.java +++ b/java/compiler/impl/src/com/intellij/compiler/CompilerManagerImpl.java @@ -397,12 +397,17 @@ public class CompilerManagerImpl extends CompilerManager { @NotNull public CompileScope createModuleCompileScope(@NotNull final Module module, final boolean includeDependentModules) { - return new ModuleCompileScope(module, includeDependentModules); + return createModulesCompileScope(new Module[] {module}, includeDependentModules); } @NotNull public CompileScope createModulesCompileScope(@NotNull final Module[] modules, final boolean includeDependentModules) { - return new ModuleCompileScope(myProject, modules, includeDependentModules); + return createModulesCompileScope(modules, includeDependentModules, false); + } + + @NotNull + public CompileScope createModulesCompileScope(@NotNull Module[] modules, boolean includeDependentModules, boolean includeRuntimeDependencies) { + return new ModuleCompileScope(myProject, modules, includeDependentModules, includeRuntimeDependencies); } @NotNull diff --git a/java/compiler/impl/src/com/intellij/compiler/impl/ModuleCompileScope.java b/java/compiler/impl/src/com/intellij/compiler/impl/ModuleCompileScope.java index b2485e8d8ea8..63bb747e9462 100644 --- a/java/compiler/impl/src/com/intellij/compiler/impl/ModuleCompileScope.java +++ b/java/compiler/impl/src/com/intellij/compiler/impl/ModuleCompileScope.java @@ -25,10 +25,7 @@ import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.module.Module; import com.intellij.openapi.module.ModuleManager; import com.intellij.openapi.project.Project; -import com.intellij.openapi.roots.FileIndex; -import com.intellij.openapi.roots.ModuleRootManager; -import com.intellij.openapi.roots.ProjectFileIndex; -import com.intellij.openapi.roots.ProjectRootManager; +import com.intellij.openapi.roots.*; import com.intellij.openapi.util.Computable; import com.intellij.openapi.util.io.FileUtil; import com.intellij.openapi.vfs.VirtualFile; @@ -36,10 +33,7 @@ import com.intellij.openapi.vfs.VirtualFileManager; import com.intellij.util.CommonProcessors; import org.jetbrains.annotations.NotNull; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Map; -import java.util.Set; +import java.util.*; public class ModuleCompileScope extends FileIndexCompileScope { private final Project myProject; @@ -47,18 +41,18 @@ public class ModuleCompileScope extends FileIndexCompileScope { private final Module[] myModules; public ModuleCompileScope(final Module module, boolean includeDependentModules) { - myProject = module.getProject(); - myScopeModules = new HashSet(); - if (includeDependentModules) { - buildScopeModulesSet(module); - } - else { - myScopeModules.add(module); - } - myModules = ModuleManager.getInstance(myProject).getModules(); + this(module.getProject(), Collections.singleton(module), includeDependentModules, false); } public ModuleCompileScope(Project project, final Module[] modules, boolean includeDependentModules) { + this(project, modules, includeDependentModules, false); + } + + public ModuleCompileScope(Project project, final Module[] modules, boolean includeDependentModules, boolean includeRuntimeDependencies) { + this(project, Arrays.asList(modules), includeDependentModules, includeRuntimeDependencies); + } + + private ModuleCompileScope(Project project, final Collection modules, boolean includeDependentModules, boolean includeRuntimeDeps) { myProject = project; myScopeModules = new HashSet(); for (Module module : modules) { @@ -66,7 +60,11 @@ public class ModuleCompileScope extends FileIndexCompileScope { continue; // prevent NPE } if (includeDependentModules) { - buildScopeModulesSet(module); + OrderEnumerator enumerator = ModuleRootManager.getInstance(module).orderEntries().recursively(); + if (!includeRuntimeDeps) { + enumerator = enumerator.compileOnly(); + } + enumerator.forEachModule(new CommonProcessors.CollectProcessor(myScopeModules)); } else { myScopeModules.add(module); @@ -75,10 +73,6 @@ public class ModuleCompileScope extends FileIndexCompileScope { myModules = ModuleManager.getInstance(myProject).getModules(); } - private void buildScopeModulesSet(Module module) { - ModuleRootManager.getInstance(module).orderEntries().recursively().compileOnly().forEachModule(new CommonProcessors.CollectProcessor(myScopeModules)); - } - @NotNull public Module[] getAffectedModules() { return myScopeModules.toArray(new Module[myScopeModules.size()]); diff --git a/java/compiler/impl/testSrc/com/intellij/compiler/BaseCompilerTestCase.java b/java/compiler/impl/testSrc/com/intellij/compiler/BaseCompilerTestCase.java index 5900ea2d6097..ee88a678cabc 100644 --- a/java/compiler/impl/testSrc/com/intellij/compiler/BaseCompilerTestCase.java +++ b/java/compiler/impl/testSrc/com/intellij/compiler/BaseCompilerTestCase.java @@ -171,15 +171,15 @@ public abstract class BaseCompilerTestCase extends ModuleTestCase { } protected CompilationLog make(Module... modules) { - return make(false, modules); + return make(false, false, modules); } - protected CompilationLog makeWithDependencies(Module... modules) { - return make(true, modules); + protected CompilationLog makeWithDependencies(final boolean includeRuntimeDependencies, Module... modules) { + return make(true, includeRuntimeDependencies, modules); } - private CompilationLog make(boolean includeDependentModules, Module... modules) { - return make(getCompilerManager().createModulesCompileScope(modules, includeDependentModules), CompilerFilter.ALL); + private CompilationLog make(boolean includeDependentModules, final boolean includeRuntimeDependencies, Module... modules) { + return make(getCompilerManager().createModulesCompileScope(modules, includeDependentModules, includeRuntimeDependencies), CompilerFilter.ALL); } protected CompilationLog recompile(Module... modules) { diff --git a/java/compiler/openapi/src/com/intellij/openapi/compiler/CompilerManager.java b/java/compiler/openapi/src/com/intellij/openapi/compiler/CompilerManager.java index f9d8bce65258..1f0106c11fa4 100644 --- a/java/compiler/openapi/src/com/intellij/openapi/compiler/CompilerManager.java +++ b/java/compiler/openapi/src/com/intellij/openapi/compiler/CompilerManager.java @@ -285,11 +285,13 @@ public abstract class CompilerManager { @NotNull public abstract CompileScope createFilesCompileScope(@NotNull VirtualFile[] files); @NotNull - public abstract CompileScope createModuleCompileScope(@NotNull Module module, final boolean includeDependentModules); + public abstract CompileScope createModuleCompileScope(@NotNull Module module, boolean includeDependentModules); @NotNull - public abstract CompileScope createModulesCompileScope(@NotNull Module[] modules, final boolean includeDependentModules); + public abstract CompileScope createModulesCompileScope(@NotNull Module[] modules, boolean includeDependentModules); @NotNull - public abstract CompileScope createModuleGroupCompileScope(@NotNull Project project, @NotNull Module[] modules, final boolean includeDependentModules); + public abstract CompileScope createModulesCompileScope(@NotNull Module[] modules, boolean includeDependentModules, boolean includeRuntimeDependencies); + @NotNull + public abstract CompileScope createModuleGroupCompileScope(@NotNull Project project, @NotNull Module[] modules, boolean includeDependentModules); @NotNull public abstract CompileScope createProjectCompileScope(@NotNull Project project); diff --git a/java/execution/impl/src/com/intellij/compiler/options/CompileStepBeforeRun.java b/java/execution/impl/src/com/intellij/compiler/options/CompileStepBeforeRun.java index 57efc543da2d..124220d75966 100644 --- a/java/execution/impl/src/com/intellij/compiler/options/CompileStepBeforeRun.java +++ b/java/execution/impl/src/com/intellij/compiler/options/CompileStepBeforeRun.java @@ -143,7 +143,7 @@ public class CompileStepBeforeRun extends BeforeRunTaskProvider