Some annotation types work reflection
authorJaroslav Tulach <jaroslav.tulach@apidesign.org>
Sun, 03 Feb 2013 19:39:34 +0100
branchreflection
changeset 653bcdfc29fd004
parent 652 f095ea52f417
child 654 26a86cc00224
Some annotation types work
javap/src/main/java/org/apidesign/javap/AnnotationParser.java
vm/src/test/java/org/apidesign/vm4brwsr/ClassTest.java
vm/src/test/java/org/apidesign/vm4brwsr/Classes.java
     1.1 --- a/javap/src/main/java/org/apidesign/javap/AnnotationParser.java	Sun Feb 03 18:58:09 2013 +0100
     1.2 +++ b/javap/src/main/java/org/apidesign/javap/AnnotationParser.java	Sun Feb 03 19:39:34 2013 +0100
     1.3 @@ -131,7 +131,7 @@
     1.4              int enumN = dis.readUnsignedShort();
     1.5              String val = cd.stringValue(enumN, textual);
     1.6              if (textual) {
     1.7 -                val = '"' + val + '"';
     1.8 +                val = "vm." + attrType.substring(1, attrType.length() - 1).replace('/', '_') + "(false).constructor." + val;
     1.9              }
    1.10              visitAttr(typeName, attrName, attrType, val);
    1.11          } else {
     2.1 --- a/vm/src/test/java/org/apidesign/vm4brwsr/ClassTest.java	Sun Feb 03 18:58:09 2013 +0100
     2.2 +++ b/vm/src/test/java/org/apidesign/vm4brwsr/ClassTest.java	Sun Feb 03 19:39:34 2013 +0100
     2.3 @@ -90,6 +90,9 @@
     2.4      @Test public void jsArrayAnnotation() throws Exception {
     2.5          assertExec("Check array annotation", Classes.class, "getMarkerNicknames__Ljava_lang_String_2", Classes.getMarkerNicknames());
     2.6      }
     2.7 +    @Test public void jsEnumAnnotation() throws Exception {
     2.8 +        assertExec("Check enum annotation", Classes.class, "getMarkerE__Ljava_lang_String_2", Classes.getMarkerE());
     2.9 +    }
    2.10      @Test public void jsStringAnnotation() throws Exception {
    2.11          assertExec("Check class annotation", Classes.class, "getNamer__Ljava_lang_String_2Z", "my text", true);
    2.12      }
     3.1 --- a/vm/src/test/java/org/apidesign/vm4brwsr/Classes.java	Sun Feb 03 18:58:09 2013 +0100
     3.2 +++ b/vm/src/test/java/org/apidesign/vm4brwsr/Classes.java	Sun Feb 03 19:39:34 2013 +0100
     3.3 @@ -19,6 +19,7 @@
     3.4  
     3.5  import java.io.IOException;
     3.6  import java.lang.annotation.Annotation;
     3.7 +import java.lang.annotation.RetentionPolicy;
     3.8  import java.lang.reflect.Method;
     3.9  import java.net.MalformedURLException;
    3.10  import org.apidesign.bck2brwsr.core.JavaScriptBody;
    3.11 @@ -27,7 +28,7 @@
    3.12   *
    3.13   * @author Jaroslav Tulach <jtulach@netbeans.org>
    3.14   */
    3.15 -@ClassesMarker(number = 10, nicknames = { "Ten", "Deset" })
    3.16 +@ClassesMarker(number = 10, nicknames = { "Ten", "Deset" }, count = ClassesMarker.E.TWO)
    3.17  @ClassesNamer(name = "my text")
    3.18  public class Classes {
    3.19      public static String nameOfIO() {
    3.20 @@ -40,6 +41,7 @@
    3.21      
    3.22      private static final Class<?> PRELOAD = Runnable.class;
    3.23      private static final Class<?> PRELOAD2 = ClassesMarker.E.class;
    3.24 +    private static final Class<?> PRELOAD3 = RetentionPolicy.class;
    3.25      
    3.26      public static boolean isInterface(String s) throws ClassNotFoundException {
    3.27          return Class.forName(s).isInterface();
    3.28 @@ -101,6 +103,13 @@
    3.29          }
    3.30          return sb.toString().toString();
    3.31      }
    3.32 +    public static String getMarkerE() {
    3.33 +        ClassesMarker cm = Classes.class.getAnnotation(ClassesMarker.class);
    3.34 +        if (cm == null) {
    3.35 +            return null;
    3.36 +        }
    3.37 +        return cm.count().name();
    3.38 +    }
    3.39      public static String getNamer(boolean direct) {
    3.40          if (direct) {
    3.41              ClassesNamer cm = Classes.class.getAnnotation(ClassesNamer.class);