}
@Override
public Void visitCollectionType(CollectionType type, AttributeMetaDesc p)
throws RuntimeException {
DataType et = type.getElementType();
if (!isSupportedForJson(et)) {
return null;
}
String container = ArrayList;
if (type instanceof SortedSetType)
container = TreeSet;
else if (type instanceof SetType)
container = HashSet;
printer.println("{");
printer.indent();
printer.println(
"%s<%s> elements = new %1$s<%2$s>();",
container,
et.getTypeName());
printer.println(
"%s r = rootReader.newArrayReader(\"%s\");",
JsonArrayReader,
p.getAttributeName());
printer.println("if(r != null){");
printer.indent();
printer.println("reader = r;");
printer.println("int n = r.length();");
printer.println("for(int i = 0; i < n; i++){");
printer.indent();
printer.println("r.setIndex(i);");
if (et instanceof ModelRefType) {
printer.println("%s ref = new %1$s(%s.class);", et
.getTypeName(), ((ModelRefType) et)
.getReferenceModelTypeName());
type.getElementType().accept(
new JsonToModelMethodGenerator(
printer,
"ref",
"elements.add",
true),
p);
printer.println("if(ref.getKey() != null){");
printer.indent();
printer.println("elements.add(ref);");
printer.unindent();
printer.println("}");
} else {
type.getElementType().accept(
new JsonToModelMethodGenerator(printer, "("
+ et.getClassName()
+ ")null", "elements.add", true),
p);
}
printer.unindent();
printer.println("}");