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() {