Bug 167197 - Compiler crashes with a ClassCastException when weaving generic classes parameterized with an array type
Summary: Compiler crashes with a ClassCastException when weaving generic classes param...
Status: RESOLVED FIXED
Alias: None
Product: AspectJ
Classification: Tools
Component: Compiler (show other bugs)
Version: 1.5.3RC1   Edit
Hardware: PC Linux
: P2 normal (vote)
Target Milestone: 1.6.0 RC1   Edit
Assignee: aspectj inbox CLA
QA Contact:
URL:
Whiteboard:
Keywords:
Depends on:
Blocks:
 
Reported: 2006-12-07 20:55 EST by Logan Bowers CLA
Modified: 2008-03-17 13:03 EDT (History)
3 users (show)

See Also:


Attachments
Java file that breaks the compiler (324 bytes, text/x-java)
2006-12-07 20:56 EST, Logan Bowers CLA
no flags Details
Aspect that breaks the class (214 bytes, application/octet-stream)
2006-12-07 20:59 EST, Logan Bowers CLA
no flags Details

Note You need to log in before you can comment on or make changes to this bug.
Description Logan Bowers CLA 2006-12-07 20:55:47 EST
The attached class files cause the aspectJ compiler v1.5.3 to crash upon compilation with the following error:  

logan@logan01 ~/zillow/src/code/z4/RandomStuff $ ajc -1.5 AspectBreaker.java TestAspect.aj 
trouble in: 
public class AspectBreaker extends java.util.ArrayList:
  private static final long serialVersionUID = 1
  public void <init>()    org.aspectj.weaver.MethodDeclarationLineNumber: 7:157
:
                    ALOAD_0     // LAspectBreaker; this   (line 7)
                    INVOKESPECIAL java.util.ArrayList.<init> ()V
    constructor-execution(void AspectBreaker.<init>())
    |               RETURN   (line 8)
    constructor-execution(void AspectBreaker.<init>())
  end public void <init>()

  public boolean test(ICounterValue[])    org.aspectj.weaver.MethodDeclarationLineNumber: 10:201
:
    method-execution(boolean AspectBreaker.test(ICounterValue[]))
    |               ALOAD_0     // LAspectBreaker; this   (line 11)
    | method-call(int AspectBreaker.size())
    | |             INVOKEVIRTUAL AspectBreaker.size ()I
    | method-call(int AspectBreaker.size())
    |               POP
    |               ICONST_0   (line 13)
    |               IRETURN
    method-execution(boolean AspectBreaker.test(ICounterValue[]))
  end public boolean test(ICounterValue[])

end public class AspectBreaker


Exception thrown from AspectJ 1.5.3

This might be logged as a bug already -- find current bugs at
  http://bugs.eclipse.org/bugs/buglist.cgi?product=AspectJ&component=Compiler

Bugs for exceptions thrown have titles File:line from the top stack, 
e.g., "SomeFile.java:243"

If you don't find the exception below in a bug, please add a new bug
at http://bugs.eclipse.org/bugs/enter_bug.cgi?product=AspectJ
To make the bug a priority, please include a test program
that can reproduce this exception.
org.aspectj.weaver.ResolvedType$Array

