Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read this important communication.

Bug 359282

Summary: Using an annotation record as a type on a field causes class cast exception
Product: z_Archived Reporter: Paul Harmon <pharmon>
Component: EDTAssignee: Project Inbox <edt.mofmodel-inbox>
Status: CLOSED FIXED QA Contact:
Severity: normal    
Priority: P1    
Version: unspecified   
Target Milestone: ---   
Hardware: PC   
OS: Windows XP   
Whiteboard:

Description Paul Harmon CLA 2011-09-28 13:40:56 EDT
compile the following testcase (note that the type ID is an annotation)


handler Parent type Entity
	id int {@ID};           
	orphan orphan;
end

handler orphan type Entity
	field1 id;
end


will produce a stacktrace:

Exception in thread "main" org.eclipse.edt.compiler.internal.core.builder.BuildException: java.lang.ClassCastException: org.eclipse.edt.mof.egl.lookup.ProxyPart incompatible with org.eclipse.edt.mof.EClass
	at org.eclipse.edt.compiler.AbstractProcessingQueue.process(AbstractProcessingQueue.java:189)
	at org.eclipse.edt.compiler.AbstractProcessingQueue.process(AbstractProcessingQueue.java:154)
	at org.eclipse.edt.compiler.tools.EGLC.compile(EGLC.java:135)
	at org.eclipse.edt.compiler.tools.EGL2IR.compile(EGL2IR.java:89)
	at org.eclipse.edt.compiler.tools.EGL2IR.main(EGL2IR.java:54)
	at org.eclipse.edt.compiler.tools.EGL2IR.main(EGL2IR.java:47)
Caused by: java.lang.ClassCastException: org.eclipse.edt.mof.egl.lookup.ProxyPart incompatible with org.eclipse.edt.mof.EClass
	at org.eclipse.edt.compiler.internal.egl2mof.Egl2MofBase.mofValueFrom(Egl2MofBase.java:730)
	at org.eclipse.edt.compiler.internal.egl2mof.Egl2MofBase.mofValueFrom(Egl2MofBase.java:695)
	at org.eclipse.edt.compiler.internal.egl2mof.Egl2MofMember.processSettings(Egl2MofMember.java:498)
	at org.eclipse.edt.compiler.internal.egl2mof.Egl2Mof.processSettings(Egl2Mof.java:1)
	at org.eclipse.edt.compiler.internal.egl2mof.Egl2MofMember.addInitializers(Egl2MofMember.java:816)
	at org.eclipse.edt.compiler.internal.egl2mof.Egl2Mof.addInitializers(Egl2Mof.java:1)
	at org.eclipse.edt.compiler.internal.egl2mof.Egl2MofMember.addInitializers(Egl2MofMember.java:786)
	at org.eclipse.edt.compiler.internal.egl2mof.Egl2Mof.addInitializers(Egl2Mof.java:1)
	at org.eclipse.edt.compiler.internal.egl2mof.Egl2MofMember.visit(Egl2MofMember.java:133)
	at org.eclipse.edt.compiler.internal.egl2mof.Egl2Mof.visit(Egl2Mof.java:1)
	at org.eclipse.edt.compiler.core.ast.ClassDataDeclaration.accept(ClassDataDeclaration.java:88)
	at org.eclipse.edt.compiler.internal.egl2mof.Egl2MofPart.handleContents(Egl2MofPart.java:679)
	at org.eclipse.edt.compiler.internal.egl2mof.Egl2MofPart.defaultHandleVisitPart(Egl2MofPart.java:384)
	at org.eclipse.edt.compiler.internal.egl2mof.Egl2MofPart.visit(Egl2MofPart.java:199)
	at org.eclipse.edt.compiler.internal.egl2mof.Egl2Mof.visit(Egl2Mof.java:1)
	at org.eclipse.edt.compiler.core.ast.Handler.accept(Handler.java:55)
	at org.eclipse.edt.compiler.internal.egl2mof.Egl2Mof.convert(Egl2Mof.java:160)
	at org.eclipse.edt.compiler.Processor.createIRFromBoundAST2(Processor.java:164)
	at org.eclipse.edt.compiler.Processor.level03Compile(Processor.java:120)
	at org.eclipse.edt.compiler.AbstractProcessingQueue.process(AbstractProcessingQueue.java:171)
	... 5 more
Comment 1 Paul Harmon CLA 2011-11-10 14:27:25 EST
I have fixed this and added code to prevent the use of an annotation as a type of a field outside of another annotation record definition
Comment 2 Paul Harmon CLA 2011-11-18 09:23:37 EST
works now