From b2019a1bc0704608db2dda7741c5a46e44c43e1a Mon Sep 17 00:00:00 2001 From: nik Date: Thu, 12 Oct 2017 19:00:10 +0300 Subject: [PATCH] build process: ignore information about changes from IDE if there are unloaded modules Otherwise it may incorrectly skip build because unloaded modules aren't monitored by IDE (IDEA-180530). --- .../UnloadedModulesCompilationTest.java | 17 +++++++++++++++++ .../org/jetbrains/jps/cmdline/BuildSession.java | 2 +- 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/java/compiler/tests/com/intellij/compiler/UnloadedModulesCompilationTest.java b/java/compiler/tests/com/intellij/compiler/UnloadedModulesCompilationTest.java index a197b74db40e..b0e106d14009 100644 --- a/java/compiler/tests/com/intellij/compiler/UnloadedModulesCompilationTest.java +++ b/java/compiler/tests/com/intellij/compiler/UnloadedModulesCompilationTest.java @@ -71,6 +71,23 @@ public class UnloadedModulesCompilationTest extends BaseCompilerTestCase { make(createScopeWithUnloaded(Collections.singletonList(util), unloadedList), CompilerFilter.ALL).assertGenerated("A.class", "Util.class"); } + public void testCompileUnloadedModuleAfterBuildingAllLoadedModules() { + VirtualFile utilFile = createFile("util/src/Util.java", "class Util { }"); + Module util = addModule("util", utilFile.getParent()); + VirtualFile a = createFile("unloaded/src/A.java", "class A { Util u = new Util(); }"); + Module unloaded = addModule("unloaded", a.getParent()); + ModuleRootModificationUtil.addDependency(unloaded, util); + buildAllModules(); + + List unloadedList = Collections.singletonList(unloaded.getName()); + ModuleManager.getInstance(myProject).setUnloadedModules(unloadedList); + + changeFile(utilFile, "class Util { Util(int i) {} }"); + buildAllModules().assertGenerated("Util.class"); + + compile(createScopeWithUnloaded(Collections.singletonList(util), unloadedList), CompilerFilter.ALL, false, true); + } + @NotNull private ModuleCompileScope createScopeWithUnloaded(List modules, List unloaded) { return new ModuleCompileScope(myProject, modules, unloaded, true, false); diff --git a/jps/jps-builders/src/org/jetbrains/jps/cmdline/BuildSession.java b/jps/jps-builders/src/org/jetbrains/jps/cmdline/BuildSession.java index e5b12b4ec4c9..eec1e449d2ee 100644 --- a/jps/jps-builders/src/org/jetbrains/jps/cmdline/BuildSession.java +++ b/jps/jps-builders/src/org/jetbrains/jps/cmdline/BuildSession.java @@ -97,8 +97,8 @@ final class BuildSession implements Runnable, CanceledStatus { for (CmdlineRemoteProto.Message.KeyValuePair pair : params.getBuilderParameterList()) { builderParams.put(pair.getKey(), pair.getValue()); } - myInitialFSDelta = delta; boolean loadUnloadedModules = Boolean.parseBoolean(builderParams.get(BuildParametersKeys.LOAD_UNLOADED_MODULES)); + myInitialFSDelta = loadUnloadedModules ? null : delta; if (loadUnloadedModules && preloaded != null) { myPreloadedData = null; ProjectDescriptor projectDescriptor = preloaded.getProjectDescriptor();