when weaving classes 
when weaving 
when batch building BuildConfig[null] #Files=2
org.aspectj.weaver.ResolvedType$Array
java.lang.ClassCastException: org.aspectj.weaver.ResolvedType$Array
        at org.aspectj.weaver.BoundedReferenceType.parameterize(BoundedReferenceType.java:64)
        at org.aspectj.weaver.ResolvedType.parameterize(ResolvedType.java:1878)
        at org.aspectj.weaver.ResolvedMemberImpl.parameterize(ResolvedMemberImpl.java:682)
        at org.aspectj.weaver.ResolvedMemberImpl.parameterizedWith(ResolvedMemberImpl.java:644)
        at org.aspectj.weaver.ResolvedMemberImpl.parameterizedWith(ResolvedMemberImpl.java:597)
        at org.aspectj.weaver.ReferenceType.getDeclaredMethods(ReferenceType.java:512)
        at org.aspectj.weaver.ResolvedType$4.get(ResolvedType.java:226)
        at org.aspectj.weaver.Iterators$3$1.hasNext(Iterators.java:118)
        at org.aspectj.weaver.Iterators$5.hasNext(Iterators.java:171)
        at org.aspectj.weaver.Iterators$3.hasNext(Iterators.java:128)
        at org.aspectj.weaver.ResolvedType.lookupMember(ResolvedType.java:346)
        at org.aspectj.weaver.ResolvedType.lookupMethod(ResolvedType.java:327)
        at org.aspectj.weaver.World.resolve(World.java:530)
        at org.aspectj.weaver.MemberImpl.resolve(MemberImpl.java:96)
        at org.aspectj.weaver.JoinPointSignatureIterator.addSignaturesUpToFirstDefiningMember(JoinPointSignatureIterator.java:109)
        at org.aspectj.weaver.JoinPointSignatureIterator.<init>(JoinPointSignatureIterator.java:51)
        at org.aspectj.weaver.MemberImpl.getJoinPointSignatures(MemberImpl.java:961)
        at org.aspectj.weaver.patterns.SignaturePattern.matches(SignaturePattern.java:286)
        at org.aspectj.weaver.patterns.KindedPointcut.matchInternal(KindedPointcut.java:106)
        at org.aspectj.weaver.patterns.Pointcut.match(Pointcut.java:146)
        at org.aspectj.weaver.patterns.AndPointcut.matchInternal(AndPointcut.java:52)
        at org.aspectj.weaver.patterns.Pointcut.match(Pointcut.java:146)
        at org.aspectj.weaver.ShadowMunger.match(ShadowMunger.java:75)
        at org.aspectj.weaver.Advice.match(Advice.java:112)
        at org.aspectj.weaver.bcel.BcelAdvice.match(BcelAdvice.java:118)
        at org.aspectj.weaver.bcel.BcelClassWeaver.match(BcelClassWeaver.java:2806)
        at org.aspectj.weaver.bcel.BcelClassWeaver.matchInvokeInstruction(BcelClassWeaver.java:2768)
        at org.aspectj.weaver.bcel.BcelClassWeaver.match(BcelClassWeaver.java:2506)
        at org.aspectj.weaver.bcel.BcelClassWeaver.match(BcelClassWeaver.java:2332)
        at org.aspectj.weaver.bcel.BcelClassWeaver.weave(BcelClassWeaver.java:494)
        at org.aspectj.weaver.bcel.BcelClassWeaver.weave(BcelClassWeaver.java:119)
        at org.aspectj.weaver.bcel.BcelWeaver.weave(BcelWeaver.java:1612)
        at org.aspectj.weaver.bcel.BcelWeaver.weaveWithoutDump(BcelWeaver.java:1563)
        at org.aspectj.weaver.bcel.BcelWeaver.weaveAndNotify(BcelWeaver.java:1341)
        at org.aspectj.weaver.bcel.BcelWeaver.weave(BcelWeaver.java:1161)
        at org.aspectj.ajdt.internal.compiler.AjPipeliningCompilerAdapter.weaveQueuedEntries(AjPipeliningCompilerAdapter.java:455)
        at org.aspectj.ajdt.internal.compiler.AjPipeliningCompilerAdapter.queueForWeaving(AjPipeliningCompilerAdapter.java:392)
        at org.aspectj.ajdt.internal.compiler.AjPipeliningCompilerAdapter.afterProcessing(AjPipeliningCompilerAdapter.java:380)
        at org.aspectj.ajdt.internal.compiler.CompilerAdapter.ajc$after$org_aspectj_ajdt_internal_compiler_CompilerAdapter$5$6b855184(CompilerAdapter.aj:98)
        at org.aspectj.org.eclipse.jdt.internal.compiler.Compiler.process(Compiler.java:533)
        at org.aspectj.org.eclipse.jdt.internal.compiler.Compiler.compile(Compiler.java:329)
        at org.aspectj.ajdt.internal.core.builder.AjBuildManager.performCompilation(AjBuildManager.java:906)
        at org.aspectj.ajdt.internal.core.builder.AjBuildManager.doBuild(AjBuildManager.java:260)
        at org.aspectj.ajdt.internal.core.builder.AjBuildManager.batchBuild(AjBuildManager.java:176)
        at org.aspectj.ajdt.ajc.AjdtCommand.doCommand(AjdtCommand.java:112)
        at org.aspectj.ajdt.ajc.AjdtCommand.runCommand(AjdtCommand.java:60)
        at org.aspectj.tools.ajc.Main.run(Main.java:378)
        at org.aspectj.tools.ajc.Main.runMain(Main.java:253)
        at org.aspectj.tools.ajc.Main.main(Main.java:88)

Dec 7, 2006 5:43:33 PM org.aspectj.weaver.tools.Jdk14Trace info
INFO: Dumping to /home/logan/zillow/src/code/z4/RandomStuff/./ajcore.20061207.174333.963.txt

1 fail|abort
logan@logan01 ~/zillow/src/code/z4/RandomStuff $
Comment 1 Logan Bowers CLA 2006-12-07 20:56:52 EST
Created attachment 55292 [details]
Java file that breaks the compiler
Comment 2 Logan Bowers CLA 2006-12-07 20:59:42 EST
Created attachment 55293 [details]
Aspect that breaks the class
Comment 3 Andrew Clement CLA 2007-10-30 04:47:01 EDT
testcase added, commented out in Ajc154Tests.  The problem here is due to the special type ResolvedType$Array which is used to represent array types.  It is not a descendant of ReferenceType and so we get into problems.
Comment 4 Andrew Clement CLA 2008-03-17 13:03:26 EDT
I have fixed this - I made the Array type a subtype of ReferenceType rather than ResolvedType.

will be in dev builds shortly.