I have encountered a weird OutOfMemoryError problem. It appears to be some kind of infinite loop in Java's class file parsing. However, it only occurs after running the AspectJ compiler over the class.
So I'm not sure who is at fault... AspectJ or Java itself? I'm using AspectJ 1.6.10 and java 1.6.0.37: java version "1.6.0_37" Java(TM) SE Runtime Environment (build 1.6.0_37-b06-434-11M3909) Java HotSpot(TM) 64-Bit Server VM (build 20.12-b01-434, mixed mode) I've created a test case available here<http://people.freebsd.org/~archie/bug.tgz>as an ant project. It is pretty simple, triggered by this class: public class Bug { @org.springframework.beans.factory.annotation.Configurable public static class ClassA<T extends Interface1 & Interface2> { } public static class ClassB extends ClassA<ClassB> implements Interface1, Interface2 { } public interface Interface1 { } public interface Interface2 { } public static void main(String[] args) throws Exception { System.out.println(ClassB.class.getGenericSuperclass()); } } Compile that program, run the AspectJ compiler over it to weave the @Configurable annotation, and then run it. I get this result after a several second pause: Exception in thread "main" java.lang.OutOfMemoryError: Java heap space at java.util.Arrays.copyOf(Arrays.java:2760) at java.util.Arrays.copyOf(Arrays.java:2734) at java.util.ArrayList.ensureCapacity(ArrayList.java:167) at java.util.ArrayList.add(ArrayList.java:351) at sun.reflect.generics.parser.SignatureParser.parseFormalTypeParameters(SignatureParser.java:190) at sun.reflect.generics.parser.SignatureParser.parseZeroOrMoreFormalTypeParameters(SignatureParser.java:177) at sun.reflect.generics.parser.SignatureParser.parseClassSignature(SignatureParser.java:171) at sun.reflect.generics.parser.SignatureParser.parseClassSig(SignatureParser.java:126) at sun.reflect.generics.repository.ClassRepository.parse(ClassRepository.java:34) at sun.reflect.generics.repository.ClassRepository.parse(ClassRepository.java:23) at sun.reflect.generics.repository.AbstractRepository.<init>(AbstractRepository.java:56) at sun.reflect.generics.repository.GenericDeclRepository.<init>(GenericDeclRepository.java:30) at sun.reflect.generics.repository.ClassRepository.<init>(ClassRepository.java:30) at sun.reflect.generics.repository.ClassRepository.make(ClassRepository.java:47) at java.lang.Class.getGenericInfo(Class.java:2254) at java.lang.Class.getTypeParameters(Class.java:621) at sun.reflect.generics.reflectiveObjects.ParameterizedTypeImpl.validateConstructorArguments(ParameterizedTypeImpl.java:39) at sun.reflect.generics.reflectiveObjects.ParameterizedTypeImpl.<init>(ParameterizedTypeImpl.java:35) at sun.reflect.generics.reflectiveObjects.ParameterizedTypeImpl.make(ParameterizedTypeImpl.java:77) at sun.reflect.generics.factory.CoreReflectionFactory.makeParameterizedType(CoreReflectionFactory.java:86) at sun.reflect.generics.visitor.Reifier.visitClassTypeSignature(Reifier.java:122) at sun.reflect.generics.tree.ClassTypeSignature.accept(ClassTypeSignature.java:31) at sun.reflect.generics.repository.ClassRepository.getSuperclass(ClassRepository.java:66) at java.lang.Class.getGenericSuperclass(Class.java:677) at Bug.main(Bug.java:18) Any ideas? Thanks, -Archie -- Archie L. Cobbs
_______________________________________________ aspectj-users mailing list aspectj-users@eclipse.org https://dev.eclipse.org/mailman/listinfo/aspectj-users