test failures

Jonathan Gibbons jonathan.gibbons at oracle.com
Thu Apr 25 19:30:18 PDT 2013


On 04/24/2013 09:51 PM, Jonathan Gibbons wrote:
> tools/javac/processing/model/type/BasicAnnoTests.java

This test is failing because the internal data model for type 
annotations within javac is inconsistent.

The broken test case is this one (and maybe others like it):

>     @Test(posn=1, annoType=TA.class, expect="4")
>     public int m1(@TA(4) float a) throws Exception { return 0; }

If you look at the ExecutableElement for m1, you can navigate to the 
VariableElement for the parameter "a", and from there get to the type 
annotations on the type used for "a".  The debug output from the test 
confirms the existence of @TA(4) on "float".

But there's a second way to get to that instance of "float".

 From the ExecutableElement, you can get an ExecutableType using 
Element.asType(), and from the ExecutableType, you can get the 
ParameterTypes using getParameterTypes().  It seems intuitively 
reasonable to expect that the type of the first parameter obtained in 
this manner should be the annotated type "@TA(4) float".  The debug 
output from the test indicates there are no type annotations here, and 
so the test fails.

Generally speaking, I think all the following pairs should be 
equivalent^[1,2] , for any ExecutableElement ee:

using ExecutableElement
	using ExecutableType
ee.getReceiverType()
	ee.asType().getReceiverType()
ee.getReturnType()
	ee.asType().getReturnType()
ee.getParameters().get(i).asType()
	ee.asType().getParameterTypes().get(i)
ee.getThrownTypes().get(i)
	ee.asType().getThrownTypes().get(i)
ee.getTypeParameters().get(i).asType()
	ee.asType().getTypeParameters().get(i)


[1] where "equivalent" means that the types and annotations on those 
types should match: something like a recursive evaluation of
         Types.isSameType(a, b) && 
Objects.equals(a.getAnnotationMirrors(), b.getAnnotationMirrors())

[2] In practice, I would expect the values to be ==, but I would not 
mandate that.

The BasicAnnoTests covers some of these cases, but should be extended to 
cover all of them.

-- Jon






-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mail.openjdk.java.net/pipermail/type-annotations-dev/attachments/20130425/06b9b5f9/attachment-0001.html 


More information about the type-annotations-dev mailing list