Bug 131933 - grotty ClassCastException on referring to pointcut in generic type
Summary: grotty ClassCastException on referring to pointcut in generic type
Status: RESOLVED FIXED
Alias: None
Product: AspectJ
Classification: Tools
Component: Compiler (show other bugs)
Version: DEVELOPMENT   Edit
Hardware: PC Windows XP
: P3 normal (vote)
Target Milestone: 1.5.1   Edit
Assignee: Helen Beeken CLA
QA Contact:
URL:
Whiteboard:
Keywords:
Depends on:
Blocks:
 
Reported: 2006-03-15 09:46 EST by Andrew Clement CLA
Modified: 2012-04-03 16:00 EDT (History)
0 users

See Also:


Attachments
patch containing failing testcase (2.24 KB, patch)
2006-03-16 03:59 EST, Helen Beeken CLA
aclement: iplog+
Details | Diff
patch containing proposed fix (802 bytes, patch)
2006-03-16 04:02 EST, Helen Beeken CLA
aclement: iplog+
Details | Diff

Note You need to log in before you can comment on or make changes to this bug.
Description Andrew Clement CLA 2006-03-15 09:46:31 EST
import java.util.List;

public aspect Slide71 {
	before(): GenericType<String>.foo() {}
	before(): GenericType<MyList>.foo() {}
	//before(): GenericType.foo() {}
}
	
class GenericType<T> {
	public pointcut foo(): execution(* T.*(..));
}

that programs gives:  (because MyList is not a known type)

java.lang.ClassCastException
at org.aspectj.weaver.patterns.TypePattern.resolveExactType(TypePattern.java:193)
at org.aspectj.weaver.patterns.ReferencePointcut.resolveBindings(ReferencePointcut.java:130)
at org.aspectj.weaver.patterns.Pointcut.resolve(Pointcut.java:194)
at org.aspectj.ajdt.internal.compiler.ast.PointcutDesignator.finishResolveTypes(PointcutDesignator.java:84)
at org.aspectj.ajdt.internal.compiler.ast.AdviceDeclaration.resolveStatements(AdviceDeclaration.java:118)
at org.aspectj.org.eclipse.jdt.internal.compiler.ast.AbstractMethodDeclaration.resolve(AbstractMethodDeclaration.java:400)
at org.aspectj.org.eclipse.jdt.internal.compiler.ast.TypeDeclaration.resolve(TypeDeclaration.java:1088)
at org.aspectj.ajdt.internal.compiler.ast.AspectDeclaration.resolve(AspectDeclaration.java:116)
at org.aspectj.org.eclipse.jdt.internal.compiler.ast.TypeDeclaration.resolve(TypeDeclaration.java:1137)
at org.aspectj.org.eclipse.jdt.internal.compiler.ast.CompilationUnitDeclaration.resolve(CompilationUnitDeclaration.java:305)
at org.aspectj.org.eclipse.jdt.internal.compiler.Compiler.process(Compiler.java:514)
at org.aspectj.org.eclipse.jdt.internal.compiler.Compiler.compile(Compiler.java:329)
at org.aspectj.ajdt.internal.core.builder.AjBuildManager.performCompilation(AjBuildManager.java:843)
at org.aspectj.ajdt.internal.core.builder.AjBuildManager.doBuild(AjBuildManager.java:268)
at org.aspectj.ajdt.internal.core.builder.AjBuildManager.incrementalBuild(AjBuildManager.java:170)
at org.aspectj.ajde.internal.CompilerAdapter.compile(CompilerAdapter.java:117)
at org.aspectj.ajde.internal.AspectJBuildManager$CompilerThread.run(AspectJBuildManager.java:191)

ClassCastException thrown: org.aspectj.weaver.patterns.WildTypePattern
Comment 1 Helen Beeken CLA 2006-03-16 03:59:39 EST
Created attachment 36393 [details]
patch containing failing testcase

Apply this patch to the tests project.
Comment 2 Helen Beeken CLA 2006-03-16 04:02:16 EST
Created attachment 36394 [details]
patch containing proposed fix

Apply this patch to the weaver project.

The fix is to return ResolvedType.MISSING if the typePattern isn't an ExactTypePattern. This causes the supplied testcase to produce a compiler error of the form "can't bind type name 'MyList'".
Comment 3 Andrew Clement CLA 2006-03-16 05:59:23 EST
patches committed.
Comment 4 Helen Beeken CLA 2006-03-20 11:07:22 EST
Closing as fixed - fix available in latest build.