[JSR308] Creating new annotated types.

Niko Matsakis niko at alum.mit.edu
Wed Nov 12 05:19:06 EST 2008


I am having some trouble finding the best way to introduce a  
particular feature into my checker.  I would like to have a special  
static method that is recognized by my type checker (essentially  
emulating a keyword).  This method is called "free()" and is declared  
as a static method.  When this method is invoked, the  
AnnotatedTypeFactory needs to make special changes to the type.

Unfortunately, I find it very hard to manipulate  
AnnotatedTypeMirrors.  It's relatively easy to add or remove  
annotations, but to make other sorts of changes seems to be next to  
impossible.  Most of the required methods are either only available  
within the package or simply not available.  In my case, the method is  
declared as:

	public static <X> X free(X ptr) { return ptr; }

What I want to do is to change the annotations on the return type.   
Because the return type and the argument type are linked, however, any  
changes I make there are also reflected on the parameter type, which  
is no good.  Ideally, what I'd like to do is simply to create a brand  
new executable type with the required values, but I can't do that  
without modifying the framework.  The constructor, after all, is  
package protected, as is setReturnType().

I like the idea of immutable AnnotatedTypeMirrors, so rather than make  
the mutators public, I am currently adding a deep cloning visitor to  
the framework that should solve my problem.  It does a deep clone of a  
type with appropriate overloadable methods at each point.  However, I  
thought I'd fire off an e-mail in case I'm missing some obvious way of  
doing things.


More information about the JSR308 mailing list