[JSR308] Simple question regarding jsr308 compiler for localvariable annotation processing

Chester Chen CChen at ascentmedia.com
Wed Dec 17 12:13:46 EST 2008


Hi, Mahmood, 
    Thanks for the replay. 
    
    Here is my original problem, I am trying to generate resource bundles (.properties or .xml)   
    for easy of i18n. 

    In normal process, developer writes an exception, and then go to .properties to define the key and message, 
    and put the key to locate the mssage via Resource Bundle. 

    This process is not only error prone, but also cumbersom and not very efficient, may be some smart IDE can help, 
    but it still a slow and tidious process. And it breaks the developers thought flow. Usually developer simply don't do it and type
    the message directly into the Exception.


    I was thinking using annotation to automatically generate these properties files, so Developers doesn't need to
    to go to another properties file to edit. Since the key or error code is anther java variable, the chances of 
    put a wrong string are sigificant less than put an string litteral. 

    I started these experiments last year, first with JDK 5 APT, and pretty soon that I realize that I can't process annoation on local variables. 
    Then earlier this year, I switched to JDK 6 using Javac, hoping I could get lucky with JDK 6. Beside I have to change to the new 
    syntax and classes with JDK 6 javac, I did not get any improvement (except I have to develop a custome Ant task to expand Apache Ant Javac in order to   process annotation). 

    In both cases, since APT and JAVAC can't process anything inside method body, I have to put annotations on static fields. 
    This works in some degree. 

    Since there are usually a lot error messages, they stack up pretty long.To make the code readable, I have to refactor them into 
    a separate interface. 

    Even though I gaim some type-safty, but developer still has to go to another file to edit the error message. 
    I was hoping to be able put the error message annotation right at where developer wants to throw exception. 

    That's why I need local variable annoation processing. 

    With help the .XML format, one can even put other informations into xml (as comment), such java file name, line number, method name 
    so one can easily locate the file by looking at the resource .xml files.

   Since @ErrorMessage annotation is only for file generation, it's @Rentation is only on SOURCE.

   @Retention(RetentionPolicy.SOURCE)
   public @interface ErrorMessage {
     //rest of code
   }


   Hope I made this clear. If this is not the right way to do, please advice the correct way. 

   I am also pretty fuzzy about when the Annoation becomes an Visible Element, or an AnnotatedTypeTree. 


Thanks

Chester

 
     
    
 

    

-----Original Message-----
From: Mahmood Ali [mailto:mahmood at MIT.EDU]
Sent: Wednesday, December 17, 2008 6:25 AM
To: Chester Chen
Cc: jsr308 at lists.csail.mit.edu
Subject: Re: [JSR308] Simple question regarding jsr308 compiler for
localvariable annotation processing


Greetings Chester,

>     if (!testCondition(myTest))  {
>         @ErrorMessage(messageFormat="this is annoation on local  
> variable, value = {0} ";
>         String errorCode = "EC_101";
>         throw new MyException(errorCode, myValue);
>     }

I don't quite understand what the goal of processing the local  
variable annotations and if this is the right way of doing it.  In the  
provided example, at run-time the MyException handler does not have  
access to the error message.

So that the annotation becomes visible at Element level, the  
annotation needs to be meta-annotated with @Retention(CLASS) or  
@Retention(RUNTIME).

Regards,
Mahmood





More information about the JSR308 mailing list