emul/src/main/java/java/lang/AnnotationImpl.java
author Jaroslav Tulach <jaroslav.tulach@apidesign.org>
Sun, 02 Dec 2012 15:05:36 +0100
branchreflection
changeset 238 5ab1f0890a42
parent 236 d97770281580
child 253 962a24ecd8f8
permissions -rw-r--r--
Class.getAnnotations somehow implemented
     1 /*
     2  * To change this template, choose Tools | Templates
     3  * and open the template in the editor.
     4  */
     5 package java.lang;
     6 
     7 import java.lang.annotation.Annotation;
     8 import org.apidesign.bck2brwsr.core.JavaScriptBody;
     9 
    10 /**
    11  *
    12  * @author Jaroslav Tulach <jtulach@netbeans.org>
    13  */
    14 final class AnnotationImpl implements Annotation {
    15     public Class<? extends Annotation> annotationType() {
    16         return getClass();
    17     }
    18 
    19     @JavaScriptBody(args = { "a", "n", "values" }, body =
    20           "var v = values;"
    21         + "for (p in values) {"
    22         + "  a[p] = function() { return v[p]; }"
    23         + "}"
    24         + "a['$instOf_' + n] = true;"
    25         + "return a;"
    26     )
    27     private static <T extends Annotation> T create(AnnotationImpl a, String n, Object values) {
    28         return null;
    29     }
    30     static <T extends Annotation> T create(Class<T> annoClass, Object values) {
    31         return create(new AnnotationImpl(), annoClass.getName().replace('.', '_'), values);
    32     }
    33 
    34     static Annotation[] create(Object anno) {
    35         String[] names = findNames(anno);
    36         Annotation[] ret = new Annotation[names.length];
    37         for (int i = 0; i < names.length; i++) {
    38             String n = names[i].substring(1, names[i].length() - 1).replace('/', '_');
    39             ret[i] = create(new AnnotationImpl(), n, findData(anno, names[i]));
    40         }
    41         return ret;
    42     }
    43     @JavaScriptBody(args = "anno", body =
    44           "var arr = new Array();"
    45         + "for (p in anno) {"
    46         + "  arr.push(p);"
    47         + "}"
    48         + "return arr;"
    49     )
    50     private static String[] findNames(Object anno) {
    51         throw new UnsupportedOperationException();
    52     }
    53 
    54     @JavaScriptBody(args={ "anno", "p"}, body="return anno[p];")
    55     private static Object findData(Object anno, String p) {
    56         throw new UnsupportedOperationException();
    57     }
    58 }