Skip to content

Commit f0c771b

Browse files
committed
Bolster tests, re #58
1 parent 4a9a5da commit f0c771b

14 files changed

+107
-99
lines changed

generator/src/main/java/org/jsonx/AnyModel.java

+24-18
Original file line numberDiff line numberDiff line change
@@ -179,7 +179,7 @@ private AnyModel(final Registry registry, final Declarer declarer, final AnyProp
179179
if (isRegex && !Map.class.isAssignableFrom(getMethod.getReturnType()))
180180
throw new IllegalAnnotationException(property, getMethod.getDeclaringClass().getName() + "." + fieldName + ": @" + AnyProperty.class.getSimpleName() + " of type " + Bind.Type.getClassName(getMethod, property.nullable(), property.use()) + " with regex name=\"" + property.name() + "\" must be of type that extends " + Map.class.getName());
181181

182-
if (!isAssignable(getMethod, true, isRegex, property.nullable(), property.use(), false, types.length > 0 ? getFieldTypes(types) : new Class<?>[] { defaultClass() }))
182+
if (!isAssignable(getMethod, true, isRegex, property.nullable(), property.use(), false, getFieldClasses(types)))
183183
throw new IllegalAnnotationException(property, getMethod.getDeclaringClass().getName() + "." + fieldName + ": @" + AnyProperty.class.getSimpleName() + " of type " + Bind.Type.getClassName(getMethod, property.nullable(), property.use()) + " is not assignable for the specified types attribute");
184184

185185
validateTypeBinding();
@@ -225,27 +225,29 @@ private Member addReference(final String idref, final Boolean nullable, final Us
225225
});
226226
}
227227

