mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
when processing dependencies on deleted classes, do not affect already compiled files
This commit is contained in:
-6
@@ -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.");
|
||||
|
||||
Reference in New Issue
Block a user