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

Reply via email to