228-
private static Class<?>[] getFieldTypes(final t[] types) {
228+
private Class<?>[] getFieldClasses(final t[] types) {
229229
final int len = types.length;
230230
if (len == 0)
231-
return null;
231+
return new Class[] { defaultClass() };
232232

233-
final Class<?>[] members = new Class<?>[len];
234-
for (int i = 0; i < len; ++i) { // [A]
233+
final Class<?>[] classes = new Class<?>[len];
234+
int i = 0;
235+
do { // [A]
235236
final t type = types[i];
236237
if (AnyType.isEnabled(type.arrays()))
237-
members[i] = List.class;
238+
classes[i] = List.class;
238239
else if (AnyType.isEnabled(type.booleans()))
239-
members[i] = Boolean.class;
240+
classes[i] = type.booleans().type();
240241
else if (AnyType.isEnabled(type.numbers()))
241-
members[i] = type.numbers().type();
242+
classes[i] = type.numbers().type();
242243
else if (AnyType.isEnabled(type.objects()))
243-
members[i] = type.objects();
244+
classes[i] = type.objects();
244245
else if (AnyType.isEnabled(type.strings()))
245-
members[i] = type.strings().type();
246+
classes[i] = type.strings().type();
246247
}
248+
while (++i < len);
247249

248-
return members;
250+
return classes;
249251
}
250252

251253
private Member[] getMemberTypes(final t[] types) {
@@ -254,7 +256,8 @@ private Member[] getMemberTypes(final t[] types) {
254256
return null;
255257

256258
final Member[] members = new Member[len];
257-
for (int i = 0; i < len; ++i) { // [A]
259+
int i = 0;
260+
do { // [A]
258261
final t type = types[i];
259262
Member member = null;
260263
if (AnyType.isEnabled(type.arrays()))
@@ -368,6 +371,7 @@ public String encode() {
368371

369372
members[i] = member;
370373
}
374+
while (++i < len);
371375

372376
return members;
373377
}
@@ -414,18 +418,20 @@ Class<? extends Annotation> elementAnnotation() {
414418
}
415419

416420
@Override
417-
XmlElement toXml(final Element owner, final String packageName, final JsonPath.Cursor cursor, final PropertyMap<AttributeMap> pathToBinding, final boolean isFromReference) {
418-
final XmlElement element = super.toXml(owner, packageName, cursor, pathToBinding, isFromReference);
419-
if (!isFromReference)
421+
XmlElement toXml(final Element owner, final String packageName, final JsonPath.Cursor cursor, final PropertyMap<AttributeMap> pathToBinding) {
422+
final XmlElement element = super.toXml(owner, packageName, cursor, pathToBinding);
423+
if (cursor != null)
420424
cursor.popName();
425+
421426
return element;
422427
}
423428

424429
@Override
425-
PropertyMap<Object> toJson(final Element owner, final String packageName, final JsonPath.Cursor cursor, final PropertyMap<AttributeMap> pathToBinding, final boolean isFromReference) {
426-
final PropertyMap<Object> properties = super.toJson(owner, packageName, cursor, pathToBinding, isFromReference);
427-
if (!isFromReference)
430+
PropertyMap<Object> toJson(final Element owner, final String packageName, final JsonPath.Cursor cursor, final PropertyMap<AttributeMap> pathToBinding) {
431+
final PropertyMap<Object> properties = super.toJson(owner, packageName, cursor, pathToBinding);
432+
if (cursor != null)
428433
cursor.popName();
434+
429435
return properties;
430436
}
431437

generator/src/main/java/org/jsonx/ArrayModel.java

+6-6
Original file line numberDiff line numberDiff line change
@@ -506,15 +506,15 @@ void getDeclaredTypes(final Set<? super Registry.Type> types) {
506506

507507
@Override
508508
@SuppressWarnings({"rawtypes", "unchecked"})
509-
XmlElement toXml(final Element owner, final String packageName, final JsonPath.Cursor cursor, final PropertyMap<AttributeMap> pathToBinding, final boolean isFromReference) {
510-
final XmlElement element = super.toXml(owner, packageName, cursor, pathToBinding, isFromReference);
509+
XmlElement toXml(final Element owner, final String packageName, final JsonPath.Cursor cursor, final PropertyMap<AttributeMap> pathToBinding) {
510+
final XmlElement element = super.toXml(owner, packageName, cursor, pathToBinding);
511511
final int size = members.length;
512512
if (size > 0) {
513513
final Collection superElements = element.getElements();
514514
final ArrayList<XmlElement> elements = new ArrayList<>(size + (superElements != null ? superElements.size() : 0));
515515
cursor.inArray();
516516
for (int i = 0; i < size; ++i) // [A]
517-
elements.add(members[i].toXml(this, packageName, cursor, pathToBinding, false));
517+
elements.add(members[i].toXml(this, packageName, cursor, pathToBinding));
518518

519519
if (superElements != null)
520520
elements.addAll(superElements);
@@ -527,14 +527,14 @@ XmlElement toXml(final Element owner, final String packageName, final JsonPath.C
527527
}
528528

529529
@Override
530-
PropertyMap<Object> toJson(final Element owner, final String packageName, final JsonPath.Cursor cursor, final PropertyMap<AttributeMap> pathToBinding, final boolean isFromReference) {
531-
final PropertyMap<Object> element = super.toJson(owner, packageName, cursor, pathToBinding, isFromReference);
530+
PropertyMap<Object> toJson(final Element owner, final String packageName, final JsonPath.Cursor cursor, final PropertyMap<AttributeMap> pathToBinding) {
531+
final PropertyMap<Object> element = super.toJson(owner, packageName, cursor, pathToBinding);
532532
final int len = members.length;
533533
if (len > 0) {
534534
final ArrayList<Object> elements = new ArrayList<>();
535535
cursor.inArray();
536536
for (int i = 0; i < len; ++i) // [A]
537-
elements.add(members[i].toJson(this, packageName, cursor, pathToBinding, false));
537+
elements.add(members[i].toJson(this, packageName, cursor, pathToBinding));
538538

539539
element.put("@elements", elements);
540540
}

generator/src/main/java/org/jsonx/BooleanModel.java

+4-4
Original file line numberDiff line numberDiff line change
@@ -223,15 +223,15 @@ Class<? extends Annotation> typeAnnotation() {
223223
}
224224

225225
@Override
226-
XmlElement toXml(final Element owner, final String packageName, final JsonPath.Cursor cursor, final PropertyMap<AttributeMap> pathToBinding, final boolean isFromReference) {
227-
final XmlElement element = super.toXml(owner, packageName, cursor, pathToBinding, isFromReference);
226+
XmlElement toXml(final Element owner, final String packageName, final JsonPath.Cursor cursor, final PropertyMap<AttributeMap> pathToBinding) {
227+
final XmlElement element = super.toXml(owner, packageName, cursor, pathToBinding);
228228
cursor.popName();
229229
return element;
230230
}
231231

232232
@Override
233-
PropertyMap<Object> toJson(final Element owner, final String packageName, final JsonPath.Cursor cursor, final PropertyMap<AttributeMap> pathToBinding, final boolean isFromReference) {
234-
final PropertyMap<Object> properties = super.toJson(owner, packageName, cursor, pathToBinding, isFromReference);
233+
PropertyMap<Object> toJson(final Element owner, final String packageName, final JsonPath.Cursor cursor, final PropertyMap<AttributeMap> pathToBinding) {
234+
final PropertyMap<Object> properties = super.toJson(owner, packageName, cursor, pathToBinding);
235235
cursor.popName();
236236
return properties;
237237
}

generator/src/main/java/org/jsonx/Deferred.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -69,12 +69,12 @@ Class<? extends Annotation> typeAnnotation() {
6969
}
7070

7171
@Override
72-
XmlElement toXml(final Element owner, final String packageName, final JsonPath.Cursor cursor, final PropertyMap<AttributeMap> pathToBinding, final boolean isFromReference) {
72+
XmlElement toXml(final Element owner, final String packageName, final JsonPath.Cursor cursor, final PropertyMap<AttributeMap> pathToBinding) {
7373
throw new UnsupportedOperationException();
7474
}
7575

7676
@Override
77-
PropertyMap<Object> toJson(final Element owner, final String packageName, final JsonPath.Cursor cursor, final PropertyMap<AttributeMap> pathToBinding, final boolean isFromReference) {
77+
PropertyMap<Object> toJson(final Element owner, final String packageName, final JsonPath.Cursor cursor, final PropertyMap<AttributeMap> pathToBinding) {
7878
throw new UnsupportedOperationException();
7979
}
8080
}

generator/src/main/java/org/jsonx/Element.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,8 @@ abstract class Element {
2929
this.doc = doc == null || (str = doc.text()) == null || (str = str.trim()).length() == 0 ? null : str;
3030
}
3131

32-
abstract XmlElement toXml(Element owner, String packageName, JsonPath.Cursor cursor, PropertyMap<AttributeMap> pathToBinding, boolean isFromReference);
33-
abstract Object toJson(Element owner, String packageName, JsonPath.Cursor cursor, PropertyMap<AttributeMap> pathToBinding, boolean isFromReference);
32+
abstract XmlElement toXml(Element owner, String packageName, JsonPath.Cursor cursor, PropertyMap<AttributeMap> pathToBinding);
33+
abstract Object toJson(Element owner, String packageName, JsonPath.Cursor cursor, PropertyMap<AttributeMap> pathToBinding);
3434

3535
static String jsd(final boolean jsd, final String name) {
3636
return jsd ? "@" + name : name;

generator/src/main/java/org/jsonx/Model.java

+8-10
Original file line numberDiff line numberDiff line change
@@ -107,22 +107,20 @@ public final int compareTo(final Model o) {
107107
}
108108

109109
@Override
110-
XmlElement toXml(final Element owner, final String packageName, final JsonPath.Cursor cursor, final PropertyMap<AttributeMap> pathToBinding, final boolean isFromReference) {
110+
XmlElement toXml(final Element owner, final String packageName, final JsonPath.Cursor cursor, final PropertyMap<AttributeMap> pathToBinding) {
111111
final AttributeMap attributes = toSchemaAttributes(owner, packageName, false);
112-
final String name = (String)attributes.get(nameName());
113-
if (name != null || !isFromReference || !(this instanceof AnyModel))
112+
if (cursor != null) {
114113
cursor.pushName((String)attributes.get(nameName()));
114+
final AttributeMap bindingAttributes = Bind.toBindingAttributes(elementName(), owner, typeBinding, fieldBinding, attributes, false);
115+
if (bindingAttributes != null)
116+
pathToBinding.put(cursor.toString(), bindingAttributes);
117+
}
115118

116-
final XmlElement element = new XmlElement(owner instanceof ObjectModel ? "property" : elementName(), attributes, null);
117-
final AttributeMap bindingAttributes = name != null || !isFromReference || !(this instanceof AnyModel) ? Bind.toBindingAttributes(elementName(), owner, typeBinding, fieldBinding, attributes, false) : null;
118-
if (bindingAttributes != null)
119-
pathToBinding.put(cursor.toString(), bindingAttributes);
120-
121-
return element;
119+
return new XmlElement(owner instanceof ObjectModel ? "property" : elementName(), attributes, null);
122120
}
123121

124122
@Override
125-
PropertyMap<Object> toJson(final Element owner, final String packageName, final JsonPath.Cursor cursor, final PropertyMap<AttributeMap> pathToBinding, final boolean isFromReference) {
123+
PropertyMap<Object> toJson(final Element owner, final String packageName, final JsonPath.Cursor cursor, final PropertyMap<AttributeMap> pathToBinding) {
126124
final AttributeMap attributes = toSchemaAttributes(owner, packageName, true);
127125
cursor.pushName((String)attributes.get(nameName()));
128126

generator/src/main/java/org/jsonx/NumberModel.java

+4-4
Original file line numberDiff line numberDiff line change
@@ -309,15 +309,15 @@ Class<? extends Annotation> typeAnnotation() {
309309
}
310310

311311
@Override
312-
XmlElement toXml(final Element owner, final String packageName, final JsonPath.Cursor cursor, final PropertyMap<AttributeMap> pathToBinding, final boolean isFromReference) {
313-
final XmlElement element = super.toXml(owner, packageName, cursor, pathToBinding, isFromReference);
312+
XmlElement toXml(final Element owner, final String packageName, final JsonPath.Cursor cursor, final PropertyMap<AttributeMap> pathToBinding) {
313+
final XmlElement element = super.toXml(owner, packageName, cursor, pathToBinding);
314314
cursor.popName();
315315
return element;
316316
}
317317

318318
@Override
319-
PropertyMap<Object> toJson(final Element owner, final String packageName, final JsonPath.Cursor cursor, final PropertyMap<AttributeMap> pathToBinding, final boolean isFromReference) {
320-
final PropertyMap<Object> properties = super.toJson(owner, packageName, cursor, pathToBinding, isFromReference);
319+
PropertyMap<Object> toJson(final Element owner, final String packageName, final JsonPath.Cursor cursor, final PropertyMap<AttributeMap> pathToBinding) {
320+
final PropertyMap<Object> properties = super.toJson(owner, packageName, cursor, pathToBinding);
321321
cursor.popName();
322322
return properties;
323323
}

generator/src/main/java/org/jsonx/ObjectModel.java

+10-10
Original file line numberDiff line numberDiff line change
@@ -224,8 +224,8 @@ private Member getOverride() {
224224
return override;
225225
}
226226

227-
private XmlElement toXml(final ObjectModel owner, final String packageName, final JsonPath.Cursor cursor, final PropertyMap<AttributeMap> pathToBinding, final boolean isFromReference) {
228-
final XmlElement element = member.toXml(owner, packageName, cursor, pathToBinding, isFromReference);
227+
private XmlElement toXml(final ObjectModel owner, final String packageName, final JsonPath.Cursor cursor, final PropertyMap<AttributeMap> pathToBinding) {
228+
final XmlElement element = member.toXml(owner, packageName, cursor, pathToBinding);
229229
if (getOverride() != null) {
230230
final Map<?,?> attrs = element.getAttributes();
231231
attrs.remove("nullable");
@@ -238,8 +238,8 @@ private XmlElement toXml(final ObjectModel owner, final String packageName, fina
238238
}
239239

240240
@SuppressWarnings("unchecked")
241-
private Object toJson(final ObjectModel owner, final String packageName, final JsonPath.Cursor cursor, final PropertyMap<AttributeMap> pathToBinding, final boolean isFromReference) {
242-
final PropertyMap<Object> object = (PropertyMap<Object>)member.toJson(owner, packageName, cursor, pathToBinding, isFromReference);
241+
private Object toJson(final ObjectModel owner, final String packageName, final JsonPath.Cursor cursor, final PropertyMap<AttributeMap> pathToBinding) {
242+
final PropertyMap<Object> object = (PropertyMap<Object>)member.toJson(owner, packageName, cursor, pathToBinding);
243243
if (getOverride() != null) {
244244
object.remove("@nullable");
245245
object.remove("@use");
@@ -684,14 +684,14 @@ void getDeclaredTypes(final Set<? super Registry.Type> types) {
684684

685685
@Override
686686
@SuppressWarnings({"rawtypes", "unchecked"})
687-
XmlElement toXml(final Element owner, final String packageName, final JsonPath.Cursor cursor, final PropertyMap<AttributeMap> pathToBinding, final boolean isFromReference) {
688-
final XmlElement element = super.toXml(owner, packageName, cursor, pathToBinding, isFromReference);
687+
XmlElement toXml(final Element owner, final String packageName, final JsonPath.Cursor cursor, final PropertyMap<AttributeMap> pathToBinding) {
688+
final XmlElement element = super.toXml(owner, packageName, cursor, pathToBinding);
689689
final int size;
690690
if (properties != null && (size = properties.size()) > 0) {
691691
final Collection superElements = element.getElements();
692692
final ArrayList<XmlElement> elements = new ArrayList<>(size + (superElements != null ? superElements.size() : 0));
693693
for (final Property property : properties.values()) // [C]
694-
elements.add(property.toXml(this, packageName, cursor, pathToBinding, false));
694+
elements.add(property.toXml(this, packageName, cursor, pathToBinding));
695695

696696
if (superElements != null)
697697
elements.addAll(superElements);
@@ -704,14 +704,14 @@ XmlElement toXml(final Element owner, final String packageName, final JsonPath.C
704704
}
705705

706706
@Override
707-
PropertyMap<Object> toJson(final Element owner, final String packageName, final JsonPath.Cursor cursor, final PropertyMap<AttributeMap> pathToBinding, final boolean isFromReference) {
708-
final PropertyMap<Object> element = super.toJson(owner, packageName, cursor, pathToBinding, isFromReference);
707+
PropertyMap<Object> toJson(final Element owner, final String packageName, final JsonPath.Cursor cursor, final PropertyMap<AttributeMap> pathToBinding) {
708+
final PropertyMap<Object> element = super.toJson(owner, packageName, cursor, pathToBinding);
709709
final int size;
710710
if (properties != null && (size = properties.size()) > 0) {
711711
final PropertyMap<Object> properties = new PropertyMap<>(size);
712712
element.put("@properties", properties);
713713
for (final Property property : this.properties.values()) // [C]
714-
properties.put(property.member.name(), property.toJson(this, packageName, cursor, pathToBinding, false));
714+
properties.put(property.member.name(), property.toJson(this, packageName, cursor, pathToBinding));
715715
}
716716

717717
cursor.popName();

0 commit comments

Comments
 (0)