From aaae267ea2d5d48977ddb95ea7c4d405b6b0b912 Mon Sep 17 00:00:00 2001 From: nik Date: Wed, 28 Oct 2015 21:04:47 +0300 Subject: [PATCH] GWT: don't start (slow and non-incremental) GWT compilation for whole module if 'compile file' action is invoked (ZD-75490) --- .../org/jetbrains/jps/incremental/CompileScope.java | 8 ++++++++ .../jetbrains/jps/incremental/CompileScopeImpl.java | 10 +++++++--- .../jps/builders/CompileScopeTestBuilder.java | 13 ++++++++++++- 3 files changed, 27 insertions(+), 4 deletions(-) diff --git a/jps/jps-builders/src/org/jetbrains/jps/incremental/CompileScope.java b/jps/jps-builders/src/org/jetbrains/jps/incremental/CompileScope.java index 4028622768d5..1be4088043bd 100644 --- a/jps/jps-builders/src/org/jetbrains/jps/incremental/CompileScope.java +++ b/jps/jps-builders/src/org/jetbrains/jps/incremental/CompileScope.java @@ -28,8 +28,16 @@ import java.io.File; public abstract class CompileScope { public abstract boolean isAffected(BuildTarget target, @NotNull File file); + /** + * @return {@code true} if at least one file from {@code target} is included into the scope + */ public abstract boolean isAffected(@NotNull BuildTarget target); + /** + * @return {@code true} if all files from {@code target} are included into the scope + */ + public abstract boolean isWholeTargetAffected(@NotNull BuildTarget target); + public abstract boolean isBuildForced(@NotNull BuildTarget target); public abstract boolean isBuildForcedForAllTargets(@NotNull BuildTargetType targetType); diff --git a/jps/jps-builders/src/org/jetbrains/jps/incremental/CompileScopeImpl.java b/jps/jps-builders/src/org/jetbrains/jps/incremental/CompileScopeImpl.java index afb1f271a597..d3a6ca5d443b 100644 --- a/jps/jps-builders/src/org/jetbrains/jps/incremental/CompileScopeImpl.java +++ b/jps/jps-builders/src/org/jetbrains/jps/incremental/CompileScopeImpl.java @@ -62,13 +62,17 @@ public class CompileScopeImpl extends CompileScope { @Override public boolean isAffected(@NotNull BuildTarget target) { - return myTypes.contains(target.getTargetType()) || myTargets.contains(target) || myFiles.containsKey(target) || isAffectedByAssociatedModule(target); + return isWholeTargetAffected(target) || myFiles.containsKey(target); + } + + @Override + public boolean isWholeTargetAffected(@NotNull BuildTarget target) { + return myTypes.contains(target.getTargetType()) || myTargets.contains(target) || isAffectedByAssociatedModule(target); } @Override public boolean isBuildForced(@NotNull BuildTarget target) { - BuildTargetType type = target.getTargetType(); - return myTypesToForceBuild.contains(type) && myFiles.isEmpty() && (myTypes.contains(type) || myTargets.contains(target) || isAffectedByAssociatedModule(target)); + return myTypesToForceBuild.contains(target.getTargetType()) && myFiles.isEmpty() && isWholeTargetAffected(target); } @Override diff --git a/jps/jps-builders/testSrc/org/jetbrains/jps/builders/CompileScopeTestBuilder.java b/jps/jps-builders/testSrc/org/jetbrains/jps/builders/CompileScopeTestBuilder.java index 73f1e3ebe1e0..d633583e9160 100644 --- a/jps/jps-builders/testSrc/org/jetbrains/jps/builders/CompileScopeTestBuilder.java +++ b/jps/jps-builders/testSrc/org/jetbrains/jps/builders/CompileScopeTestBuilder.java @@ -35,6 +35,7 @@ public class CompileScopeTestBuilder { private final boolean myForceBuild; private final Set> myTargetTypes = new HashSet>(); private final Set> myTargets = new HashSet>(); + private LinkedHashMap, Set> myFiles = new LinkedHashMap, Set>(); public static CompileScopeTestBuilder rebuild() { return new CompileScopeTestBuilder(true); @@ -78,9 +79,19 @@ public class CompileScopeTestBuilder { return this; } + public CompileScopeTestBuilder file(BuildTarget target, String path) { + Set files = myFiles.get(target); + if (files == null) { + files = new LinkedHashSet(); + myFiles.put(target, files); + } + files.add(new File(path)); + return this; + } + public CompileScope build() { Collection> typesToForceBuild = myForceBuild ? myTargetTypes : Collections.>emptyList(); - return new CompileScopeImpl(myTargetTypes, typesToForceBuild, myTargets, Collections.,Set>emptyMap()); + return new CompileScopeImpl(myTargetTypes, typesToForceBuild, myTargets, myFiles); } public CompileScopeTestBuilder all() {