1.1 --- a/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java Sun Dec 02 06:26:32 2012 +0100
1.2 +++ b/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java Sun Dec 02 12:26:14 2012 +0100
1.3 @@ -119,6 +119,12 @@
1.4 out.append("\n CLS.$class.jvmName = '").append(jc.getClassName()).append("';");
1.5 out.append("\n CLS.$class.superclass = sprcls;");
1.6 out.append("\n CLS.$class.cnstr = CLS;");
1.7 + byte[] classAnno = jc.findAnnotationData(false);
1.8 + if (classAnno != null) {
1.9 + out.append("\n CLS.$class.anno = {");
1.10 + generateAnno(jc, out, classAnno);
1.11 + out.append("\n };");
1.12 + }
1.13 out.append("\n }");
1.14 out.append("\n if (arguments.length === 0) {");
1.15 out.append("\n if (!(this instanceof CLS)) {");
1.16 @@ -1085,4 +1091,31 @@
1.17 }
1.18 return " = null;";
1.19 }
1.20 +
1.21 + private static void generateAnno(ClassData cd, final Appendable out, byte[] data) throws IOException {
1.22 + AnnotationParser ap = new AnnotationParser() {
1.23 + int cnt;
1.24 +
1.25 + @Override
1.26 + protected void visitAnnotationStart(String type) throws IOException {
1.27 + out.append('"').append(type).append("\" : {\n");
1.28 + cnt = 0;
1.29 + }
1.30 +
1.31 + @Override
1.32 + protected void visitAnnotationEnd(String type) throws IOException {
1.33 + out.append("\n}\n");
1.34 + }
1.35 +
1.36 + @Override
1.37 + protected void visitAttr(String type, String attr, String value)
1.38 + throws IOException {
1.39 + if (cnt++ > 0) {
1.40 + out.append(",\n");
1.41 + }
1.42 + out.append(attr).append(" : ").append(value);
1.43 + }
1.44 + };
1.45 + ap.parse(data, cd);
1.46 + }
1.47 }