when processing dependencies on deleted classes, do not affect already compiled files

This commit is contained in:
Eugene Zhuravlev
2014-11-04 17:29:02 +01:00
parent a1b56a7909
commit 5ec5fe4885
2 changed files with 22 additions and 13 deletions
@@ -7,9 +7,3 @@ End of files
Compiling files:
moduleB/src/com/ppp/B.java
End of files
Cleaning output files:
out/com/ppp/B.class
End of files
Compiling files:
moduleB/src/com/ppp/B.java
End of files
@@ -722,22 +722,37 @@ public class Mappings {
}
}
void affectAll(final int className, @NotNull final File sourceFile, final Collection<File> affectedFiles, @Nullable final DependentFilesFilter filter) {
void affectAll(final int className, @NotNull final File sourceFile, final Collection<File> affectedFiles, final Collection<File> alreadyCompiledFiles, @Nullable final DependentFilesFilter filter) {
final TIntHashSet dependants = myClassToClassDependency.get(className);
if (dependants != null) {
dependants.forEach(new TIntProcedure() {
@Override
public boolean execute(int depClass) {
final Collection<File> allSources = myClassToSourceFile.get(depClass);
if (allSources != null) {
if (allSources == null || allSources.isEmpty()) {
return true;
}
boolean shouldAffect = false;
for (File depFile : allSources) {
if (FileUtil.filesEqual(depFile, sourceFile)) {
continue; // skipping self-dependencies
}
if (!alreadyCompiledFiles.contains(depFile) && (filter == null || filter.accept(depFile))) {
// if at least one of the source files associated with the class is affected, all other associated sources should be affected as well
shouldAffect = true;
break;
}
}
if (shouldAffect) {
for (File depFile : allSources) {
if (!FileUtil.filesEqual(depFile, sourceFile)) {
if (filter == null || filter.accept(depFile)) {
affectedFiles.add(depFile);
}
affectedFiles.add(depFile);
}
}
}
return true;
}
});
@@ -1062,7 +1077,7 @@ public class Mappings {
if (classes != null) {
for (ClassRepr c : classes) {
debug("Affecting usages of removed class ", c.name);
affectAll(c.name, sourceFile, myAffectedFiles, myFilter);
affectAll(c.name, sourceFile, myAffectedFiles, myCompiledFiles, myFilter);
}
}
}
@@ -1828,7 +1843,7 @@ public class Mappings {
debug("Adding usages of class ", c.name);
state.myAffectedUsages.add(c.createUsage());
debug("Affecting usages of removed class ", c.name);
affectAll(c.name, fileName, myAffectedFiles, myFilter);
affectAll(c.name, fileName, myAffectedFiles, myCompiledFiles, myFilter);
}
}
debug("End of removed classes processing.");