2 * To change this template, choose Tools | Templates
3 * and open the template in the editor.
7 import java.lang.annotation.Annotation;
8 import org.apidesign.bck2brwsr.core.JavaScriptBody;
12 * @author Jaroslav Tulach <jtulach@netbeans.org>
14 final class AnnotationImpl implements Annotation {
15 public Class<? extends Annotation> annotationType() {
19 @JavaScriptBody(args = { "a", "n", "values" }, body = ""
20 + "function f(v, p) {\n"
23 + " return function() {\n"
24 + " return val[prop];\n"
27 + "var props = Object.getOwnPropertyNames(values);\n"
28 + "for (var i = 0; i < props.length; i++) {\n"
29 + " var p = props[i];\n"
30 + " a[p] = new f(values, p);\n"
32 + "a['$instOf_' + n] = true;\n"
35 private static <T extends Annotation> T create(AnnotationImpl a, String n, Object values) {
38 static <T extends Annotation> T create(Class<T> annoClass, Object values) {
39 return create(new AnnotationImpl(), annoClass.getName().replace('.', '_'), values);
42 static Annotation[] create(Object anno) {
43 String[] names = findNames(anno);
44 Annotation[] ret = new Annotation[names.length];
45 for (int i = 0; i < names.length; i++) {
46 String n = names[i].substring(1, names[i].length() - 1).replace('/', '_');
47 ret[i] = create(new AnnotationImpl(), n, findData(anno, names[i]));
51 @JavaScriptBody(args = "anno", body =
52 "var arr = new Array();"
53 + "var props = Object.getOwnPropertyNames(anno);\n"
54 + "for (var i = 0; i < props.length; i++) {\n"
55 + " var p = props[i];\n"
60 private static String[] findNames(Object anno) {
61 throw new UnsupportedOperationException();
64 @JavaScriptBody(args={ "anno", "p"}, body="return anno[p];")
65 private static Object findData(Object anno, String p) {
66 throw new UnsupportedOperationException();