2 * Back 2 Browser Bytecode Translator
3 * Copyright (C) 2012 Jaroslav Tulach <jaroslav.tulach@apidesign.org>
5 * This program is free software: you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation, version 2 of the License.
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
14 * You should have received a copy of the GNU General Public License
15 * along with this program. Look for COPYING file in the top folder.
16 * If not, see http://opensource.org/licenses/GPL-2.0.
18 package org.apidesign.bck2brwsr.emul;
20 import java.lang.annotation.Annotation;
21 import org.apidesign.bck2brwsr.core.JavaScriptBody;
25 * @author Jaroslav Tulach <jtulach@netbeans.org>
27 public final class AnnotationImpl implements Annotation {
28 public Class<? extends Annotation> annotationType() {
32 @JavaScriptBody(args = { "a", "n", "values" }, body = ""
33 + "function f(v, p) {\n"
36 + " return function() {\n"
37 + " return val[prop];\n"
40 + "var props = Object.getOwnPropertyNames(values);\n"
41 + "for (var i = 0; i < props.length; i++) {\n"
42 + " var p = props[i];\n"
43 + " a[p] = new f(values, p);\n"
45 + "a['$instOf_' + n] = true;\n"
48 private static <T extends Annotation> T create(AnnotationImpl a, String n, Object values) {
51 public static <T extends Annotation> T create(Class<T> annoClass, Object values) {
52 return create(new AnnotationImpl(), annoClass.getName().replace('.', '_'), values);
55 public static Annotation[] create(Object anno) {
56 String[] names = findNames(anno);
57 Annotation[] ret = new Annotation[names.length];
58 for (int i = 0; i < names.length; i++) {
59 String n = names[i].substring(1, names[i].length() - 1).replace('/', '_');
60 ret[i] = create(new AnnotationImpl(), n, findData(anno, names[i]));
64 @JavaScriptBody(args = "anno", body =
65 "var arr = new Array();"
66 + "var props = Object.getOwnPropertyNames(anno);\n"
67 + "for (var i = 0; i < props.length; i++) {\n"
68 + " var p = props[i];\n"
73 private static String[] findNames(Object anno) {
74 throw new UnsupportedOperationException();
77 @JavaScriptBody(args={ "anno", "p"}, body="return anno[p];")
78 private static Object findData(Object anno, String p) {
79 throw new UnsupportedOperationException();