json/src/main/java/org/netbeans/html/json/impl/ModelProcessor.java
changeset 1039 3ef632633f36
parent 1030 02568f34628a
child 1050 f18b6cc923d8
     1.1 --- a/json/src/main/java/org/netbeans/html/json/impl/ModelProcessor.java	Sun Dec 13 21:33:32 2015 +0100
     1.2 +++ b/json/src/main/java/org/netbeans/html/json/impl/ModelProcessor.java	Thu Dec 31 08:20:05 2015 +0100
     1.3 @@ -292,7 +292,7 @@
     1.4                          boolean isPrimitive[] = {false};
     1.5                          String tn = checkType(p, isModel, isEnum, isPrimitive);
     1.6                          if (isModel[0]) {
     1.7 -                            w.write("    prop_" + p.name() + " = new " + tn + "();\n");
     1.8 +                            w.write("    prop_" + p.name() + " = this;\n");
     1.9                          }
    1.10                      }
    1.11                  }
    1.12 @@ -658,10 +658,18 @@
    1.13                  boolean isEnum[] = { false };
    1.14                  boolean isPrimitive[] = { false };
    1.15                  checkType(p, isModel, isEnum, isPrimitive);
    1.16 -                w.write("  private " + tn + " prop_" + p.name() + ";\n");
    1.17 +                if (isModel[0]) {
    1.18 +                    w.write("  private /*" + tn + "*/Object prop_" + p.name() + ";\n");
    1.19 +
    1.20 +                } else {
    1.21 +                    w.write("  private " + tn + " prop_" + p.name() + ";\n");
    1.22 +                }
    1.23                  w.write("  public " + tn + " " + gs[0] + "() {\n");
    1.24                  w.write("    proto.accessProperty(\"" + p.name() + "\");\n");
    1.25 -                w.write("    return prop_" + p.name() + ";\n");
    1.26 +                if (isModel[0]) {
    1.27 +                    w.write("    if (prop_" + p.name() + " == this) prop_" + p.name() + " = new " + tn +"();\n");
    1.28 +                }
    1.29 +                w.write("    return (" + tn + ")prop_" + p.name() + ";\n");
    1.30                  w.write("  }\n");
    1.31                  w.write("  public void " + gs[1] + "(" + tn + " v) {\n");
    1.32                  w.write("    proto.verifyUnlocked();\n");
    1.33 @@ -1712,7 +1720,7 @@
    1.34                      w.write("    ret.prop_" + p.name() + " = " + gs[0] + "();\n");
    1.35                      continue;
    1.36                  }
    1.37 -                w.write("    ret.prop_" + p.name() + " =  " + gs[0] + "()  == null ? null : prop_" + p.name() + ".clone();\n");
    1.38 +                w.write("    ret.prop_" + p.name() + " =  " + gs[0] + "()  == null ? null : " + gs[0] + "().clone();\n");
    1.39              } else {
    1.40                  w.write("    proto.cloneList(ret." + gs[0] + "(), ctx, prop_" + p.name() + ");\n");
    1.41              }