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);
@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
private final boolean myForceBuild;
private final Set<BuildTargetType<?>> myTargetTypes = new HashSet<BuildTargetType<?>>();
private final Set<BuildTarget<?>> myTargets = new HashSet<BuildTarget<?>>();
+ private LinkedHashMap<BuildTarget<?>, Set<File>> myFiles = new LinkedHashMap<BuildTarget<?>, Set<File>>();
public static CompileScopeTestBuilder rebuild() {
return new CompileScopeTestBuilder(true);
return this;
}
+ public CompileScopeTestBuilder file(BuildTarget<?> target, String path) {
+ Set<File> files = myFiles.get(target);
+ if (files == null) {
+ files = new LinkedHashSet<File>();
+ myFiles.put(target, files);
+ }
+ files.add(new File(path));
+ return this;
+ }
+
public CompileScope build() {
Collection<BuildTargetType<?>> typesToForceBuild = myForceBuild ? myTargetTypes : Collections.<BuildTargetType<?>>emptyList();
- return new CompileScopeImpl(myTargetTypes, typesToForceBuild, myTargets, Collections.<BuildTarget<?>,Set<File>>emptyMap());
+ return new CompileScopeImpl(myTargetTypes, typesToForceBuild, myTargets, myFiles);
}
public CompileScopeTestBuilder all() {