diff -r 5e8f219d60ba -r bf0a77f029c4 vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java --- a/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java Sun Dec 02 06:26:32 2012 +0100 +++ b/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java Sun Dec 02 12:26:14 2012 +0100 @@ -119,6 +119,12 @@ out.append("\n CLS.$class.jvmName = '").append(jc.getClassName()).append("';"); out.append("\n CLS.$class.superclass = sprcls;"); out.append("\n CLS.$class.cnstr = CLS;"); + byte[] classAnno = jc.findAnnotationData(false); + if (classAnno != null) { + out.append("\n CLS.$class.anno = {"); + generateAnno(jc, out, classAnno); + out.append("\n };"); + } out.append("\n }"); out.append("\n if (arguments.length === 0) {"); out.append("\n if (!(this instanceof CLS)) {"); @@ -1085,4 +1091,31 @@ } return " = null;"; } + + private static void generateAnno(ClassData cd, final Appendable out, byte[] data) throws IOException { + AnnotationParser ap = new AnnotationParser() { + int cnt; + + @Override + protected void visitAnnotationStart(String type) throws IOException { + out.append('"').append(type).append("\" : {\n"); + cnt = 0; + } + + @Override + protected void visitAnnotationEnd(String type) throws IOException { + out.append("\n}\n"); + } + + @Override + protected void visitAttr(String type, String attr, String value) + throws IOException { + if (cnt++ > 0) { + out.append(",\n"); + } + out.append(attr).append(" : ").append(value); + } + }; + ap.parse(data, cd); + } }