Skip to content

Commit 8c88314

Browse files
committed
Revert WeavingAdaptor generated class map optimisation
This was introduced in commit 8a4aa03 of PR #278 contribution as part of the #279 fix. The contributor thought that the generated closure class entries were never used, but in fact AJDT class OSGiWeavingAdaptor relies on the presence of those entries. To the best of my present knowledge, it looks as if this change was the root cause of eclipse-aspectj/ajdt#57. Therefore, I reverted it, simultaneously refactoring Iterator::remove usage to delete entries from the map to Collection::removeIf. Signed-off-by: Alexander Kriegisch <[email protected]>
1 parent a97bb76 commit 8c88314

File tree

2 files changed

+11
-2
lines changed

2 files changed

+11
-2
lines changed

loadtime/src/main/java/org/aspectj/weaver/loadtime/ClassLoaderWeavingAdaptor.java

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1008,8 +1008,16 @@ public void flushGeneratedClasses() {
10081008
* @param className a slashed classname (e.g. com/foo/Bar)
10091009
*/
10101010
public void flushGeneratedClassesFor(String className) {
1011-
String dottedClassName = className.replace('/', '.');
1012-
generatedClasses.remove(dottedClassName);
1011+
try {
1012+
String dottedClassName = className.replace('/', '.');
1013+
String dottedClassNameDollar = dottedClassName + "$"; // to pick up inner classes
1014+
generatedClasses.entrySet().removeIf(entry -> {
1015+
String generatedClassName = entry.getKey();
1016+
return generatedClassName.equals(dottedClassName) || generatedClassName.startsWith(dottedClassNameDollar);
1017+
});
1018+
} catch (Throwable t) {
1019+
new RuntimeException("Unexpected problem tidying up generated classes for " + className, t).printStackTrace();
1020+
}
10131021
}
10141022

10151023
private static final Object lock = new Object();

weaver/src/main/java/org/aspectj/weaver/tools/WeavingAdaptor.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -939,6 +939,7 @@ public void acceptResult(IUnwovenClassFile result) {
939939
lacache.addGeneratedClassesNames(wovenClass.getClassName(), wovenClass.getBytes(), result.getClassName());
940940
}
941941

942+
generatedClasses.put(className, result);
942943
generatedClasses.put(wovenClass.getClassName(), wovenClass);
943944
generatedClassHandler.acceptClass(className, null, resultBytes);
944945
}

0 commit comments

Comments
 (0)