Skip to content

Commit 84d9e14

Browse files
committed
Fixes #37.
1 parent 437fabc commit 84d9e14

File tree

4 files changed

+40
-12
lines changed

4 files changed

+40
-12
lines changed

plugin/src/main/java/org/jvnet/jaxb2_commons/plugin/annotate/AnnotatingArrayValueVisitor.java

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,8 @@
5252
import com.sun.codemodel.JAnnotationUse;
5353
import com.sun.codemodel.JClass;
5454
import com.sun.codemodel.JCodeModel;
55+
import com.sun.codemodel.JExpressionImpl;
56+
import com.sun.codemodel.JFormatter;
5557
import com.sun.codemodel.JType;
5658

5759
public class AnnotatingArrayValueVisitor implements
@@ -141,13 +143,13 @@ public JAnnotationArrayMember visit(XEnumByNameAnnotationValue<?> value) {
141143
}
142144

143145
public JAnnotationArrayMember visit(XClassAnnotationValue<?> value) {
144-
final Class<?> _class = value.getValue();
145-
return annotationArrayMember.param(_class);
146+
final JType type = this.codeModel._ref(value.getValue());
147+
return param(type);
146148
}
147149

148150
public JAnnotationArrayMember visit(XClassByNameAnnotationValue<?> value) {
149151
final JType ref = CodeModelUtils.ref(codeModel, value.getClassName());
150-
return annotationArrayMember.param(ref);
152+
return param(ref);
151153
}
152154

153155
public JAnnotationArrayMember visit(XArrayClassAnnotationValue<?, ?> value) {
@@ -156,7 +158,19 @@ public JAnnotationArrayMember visit(XArrayClassAnnotationValue<?, ?> value) {
156158
for (int index = 0; index < value.getDimension(); index++) {
157159
type = type.array();
158160
}
159-
return annotationArrayMember.param(type);
161+
return param(type);
162+
}
163+
164+
private JAnnotationArrayMember param(final JType type) {
165+
if (type instanceof JClass) {
166+
return annotationArrayMember.param((JClass) type);
167+
} else {
168+
return annotationArrayMember.param(new JExpressionImpl() {
169+
public void generate(JFormatter f) {
170+
f.g(type).p(".class");
171+
}
172+
});
173+
}
160174
}
161175

162176
}

plugin/src/main/java/org/jvnet/jaxb2_commons/plugin/annotate/AnnotatingSingleValueVisitor.java

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,8 @@
5151
import com.sun.codemodel.JAnnotationUse;
5252
import com.sun.codemodel.JClass;
5353
import com.sun.codemodel.JCodeModel;
54+
import com.sun.codemodel.JExpressionImpl;
55+
import com.sun.codemodel.JFormatter;
5456
import com.sun.codemodel.JType;
5557

5658
public class AnnotatingSingleValueVisitor implements
@@ -140,13 +142,13 @@ public JAnnotationUse visit(XEnumByNameAnnotationValue<?> value) {
140142
}
141143

142144
public JAnnotationUse visit(XClassAnnotationValue<?> value) {
143-
final JType type = this.codeModel.ref(value.getValue());
144-
return annotationUse.param(this.name, type);
145+
final JType type = this.codeModel._ref(value.getValue());
146+
return param(type);
145147
}
146148

147149
public JAnnotationUse visit(XClassByNameAnnotationValue<?> value) {
148150
JType type = CodeModelUtils.ref(this.codeModel, value.getClassName());
149-
return annotationUse.param(this.name, type);
151+
return param(type);
150152
}
151153

152154
public JAnnotationUse visit(XArrayClassAnnotationValue<?, ?> value) {
@@ -155,7 +157,19 @@ public JAnnotationUse visit(XArrayClassAnnotationValue<?, ?> value) {
155157
for (int index = 0; index < value.getDimension(); index++) {
156158
type = type.array();
157159
}
158-
return annotationUse.param(this.name, type);
160+
return param(type);
161+
}
162+
163+
private JAnnotationUse param(final JType type) {
164+
if (type instanceof JClass) {
165+
return annotationUse.param(this.name, (JClass) type);
166+
} else {
167+
return annotationUse.param(this.name, new JExpressionImpl() {
168+
public void generate(JFormatter f) {
169+
f.g(type).p(".class");
170+
}
171+
});
172+
}
159173
}
160174

161175
}

plugin/src/test/resources/schema.xsd

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@
9090
<A
9191
xmlns="http://annox.dev.java.net/org.jvnet.jaxb2_commons.plugin.annotate.tests"
9292
booleanField="false" byteField="0" charField="a"
93-
classField="java.lang.String" doubleField="1"
93+
classField="double" doubleField="1"
9494
enumField="ONE" floatField="2.3" intField="4"
9595
longField="5" shortField="6" stringField="7">
9696
<annotationField>
@@ -121,7 +121,7 @@
121121
<A
122122
xmlns="http://annox.dev.java.net/org.jvnet.jaxb2_commons.plugin.annotate.tests"
123123
booleanField="false" byteField="0" charField="a"
124-
classField="java.lang.String" doubleField="1"
124+
classField="double[]" doubleField="1"
125125
enumField="ONE" floatField="2.3" intField="4"
126126
longField="5" shortField="6" stringField="7">
127127
<annotationField>

tests/annox/schema/src/main/resources/schema.xsd

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -266,7 +266,7 @@
266266
booleanField = false,
267267
byteField = 0,
268268
charField = 'a',
269-
classField = java.lang.String[][][].class,
269+
classField = double.class,
270270
anotherClassField=org.jvnet.jaxb2_commons.plugin.annotate.test.annox.schema.One.class,
271271
doubleField = 1,
272272
enumField = org.jvnet.jaxb2_commons.plugin.annotate.test.annox.annotations.E.ONE,
@@ -279,7 +279,7 @@
279279
booleanArrayField = { false, true },
280280
byteArrayField = { 0, 1 },
281281
charArrayField = { 'a', 'b' },
282-
classArrayField = { java.lang.String.class, java.lang.Boolean.class },
282+
classArrayField = { java.lang.String.class, java.lang.Boolean.class, java.lang.String[][][].class, double.class },
283283
anotherClassArrayField= {org.jvnet.jaxb2_commons.plugin.annotate.test.annox.schema.One.class, org.jvnet.jaxb2_commons.plugin.annotate.test.annox.schema.Two.class },
284284
doubleArrayField = { 2, 3 },
285285
enumArrayField = { org.jvnet.jaxb2_commons.plugin.annotate.test.annox.annotations.E.ONE, org.jvnet.jaxb2_commons.plugin.annotate.test.annox.annotations.E.TWO },

0 commit comments

Comments
 (0)