[LLVMdev] vmkit java annotations

Harris BAKIRAS h.bakiras at gmail.com
Mon Jun 17 10:10:58 PDT 2013


What classpath implementation are you using ? GNUClasspath or OpenJDK ?

Harris Bakiras

On 06/17/2013 03:57 PM, Alexandru Ionut Diaconescu wrote:
> Hello Harris,
>
> Thank you for your answer. So it is there a way of annotating 
> variables in Java Code, so I can see them into LLVM bytecode?
>
> Thank you !
>
>
> On Mon, Jun 17, 2013 at 3:54 PM, Harris BAKIRAS <h.bakiras at gmail.com 
> <mailto:h.bakiras at gmail.com>> wrote:
>
>     Hello Alexandru,
>
>     No you did nothing wrong.
>
>     We are using our own data structure to describe annotations in J3.
>     So it is normal that you can not see your Java annotations inside
>     the LLVM bytecode produced.
>     If I remember well, our implementation of annotations do not rely
>     on LLVM annotations.
>
>     Regards,
>
>     Harris Bakiras
>
>     On 06/17/2013 02:19 PM, Alexandru Ionut Diaconescu wrote:
>>     Hello everyone,
>>
>>     I am able to work very well with annotations in C/C++, by using
>>     __attribute__((annotate("MYANNOTATION"))) static int a; . Inside
>>     the LLVM bytecode I have @llvm.global.annotations and
>>     @llvm.var.annotation.
>>
>>     However, I was trying to test annotations also in Java, with
>>     VMKit. These are the commands that I run:
>>
>>     javac -Xlint -g -O Main.java
>>     ../Release+Asserts/bin/vmjc Main
>>     ../Release+Asserts/bin/j3 Main
>>     ../../llvm_new/Release+Asserts/bin/llvm-dis < Main.bc > Main_assembly
>>
>>     My small program is :
>>
>>     import java.lang.annotation.ElementType;
>>     import java.lang.annotation.Retention;
>>     import java.lang.annotation.RetentionPolicy;
>>     import java.lang.annotation.Target;
>>     import java.lang.reflect.Method;
>>
>>     @Target(ElementType.METHOD)
>>     @Retention(RetentionPolicy.RUNTIME)
>>     @interface Red {
>>         String info() default "";
>>     }
>>
>>
>>     class Annotated {
>>         @Red(info = "AWESOME")
>>         public void foo(String myParam) {
>>             System.out.println("This is " + myParam);
>>         }
>>     }
>>
>>
>>     class TestAnnotationParser {
>>         public void parse(Class clazz) throws Exception {
>>             Method[] methods = clazz.getMethods();
>>
>>
>>
>>         for (Method method : methods) {
>>             if (method.isAnnotationPresent(Red.class)) {
>>                 Red test = method.getAnnotation(Red.class);
>>                 String info = test.info <http://test.info>();
>>
>>                 if ("AWESOME".equals(info)) {
>>                      System.out.println("info is awesome!");
>>                      // try to invoke the method with param
>>                      method.invoke(
>>     Annotated.class.newInstance(),
>>                         info
>>                      );
>>                 }
>>             }
>>         }
>>     }
>>
>>
>>     }
>>
>>
>>     public class Main {
>>         public static void main(String[] args) throws Exception {
>>             TestAnnotationParser parser = new TestAnnotationParser();
>>             parser.parse(Annotated.class);
>>         }
>>     }
>>
>>
>>     However, I cannot find the annotations in the bytecode. It is
>>     something that I did wrong?
>>
>>     Thank you in advance !
>>
>>
>>
>>     _______________________________________________
>>     LLVM Developers mailing list
>>     LLVMdev at cs.uiuc.edu  <mailto:LLVMdev at cs.uiuc.edu>          http://llvm.cs.uiuc.edu
>>     http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
>
>
>
>
> -- 
> Best regards,
> Alexandru Ionut Diaconescu

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-dev/attachments/20130617/5d0b0603/attachment.html>


More information about the llvm-dev mailing list