Generates reasonable JSON objects for inner annotations and inner annotation arrays
1.1 --- a/javap/src/main/java/org/apidesign/javap/AnnotationParser.java Mon Feb 04 22:02:33 2013 +0100
1.2 +++ b/javap/src/main/java/org/apidesign/javap/AnnotationParser.java Mon Feb 04 22:03:49 2013 +0100
1.3 @@ -42,10 +42,10 @@
1.4 this.iterateArray = iterateArray;
1.5 }
1.6
1.7 - protected void visitAnnotationStart(String type) throws IOException {
1.8 + protected void visitAnnotationStart(String type, boolean top) throws IOException {
1.9 }
1.10
1.11 - protected void visitAnnotationEnd(String type) throws IOException {
1.12 + protected void visitAnnotationEnd(String type, boolean top) throws IOException {
1.13 }
1.14
1.15 protected void visitValueStart(String attrName, char type) throws IOException {
1.16 @@ -85,20 +85,20 @@
1.17 private void read(DataInputStream dis, ClassData cd) throws IOException {
1.18 int cnt = dis.readUnsignedShort();
1.19 for (int i = 0; i < cnt; i++) {
1.20 - readAnno(dis, cd);
1.21 + readAnno(dis, cd, true);
1.22 }
1.23 }
1.24
1.25 - private void readAnno(DataInputStream dis, ClassData cd) throws IOException {
1.26 + private void readAnno(DataInputStream dis, ClassData cd, boolean top) throws IOException {
1.27 int type = dis.readUnsignedShort();
1.28 String typeName = cd.StringValue(type);
1.29 - visitAnnotationStart(typeName);
1.30 + visitAnnotationStart(typeName, top);
1.31 int cnt = dis.readUnsignedShort();
1.32 for (int i = 0; i < cnt; i++) {
1.33 String attrName = cd.StringValue(dis.readUnsignedShort());
1.34 readValue(dis, cd, typeName, attrName);
1.35 }
1.36 - visitAnnotationEnd(typeName);
1.37 + visitAnnotationEnd(typeName, top);
1.38 if (cnt == 0) {
1.39 visitAttr(typeName, null, null, null);
1.40 }
1.41 @@ -110,7 +110,7 @@
1.42 char type = (char)dis.readByte();
1.43 visitValueStart(attrName, type);
1.44 if (type == '@') {
1.45 - readAnno(dis, cd);
1.46 + readAnno(dis, cd, false);
1.47 } else if ("CFJZsSIDB".indexOf(type) >= 0) { // NOI18N
1.48 int primitive = dis.readUnsignedShort();
1.49 String val = cd.stringValue(primitive, textual);
2.1 --- a/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java Mon Feb 04 22:02:33 2013 +0100
2.2 +++ b/vm/src/main/java/org/apidesign/vm4brwsr/ByteCodeToJavaScript.java Mon Feb 04 22:03:49 2013 +0100
2.3 @@ -1705,16 +1705,22 @@
2.4 int depth;
2.5
2.6 @Override
2.7 - protected void visitAnnotationStart(String type) throws IOException {
2.8 + protected void visitAnnotationStart(String attrType, boolean top) throws IOException {
2.9 + final String slashType = attrType.substring(1, attrType.length() - 1);
2.10 + requireReference(slashType);
2.11 +
2.12 if (cnt[depth]++ > 0) {
2.13 out.append(",");
2.14 }
2.15 - out.append('"').append(type).append("\" : {\n");
2.16 + if (top) {
2.17 + out.append('"').append(attrType).append("\" : ");
2.18 + }
2.19 + out.append("{\n");
2.20 cnt[++depth] = 0;
2.21 }
2.22
2.23 @Override
2.24 - protected void visitAnnotationEnd(String type) throws IOException {
2.25 + protected void visitAnnotationEnd(String type, boolean top) throws IOException {
2.26 out.append("\n}\n");
2.27 depth--;
2.28 }
3.1 --- a/vm/src/test/java/org/apidesign/vm4brwsr/Classes.java Mon Feb 04 22:02:33 2013 +0100
3.2 +++ b/vm/src/test/java/org/apidesign/vm4brwsr/Classes.java Mon Feb 04 22:03:49 2013 +0100
3.3 @@ -29,8 +29,11 @@
3.4 *
3.5 * @author Jaroslav Tulach <jtulach@netbeans.org>
3.6 */
3.7 -@ClassesMarker(number = 10, nicknames = { "Ten", "Deset" }, count = ClassesMarker.E.TWO)
3.8 -@ClassesNamer(name = "my text")
3.9 +@ClassesMarker(number = 10, nicknames = { "Ten", "Deset" }, count = ClassesMarker.E.TWO, subs = {
3.10 + @ClassesMarker.Anno(Integer.SIZE),
3.11 + @ClassesMarker.Anno(Integer.MIN_VALUE)
3.12 +})
3.13 +@ClassesNamer(name = "my text", anno = @ClassesMarker.Anno(Integer.MAX_VALUE))
3.14 public class Classes {
3.15 public static String nameOfIO() {
3.16 return nameFor(IOException.class);
4.1 --- a/vm/src/test/java/org/apidesign/vm4brwsr/ClassesMarker.java Mon Feb 04 22:02:33 2013 +0100
4.2 +++ b/vm/src/test/java/org/apidesign/vm4brwsr/ClassesMarker.java Mon Feb 04 22:03:49 2013 +0100
4.3 @@ -33,4 +33,10 @@
4.4 enum E {
4.5 ONE, TWO;
4.6 }
4.7 +
4.8 + Anno[] subs() default {};
4.9 +
4.10 + public @interface Anno {
4.11 + int value();
4.12 + }
4.13 }
5.1 --- a/vm/src/test/java/org/apidesign/vm4brwsr/ClassesNamer.java Mon Feb 04 22:02:33 2013 +0100
5.2 +++ b/vm/src/test/java/org/apidesign/vm4brwsr/ClassesNamer.java Mon Feb 04 22:03:49 2013 +0100
5.3 @@ -27,4 +27,5 @@
5.4 @Retention(RetentionPolicy.RUNTIME)
5.5 public @interface ClassesNamer {
5.6 String name();
5.7 + ClassesMarker.Anno anno();
5.8 }