]> source.dussan.org Git - aspectj.git/commitdiff
Store only weaved class names in the generatedClasses map
authorUri Simchoni <urisimchoni@gmail.com>
Mon, 5 Feb 2024 06:34:35 +0000 (08:34 +0200)
committerAlexander Kriegisch <Alexander@Kriegisch.name>
Thu, 8 Feb 2024 05:03:50 +0000 (12:03 +0700)
The generatedClasses map contained both keys of woven classes that had
generated classes associated with them, and the keys of the generated
classes themselves. It seems like this map is never consulted for the
generated class key - the generated class is generated from within the
context of woven class loading / retransformation, and thus no transform
event is generated for it by the JVM. Because of that, we do not need to
guard against re-weaving it. Other uses of generatedClasses map are for
full/empty tests, where the woven class key is sufficient. This change
simplifies deletion of a class because we do not have to look for its
associated generated classes.

Relates to #279.

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

index 9d478633fec7a45dc51a1937a2c6ea4f7afbcb05..d0484f6b405c35959c1aa8aa76fd3d5c50e6c402 100644 (file)
@@ -1008,21 +1008,8 @@ public class ClassLoaderWeavingAdaptor extends WeavingAdaptor {
         * @param className a slashed classname (e.g. com/foo/Bar)
         */
        public void flushGeneratedClassesFor(String className) {
-               try {
-                       String dottedClassName = className.replace('/', '.');
-                       String dottedClassNameDollar = dottedClassName+"$"; // to pickup inner classes
-                       Iterator<Map.Entry<String, IUnwovenClassFile>> iter = generatedClasses.entrySet().iterator();
-                       while (iter.hasNext()) {
-                               Entry<String, IUnwovenClassFile> next = iter.next();
-                               String existingGeneratedName = next.getKey();
-                               if (existingGeneratedName.equals(dottedClassName) ||
-                                               existingGeneratedName.startsWith(dottedClassNameDollar)) {
-                                       iter.remove();
-                               }
-                       }
-               } catch (Throwable t) {
-                       new RuntimeException("Unexpected problem tidying up generated classes for "+className,t).printStackTrace();
-               }
+               String dottedClassName = className.replace('/', '.');
+               generatedClasses.remove(dottedClassName);
        }
 
        private static final Object lock = new Object();
index 966143fc1156982286db8c7cd526bfdca30b47be..ee9c82dd8e4b050c56a6d3336a70cca3e8e6f999 100644 (file)
@@ -936,7 +936,6 @@ public class WeavingAdaptor implements IMessageContext {
                                                        lacache.addGeneratedClassesNames(wovenClass.getClassName(), wovenClass.getBytes(), result.getClassName());
                                                }
 
-                                               generatedClasses.put(className, result);
                                                generatedClasses.put(wovenClass.getClassName(), wovenClass);
                                                generatedClassHandler.acceptClass(className, null, resultBytes);
                                        }