diff --git a/src/main/jastadd/backend/API.jadd b/src/main/jastadd/backend/API.jadd index 84db4dfe33eaa39cfbe91b38ac1d62d65452b959..321d38ffc90667832a294dec54cf217ef248a2f2 100644 --- a/src/main/jastadd/backend/API.jadd +++ b/src/main/jastadd/backend/API.jadd @@ -53,11 +53,11 @@ aspect BackendAPI { } sb.append("() {\n"); if (resolverHelper | serializer) { - sb.append(ind(2) + "if (" + getImplAttributeField() + " != null && " + getImplAttributeField() + ".is$Unresolved()) {\n"); - sb.append(ind(3) + "if (" + getImplAttributeField() + ".as$Unresolved().getUnresolved$ResolveOpposite()) {\n"); - sb.append(ind(4) + "set" + nameCapitalized() + "(resolve" + nameCapitalized() + "ByToken(" + getImplAttributeField() + ".as$Unresolved().getUnresolved$Token()));\n"); + sb.append(ind(2) + "if (" + getImplAttributeField() + " != null && " + getImplAttributeField() + "." + isUnresolvedMethod + "()) {\n"); + sb.append(ind(3) + "if (" + getImplAttributeField() + "." + asUnresolvedMethod + "().get" + unresolvedPrefix + "ResolveOpposite()) {\n"); + sb.append(ind(4) + "set" + nameCapitalized() + "(resolve" + nameCapitalized() + resolvePostfix + "(" + getImplAttributeField() + "." + asUnresolvedMethod + "().get" + unresolvedPrefix + "Token()));\n"); sb.append(ind(3) + "} else {\n"); - sb.append(ind(4) + "set" + getImplAttributeName() + "(resolve" + nameCapitalized() + "ByToken(" + getImplAttributeField() + ".as$Unresolved().getUnresolved$Token()));\n"); + sb.append(ind(4) + "set" + getImplAttributeName() + "(resolve" + nameCapitalized() + resolvePostfix + "(" + getImplAttributeField() + "." + asUnresolvedMethod + "().get" + unresolvedPrefix + "Token()));\n"); sb.append(ind(3) + "}\n"); sb.append(ind(2) + "}\n"); } diff --git a/src/main/jastadd/backend/AbstractGrammar.jadd b/src/main/jastadd/backend/AbstractGrammar.jadd index a9728d231ef25162218719dc08a47853003abbdb..57c6d25bac5733fc65e788f5f0bd0356ceedf24e 100644 --- a/src/main/jastadd/backend/AbstractGrammar.jadd +++ b/src/main/jastadd/backend/AbstractGrammar.jadd @@ -1,6 +1,7 @@ aspect BackendAbstractGrammar { - public static String ASTNode.listClass = "ArrayList"; + public static String ASTNode.listInterface = "java.util.List"; + public static String ASTNode.listClass = "java.util.ArrayList"; public static String ASTNode.jastAddListType = "List"; public static boolean ASTNode.resolverHelper = false; @@ -27,37 +28,37 @@ aspect BackendAbstractGrammar { } else { sb.append(ind(1)); } - sb.append("class " + "Unresolved$" + getID() + " extends " + getID() + " implements Unresolved$Node {\n"); + sb.append("class " + unresolvedPrefix + getID() + " extends " + getID() + " implements " + unresolvedPrefix + "Node {\n"); sb.append(ind(2) + "private String unresolved$Token;\n"); - sb.append(ind(2) + "public String getUnresolved$Token() {\n"); + sb.append(ind(2) + "public String get" + unresolvedPrefix + "Token() {\n"); sb.append(ind(3) + "return unresolved$Token;\n"); sb.append(ind(2) + "}\n"); - sb.append(ind(2) + "void setUnresolved$Token(String token) {\n"); + sb.append(ind(2) + "void set" + unresolvedPrefix + "Token(String token) {\n"); sb.append(ind(3) + "this.unresolved$Token = token;\n"); sb.append(ind(2) + "}\n"); sb.append(ind(2) + "private boolean unresolved$ResolveOpposite;\n"); - sb.append(ind(2) + "public boolean getUnresolved$ResolveOpposite() {\n"); + sb.append(ind(2) + "public boolean get" + unresolvedPrefix + "ResolveOpposite() {\n"); sb.append(ind(3) + "return unresolved$ResolveOpposite;\n"); sb.append(ind(2) + "}\n"); - sb.append(ind(2) + "void setUnresolved$ResolveOpposite(boolean resolveOpposite) {\n"); + sb.append(ind(2) + "void set" + unresolvedPrefix + "ResolveOpposite(boolean resolveOpposite) {\n"); sb.append(ind(3) + "this.unresolved$ResolveOpposite = resolveOpposite;\n"); sb.append(ind(2) + "}\n"); sb.append(ind(1) + "}\n"); - sb.append(ind(1) + "Unresolved$Node " + getID() + ".as$Unresolved() {\n"); + sb.append(ind(1) + unresolvedPrefix + "Node " + getID() + "." + asUnresolvedMethod + "() {\n"); sb.append(ind(2) + "return null;\n"); sb.append(ind(1) + "}\n"); - sb.append(ind(1) + "Unresolved$Node Unresolved$" + getID() + ".as$Unresolved() {\n"); + sb.append(ind(1) + unresolvedPrefix + "Node " + unresolvedPrefix + getID() + "." + asUnresolvedMethod + "() {\n"); sb.append(ind(2) + "return this;\n"); sb.append(ind(1) + "}\n"); - sb.append(ind(1) + "boolean " + getID() + ".is$Unresolved() {\n"); + sb.append(ind(1) + "boolean " + getID() + "." + isUnresolvedMethod + "() {\n"); sb.append(ind(2) + "return false;\n"); sb.append(ind(1) + "}\n"); - sb.append(ind(1) + "boolean Unresolved$" + getID() + ".is$Unresolved() {\n"); + sb.append(ind(1) + "boolean " + unresolvedPrefix + getID() + "." + isUnresolvedMethod + "() {\n"); sb.append(ind(2) + "return true;\n"); sb.append(ind(1) + "}\n"); } @@ -119,7 +120,7 @@ aspect BackendAbstractGrammar { return "<" + getImplAttributeName() + ":" + ofTypeDecl() + ">"; } public String ManyRelationComponent.generateAbstractGrammar() { - return "<" + getImplAttributeName() + ":" + ASTNode.listClass + "<" + ofTypeDecl() + ">>"; + return "<" + getImplAttributeName() + ":" + ASTNode.listInterface + "<" + ofTypeDecl() + ">>"; } public String RelationComponent.getImplAttributeName() { @@ -128,11 +129,11 @@ aspect BackendAbstractGrammar { public String RelationComponent.getImplAttributeField() { // tt.bind("TypeInSignature", ASTNode.convTypeNameToSignature(type())); - return "token" + ofTypeDecl() + "__impl_" + getID(); + return "token" + org.jastadd.ast.AST.ASTNode.convTypeNameToSignature(ofTypeDecl().toString()) + "__impl_" + getID(); } public String ManyRelationComponent.getImplAttributeField() { // tt.bind("TypeInSignature", ASTNode.convTypeNameToSignature(type())); - return "token" + listClass + "_" + ofTypeDecl() + "___impl_" + getID(); + return "token" + org.jastadd.ast.AST.ASTNode.convTypeNameToSignature(ASTNode.listInterface) + "_" + ofTypeDecl() + "___impl_" + getID(); } } diff --git a/src/main/jastadd/backend/Backend.jadd b/src/main/jastadd/backend/Backend.jadd index c751488eb18df1a1e59b4a93edebf341bcdea0c0..96164f9918271f71479c97112b49a7c44fe3e6ee 100644 --- a/src/main/jastadd/backend/Backend.jadd +++ b/src/main/jastadd/backend/Backend.jadd @@ -6,7 +6,6 @@ aspect BackendAspect { } public void Program.generateAspect(StringBuilder sb) { - sb.append("import java.util.ArrayList;\n"); sb.append("import java.util.Collections;\n"); sb.append("import java.time.Instant;\n"); sb.append("import java.time.Period;\n"); diff --git a/src/main/jastadd/backend/BidirectionalAPI.jadd b/src/main/jastadd/backend/BidirectionalAPI.jadd index 4015d240356896604e5bbc1a97f421a495985006..1db4171fd9be25a24dd5d72ce5ba1089362eff86 100644 --- a/src/main/jastadd/backend/BidirectionalAPI.jadd +++ b/src/main/jastadd/backend/BidirectionalAPI.jadd @@ -46,7 +46,7 @@ aspect BackendBidirectionalAPI { String getMethodDecl = "java.util.List<" + ofTypeDecl() + "> " + getTypeUse().decl() + "." + name() + "()"; sb.append("public " + getMethodDecl + " {\n"); } - sb.append(ind(2) + ASTNode.listClass + "<" + ofTypeDecl() + "> l = get" + getImplAttributeName() + "();\n"); + sb.append(ind(2) + ASTNode.listInterface + "<" + ofTypeDecl() + "> l = get" + getImplAttributeName() + "();\n"); // resolve the entire list if (resolverHelper | serializer) { sb.append(ind(2) + "if (l != null) {\n"); @@ -55,9 +55,9 @@ aspect BackendBidirectionalAPI { sb.append(ind(4) + ofTypeDecl() + " element = l.get(i);\n"); sb.append(ind(4) + "if (element." + isUnresolvedMethod + "()) {\n"); sb.append(ind(5) + "changed = true;\n"); - sb.append(ind(5) + ofTypeDecl() + " resolvedElement = resolve" + nameCapitalized() + "ByToken(element." + asUnresolvedMethod + "()." + getUnresolvedTokenMethod + "(), i);\n"); + sb.append(ind(5) + ofTypeDecl() + " resolvedElement = resolve" + nameCapitalized() + "" + resolvePostfix + "(element." + asUnresolvedMethod + "()." + getUnresolvedTokenMethod + "(), i);\n"); sb.append(ind(5) + "if (resolvedElement != null && element." + asUnresolvedMethod + "()." + getUnresolvedResolveOppositeMethod + "()) {\n"); - sb.append(ind(6) + ASTNode.listClass + "<" + getTypeUse().decl() + "> otherList = resolvedElement." + otherSide().getImplAttributeField() + ";\n"); + sb.append(ind(6) + ASTNode.listInterface + "<" + getTypeUse().decl() + "> otherList = resolvedElement." + otherSide().getImplAttributeField() + ";\n"); sb.append(ind(6) + "if (otherList == null) {\n"); sb.append(ind(7) + "otherList = new " + listClass + "<>();\n"); sb.append(ind(6) + "}\n"); @@ -79,11 +79,11 @@ aspect BackendBidirectionalAPI { String addMethodDecl1 = "void " + getTypeUse().decl() + ".add" + (useJastAddNames ? "" : "To") + nameCapitalized() + "(" + ofTypeDecl() + " o)"; sb.append(ind(1) + "public " + addMethodDecl1 + " {\n"); sb.append(ind(2) + "assertNotNull(o);\n"); - sb.append(ind(2) + ASTNode.listClass + "<" + ofTypeDecl() + "> list = " + getImplAttributeField() + ";\n"); + sb.append(ind(2) + ASTNode.listInterface + "<" + ofTypeDecl() + "> list = " + getImplAttributeField() + ";\n"); sb.append(ind(2) + "if (list == null) {\n"); sb.append(ind(3) + "list = new " + ASTNode.listClass + "<>();\n"); sb.append(ind(2) + "}\n"); - sb.append(ind(2) + ASTNode.listClass + "<" + otherSide().ofTypeDecl() + "> list2 = o." + otherSide().getImplAttributeField() + ";\n"); + sb.append(ind(2) + ASTNode.listInterface + "<" + otherSide().ofTypeDecl() + "> list2 = o." + otherSide().getImplAttributeField() + ";\n"); sb.append(ind(2) + "if (list2 == null) {\n"); sb.append(ind(3) + "list2 = new "+ ASTNode.listClass + "<>();\n"); sb.append(ind(2) + "}\n"); @@ -97,11 +97,11 @@ aspect BackendBidirectionalAPI { String addMethodDecl2 = "void " + getTypeUse().decl() + ".add" + (useJastAddNames ? "" : "To") + nameCapitalized() + "(int index, " + ofTypeDecl() + " o)"; sb.append(ind(1) + "public " + addMethodDecl2 + " {\n"); sb.append(ind(2) + "assertNotNull(o);\n"); - sb.append(ind(2) + ASTNode.listClass + "<" + ofTypeDecl() + "> list = " + getImplAttributeField() + ";\n"); + sb.append(ind(2) + ASTNode.listInterface + "<" + ofTypeDecl() + "> list = " + getImplAttributeField() + ";\n"); sb.append(ind(2) + "if (list == null) {\n"); sb.append(ind(3) + "list = new " + ASTNode.listClass + "<>();\n"); sb.append(ind(2) + "}\n"); - sb.append(ind(2) + ASTNode.listClass + "<" + otherSide().ofTypeDecl() + "> list2 = o." + otherSide().getImplAttributeField() + ";\n"); + sb.append(ind(2) + ASTNode.listInterface + "<" + otherSide().ofTypeDecl() + "> list2 = o." + otherSide().getImplAttributeField() + ";\n"); sb.append(ind(2) + "if (list2 == null) {\n"); sb.append(ind(3) + "list2 = new "+ ASTNode.listClass + "<>();\n"); sb.append(ind(2) + "}\n"); @@ -115,9 +115,9 @@ aspect BackendBidirectionalAPI { String removeMethodDecl = "void " + getTypeUse().decl() + ".remove" + (useJastAddNames ? "" : "From") + nameCapitalized() + "(" + ofTypeDecl() + " o)"; sb.append(ind(1) + "public " + removeMethodDecl + " {\n"); sb.append(ind(2) + "assertNotNull(o);\n"); - sb.append(ind(2) + ASTNode.listClass + "<" + ofTypeDecl() + "> list = " + getImplAttributeField() + ";\n"); + sb.append(ind(2) + ASTNode.listInterface + "<" + ofTypeDecl() + "> list = " + getImplAttributeField() + ";\n"); sb.append(ind(2) + "if (list != null && list.remove(o)) {\n"); - sb.append(ind(3) + ASTNode.listClass + "<" + otherSide().ofTypeDecl() + "> list2 = o." + otherSide().getImplAttributeField() + ";\n"); + sb.append(ind(3) + ASTNode.listInterface + "<" + otherSide().ofTypeDecl() + "> list2 = o." + otherSide().getImplAttributeField() + ";\n"); sb.append(ind(3) + "if (list2 != null) list2.remove(this);\n"); sb.append(ind(3) + "set" + getImplAttributeName() + "(list);\n"); sb.append(ind(3) + "o.set" + otherSide().getImplAttributeName() + "(list2);\n"); @@ -143,7 +143,7 @@ aspect BackendBidirectionalAPI { String getMethodDecl = "java.util.List<" + ofTypeDecl() + "> " + getTypeUse().decl() + "." + name() + "()"; sb.append("public " + getMethodDecl + " {\n"); } - sb.append(ind(2) + ASTNode.listClass + "<" + ofTypeDecl() + "> l = get" + getImplAttributeName() + "();\n"); + sb.append(ind(2) + ASTNode.listInterface + "<" + ofTypeDecl() + "> l = get" + getImplAttributeName() + "();\n"); // resolve the entire list if (resolverHelper | serializer) { sb.append(ind(2) + "if (l != null) {\n"); @@ -152,7 +152,7 @@ aspect BackendBidirectionalAPI { sb.append(ind(4) + ofTypeDecl() + " element = l.get(i);\n"); sb.append(ind(4) + "if (element." + isUnresolvedMethod + "()) {\n"); sb.append(ind(5) + "changed = true;\n"); - sb.append(ind(5) + ofTypeDecl() + " resolvedElement = resolve" + nameCapitalized() + globallyResolvePostfix + "(element." + asUnresolvedMethod + "()." + getUnresolvedTokenMethod + "(), i);\n"); + sb.append(ind(5) + ofTypeDecl() + " resolvedElement = resolve" + nameCapitalized() + resolvePostfix + "(element." + asUnresolvedMethod + "()." + getUnresolvedTokenMethod + "(), i);\n"); sb.append(ind(5) + "if (element." + asUnresolvedMethod + "()." + getUnresolvedResolveOppositeMethod + "()) {\n"); sb.append(ind(6) + getTypeUse().decl() + " oldTarget = resolvedElement." + otherSide().getImplAttributeField() + ";\n"); sb.append(ind(6) + "if (oldTarget != null && oldTarget != this) {\n"); @@ -183,11 +183,11 @@ aspect BackendBidirectionalAPI { sb.append(ind(1) + "public " + addMethodDecl1 + " {\n"); sb.append(ind(2) + "assertNotNull(o);\n"); sb.append(ind(2) + "if (o != null && o." + otherSide().getImplAttributeField() + " != null) {\n"); - sb.append(ind(3) + ASTNode.listClass + "<" + ofTypeDecl() + "> list2 = o." + otherSide().getImplAttributeField() + "." + getImplAttributeField() + ";\n"); + sb.append(ind(3) + ASTNode.listInterface + "<" + ofTypeDecl() + "> list2 = o." + otherSide().getImplAttributeField() + "." + getImplAttributeField() + ";\n"); sb.append(ind(3) + "if (list2.remove(o))\n"); sb.append(ind(4) + "o." + otherSide().getImplAttributeField() + ".set" + getImplAttributeName() + "(list2);\n"); sb.append(ind(2) + "}\n"); - sb.append(ind(2) + ASTNode.listClass + "<" + ofTypeDecl() + "> list = " + getImplAttributeField() + ";\n"); + sb.append(ind(2) + ASTNode.listInterface + "<" + ofTypeDecl() + "> list = " + getImplAttributeField() + ";\n"); sb.append(ind(2) + "if (list == null) {\n"); sb.append(ind(3) + "list = new " + ASTNode.listClass + "<>();\n"); sb.append(ind(2) + "}\n"); @@ -201,11 +201,11 @@ aspect BackendBidirectionalAPI { sb.append(ind(1) + "public " + addMethodDecl2 + " {\n"); sb.append(ind(2) + "assertNotNull(o);\n"); sb.append(ind(2) + "if (o != null && o." + otherSide().getImplAttributeField() + " != null) {\n"); - sb.append(ind(3) + ASTNode.listClass + "<" + ofTypeDecl() + "> list2 = o." + otherSide().getImplAttributeField() + "." + getImplAttributeField() + ";\n"); + sb.append(ind(3) + ASTNode.listInterface + "<" + ofTypeDecl() + "> list2 = o." + otherSide().getImplAttributeField() + "." + getImplAttributeField() + ";\n"); sb.append(ind(3) + "if (list2.remove(o))\n"); sb.append(ind(4) + "o." + otherSide().getImplAttributeField() + ".set" + getImplAttributeName() + "(list2);\n"); sb.append(ind(2) + "}\n"); - sb.append(ind(2) + ASTNode.listClass + "<" + ofTypeDecl() + "> list = " + getImplAttributeField() + ";\n"); + sb.append(ind(2) + ASTNode.listInterface + "<" + ofTypeDecl() + "> list = " + getImplAttributeField() + ";\n"); sb.append(ind(2) + "if (list == null) {\n"); sb.append(ind(3) + "list = new " + ASTNode.listClass + "<>();\n"); sb.append(ind(2) + "}\n"); @@ -218,7 +218,7 @@ aspect BackendBidirectionalAPI { String removeMethodDecl = "void " + getTypeUse().decl() + ".remove" + (useJastAddNames ? "" : "From") + nameCapitalized() + "(" + ofTypeDecl() + " o)"; sb.append(ind(1) + "public " + removeMethodDecl + " {\n"); sb.append(ind(2) + "assertNotNull(o);\n"); - sb.append(ind(2) + ASTNode.listClass + "<" + ofTypeDecl() + "> list = " + getImplAttributeField() + ";\n"); + sb.append(ind(2) + ASTNode.listInterface + "<" + ofTypeDecl() + "> list = " + getImplAttributeField() + ";\n"); sb.append(ind(2) + "if (list != null && list.remove(o)) {\n"); sb.append(ind(3) + "set" + getImplAttributeName() + "(list);\n"); sb.append(ind(3) + "if (o." + otherSide().getImplAttributeField() + " == this) {\n"); @@ -236,7 +236,7 @@ aspect BackendBidirectionalAPI { sb.append(ind(2) + "assertNotNull(o);\n"); } sb.append(ind(2) + "if (" + getImplAttributeField() + " != null) {\n"); - sb.append(ind(3) + ASTNode.listClass + "<" + getTypeUse().decl() + "> list2 = " + getImplAttributeField() + "." + otherSide().getImplAttributeField() + ";\n"); + sb.append(ind(3) + ASTNode.listInterface + "<" + getTypeUse().decl() + "> list2 = " + getImplAttributeField() + "." + otherSide().getImplAttributeField() + ";\n"); sb.append(ind(3) + "list2.remove(this);\n"); sb.append(ind(3) + getImplAttributeField() + "." + "set" + otherSide().getImplAttributeName() + "(list2);\n"); sb.append(ind(2) + "}\n"); @@ -246,7 +246,7 @@ aspect BackendBidirectionalAPI { if (isOpt()) { sb.append(ind(2) + "if (o != null) {\n"); } - sb.append(ind(ind) + ASTNode.listClass + "<" + getTypeUse().decl() + "> list = o." + otherSide().getImplAttributeField() + ";\n"); + sb.append(ind(ind) + ASTNode.listInterface + "<" + getTypeUse().decl() + "> list = o." + otherSide().getImplAttributeField() + ";\n"); sb.append(ind(ind) + "if (list == null) {\n"); sb.append(ind(ind+1) + "list = new " + ASTNode.listClass + "<>();\n"); sb.append(ind(ind) + "}\n"); diff --git a/src/main/jastadd/backend/DirectedAPI.jadd b/src/main/jastadd/backend/DirectedAPI.jadd index 26a6896781877baf4d48505f689a4fc66e5a3245..e5e315e1fff49fd759af0f4c0789b9d3a32c807b 100644 --- a/src/main/jastadd/backend/DirectedAPI.jadd +++ b/src/main/jastadd/backend/DirectedAPI.jadd @@ -30,7 +30,7 @@ aspect BackendDirectedAPI { String getMethodDecl = "java.util.List<" + ofTypeDecl() + "> " + getTypeUse().decl() + "." + name() + "()"; sb.append("public " + getMethodDecl + " {\n"); } - sb.append(ind(2) + ASTNode.listClass + "<" + ofTypeDecl() + "> l = get" + getImplAttributeName() + "();\n"); + sb.append(ind(2) + ASTNode.listInterface + "<" + ofTypeDecl() + "> l = get" + getImplAttributeName() + "();\n"); // resolve the entire list if (resolverHelper | serializer) { sb.append(ind(2) + "if (l != null) {\n"); @@ -39,7 +39,7 @@ aspect BackendDirectedAPI { sb.append(ind(4) + ofTypeDecl() + " element = l.get(i);\n"); sb.append(ind(4) + "if (element." + isUnresolvedMethod + "()) {\n"); sb.append(ind(5) + "changed = true;\n"); - sb.append(ind(5) + ofTypeDecl() + " resolvedElement = resolve" + nameCapitalized() + "ByToken(element." + asUnresolvedMethod + "()." + getUnresolvedTokenMethod + "(), i);\n"); + sb.append(ind(5) + ofTypeDecl() + " resolvedElement = " + resolvePrefix + "" + nameCapitalized() + "" + resolvePostfix + "(element." + asUnresolvedMethod + "()." + getUnresolvedTokenMethod + "(), i);\n"); sb.append(ind(5) + "l.set(i, resolvedElement);\n"); sb.append(ind(4) + "}\n"); sb.append(ind(3) + "}\n"); @@ -55,7 +55,7 @@ aspect BackendDirectedAPI { String addMethodDecl1 = "void " + getTypeUse().decl() + ".add" + (useJastAddNames ? "" : "To") + nameCapitalized() + "(" + ofTypeDecl() + " o)"; sb.append(ind(1) + "public " + addMethodDecl1 + " {\n"); sb.append(ind(2) + "assertNotNull(o);\n"); - sb.append(ind(2) + ASTNode.listClass + "<" + ofTypeDecl() + "> list = " + getImplAttributeField() + ";\n"); + sb.append(ind(2) + ASTNode.listInterface + "<" + ofTypeDecl() + "> list = " + getImplAttributeField() + ";\n"); sb.append(ind(2) + "if (list == null) {\n"); sb.append(ind(3) + "list = new " + ASTNode.listClass + "<>();\n"); sb.append(ind(2) + "}\n"); @@ -67,7 +67,7 @@ aspect BackendDirectedAPI { String addMethodDecl2 = "void " + getTypeUse().decl() + ".add" + (useJastAddNames ? "" : "To") + nameCapitalized() + "(int index, " + ofTypeDecl() + " o)"; sb.append(ind(1) + "public " + addMethodDecl2 + " {\n"); sb.append(ind(2) + "assertNotNull(o);\n"); - sb.append(ind(2) + ASTNode.listClass + "<" + ofTypeDecl() + "> list = " + getImplAttributeField() + ";\n"); + sb.append(ind(2) + ASTNode.listInterface + "<" + ofTypeDecl() + "> list = " + getImplAttributeField() + ";\n"); sb.append(ind(2) + "if (list == null) {\n"); sb.append(ind(3) + "list = new " + ASTNode.listClass + "<>();\n"); sb.append(ind(2) + "}\n"); @@ -79,7 +79,7 @@ aspect BackendDirectedAPI { String removeMethodDecl = "void " + getTypeUse().decl() + ".remove" + (useJastAddNames ? "" : "From") + nameCapitalized() + "(" + ofTypeDecl() + " o)"; sb.append(ind(1) + "public " + removeMethodDecl + " {\n"); sb.append(ind(2) + "assertNotNull(o);\n"); - sb.append(ind(2) + ASTNode.listClass + "<" + ofTypeDecl() + "> list = " + getImplAttributeField() + ";\n"); + sb.append(ind(2) + ASTNode.listInterface + "<" + ofTypeDecl() + "> list = " + getImplAttributeField() + ";\n"); sb.append(ind(2) + "if (list != null && list.remove(o)) {\n"); sb.append(ind(3) + "set" + getImplAttributeName() + "(list);\n"); sb.append(ind(2) + "}\n"); diff --git a/src/main/jastadd/backend/LowerBoundCheck.jadd b/src/main/jastadd/backend/LowerBoundCheck.jadd index e7690cacca84527435dc09e7e6a1ff6991089795..12c57b676dccb4b706c2e0b694407f3844a26479 100644 --- a/src/main/jastadd/backend/LowerBoundCheck.jadd +++ b/src/main/jastadd/backend/LowerBoundCheck.jadd @@ -6,7 +6,7 @@ aspect LowerBoundCheck { sb.append(ind(1) + "public java.util.List<Pair<ASTNode, String>> " + "ASTNode.getLowerBoundsViolations() {\n"); - sb.append(ind(2) + "ArrayList<Pair<ASTNode, String>> list = new ArrayList<>();\n"); + sb.append(ind(2) + "" + ASTNode.listInterface + "<Pair<ASTNode, String>> list = new " + ASTNode.listClass + "<>();\n"); sb.append(ind(2) + "computeLowerBoundsViolations(list);\n"); sb.append(ind(2) + "return list;\n"); sb.append(ind(1) + "}\n"); diff --git a/src/main/jastadd/backend/NameResolution.jadd b/src/main/jastadd/backend/NameResolution.jadd index 13aa310e9b89b4a6b02a16aef50381b93450b97a..e4fa19c13455d60127a12c77ec310cf081d12e1d 100644 --- a/src/main/jastadd/backend/NameResolution.jadd +++ b/src/main/jastadd/backend/NameResolution.jadd @@ -8,8 +8,9 @@ aspect NameResolutionHelper { protected static final String ASTNode.createReferenceMethod = "createReference"; protected static final String ASTNode.createRefMethod = "createRef"; protected static final String ASTNode.createRefDirectionMethod = "createRefDirection"; + protected static final String ASTNode.resolvePrefix = "resolve"; protected static final String ASTNode.globallyResolvePrefix = "globallyResolve"; - protected static final String ASTNode.globallyResolvePostfix = "ByToken"; + protected static final String ASTNode.resolvePostfix = "ByToken"; protected static final String ASTNode.resolveAllMethod = "resolveAll"; protected static final String ASTNode.treeResolveAllMethod = "treeResolveAll"; @@ -87,7 +88,7 @@ aspect NameResolutionHelper { public void RelationComponent.generateContextDependentRefCreation(StringBuilder sb) { sb.append(ind(1) + "// context-dependent reference creation\n"); - sb.append(ind(1) + "syn String " + getTypeUse().decl() + ".createRefTo" + nameCapitalized() + "(" + ofTypeDecl() + " target) {\n"); + sb.append(ind(1) + "syn String " + getTypeUse().decl() + "." + createRefMethod + "To" + nameCapitalized() + "(" + ofTypeDecl() + " target) {\n"); sb.append(ind(2) + "// default to context-independent reference creation\n"); sb.append(ind(2) + "return target." + createReferenceMethod + "();\n"); sb.append(ind(1) + "}\n"); @@ -161,8 +162,8 @@ aspect NameResolutionHelper { public void TypeDecl.generateContextIndependentNameResolution(StringBuilder sb) { sb.append(ind(1) + "// context-independent name resolution\n"); - sb.append(ind(1) + "uncache ASTNode." + globallyResolvePrefix + getID() + globallyResolvePostfix + "(String id);\n"); - sb.append(ind(1) + "syn " + getID() + " ASTNode." + globallyResolvePrefix + getID() + globallyResolvePostfix + "(String id) {\n"); + sb.append(ind(1) + "uncache ASTNode." + globallyResolvePrefix + getID() + resolvePostfix + "(String id);\n"); + sb.append(ind(1) + "syn " + getID() + " ASTNode." + globallyResolvePrefix + getID() + resolvePostfix + "(String id) {\n"); if (serializer && !manualReferences) { if (jsonPointer) { sb.append(ind(2) + "return (" + getID() + ") resolveJsonPointer(id);\n"); @@ -206,30 +207,30 @@ aspect NameResolutionHelper { public void ManyRelationComponent.generateContextDependentNameResolution(StringBuilder sb) { if (serializer && !resolverHelper) { - sb.append(ind(1) + ofTypeDecl() + " " + getTypeUse().decl() + ".resolve" + nameCapitalized() + globallyResolvePostfix + "(String id, int position) {\n"); + sb.append(ind(1) + ofTypeDecl() + " " + getTypeUse().decl() + ".resolve" + nameCapitalized() + resolvePostfix + "(String id, int position) {\n"); sb.append(ind(2) + "return (" + ofTypeDecl() + ") " + globallyResolvePrefix + "ASTNodeByUID(id);\n"); sb.append(ind(1) + "}\n"); } else { sb.append(ind(1) + "// context-dependent name resolution\n"); - sb.append(ind(1) + "uncache " + getTypeUse().decl() + ".resolve" + nameCapitalized() + globallyResolvePostfix + "(String id, int position);\n"); - sb.append(ind(1) + "syn " + ofTypeDecl() + " " + getTypeUse().decl() + ".resolve" + nameCapitalized() + globallyResolvePostfix + "(String id, int position) {\n"); + sb.append(ind(1) + "uncache " + getTypeUse().decl() + ".resolve" + nameCapitalized() + resolvePostfix + "(String id, int position);\n"); + sb.append(ind(1) + "syn " + ofTypeDecl() + " " + getTypeUse().decl() + ".resolve" + nameCapitalized() + resolvePostfix + "(String id, int position) {\n"); sb.append(ind(2) + "// default to context-independent name resolution\n"); - sb.append(ind(2) + "return " + globallyResolvePrefix + ofTypeDecl() + globallyResolvePostfix + "(id);\n"); + sb.append(ind(2) + "return " + globallyResolvePrefix + ofTypeDecl() + resolvePostfix + "(id);\n"); sb.append(ind(1) + "}\n"); } } public void RelationComponent.generateDirectedContextDependentNameResolution(StringBuilder sb) { if (serializer && !resolverHelper) { - sb.append(ind(1) + ofTypeDecl() + " " + getTypeUse().decl() + ".resolve" + nameCapitalized() + globallyResolvePostfix + "(String id) {\n"); + sb.append(ind(1) + ofTypeDecl() + " " + getTypeUse().decl() + ".resolve" + nameCapitalized() + resolvePostfix + "(String id) {\n"); sb.append(ind(2) + "return (" + ofTypeDecl() + ") " + globallyResolvePrefix + "ASTNodeByUID(id);\n"); sb.append(ind(1) + "}\n"); } else { sb.append(ind(1) + "// context-dependent name resolution\n"); - sb.append(ind(1) + "uncache " + getTypeUse().decl() + ".resolve" + nameCapitalized() + globallyResolvePostfix + "(String id);\n"); - sb.append(ind(1) + "syn " + ofTypeDecl() + " " + getTypeUse().decl() + ".resolve" + nameCapitalized() + globallyResolvePostfix + "(String id) {\n"); + sb.append(ind(1) + "uncache " + getTypeUse().decl() + ".resolve" + nameCapitalized() + resolvePostfix + "(String id);\n"); + sb.append(ind(1) + "syn " + ofTypeDecl() + " " + getTypeUse().decl() + ".resolve" + nameCapitalized() + resolvePostfix + "(String id) {\n"); sb.append(ind(2) + "// default to context-independent name resolution\n"); - sb.append(ind(2) + "return " + globallyResolvePrefix + ofTypeDecl() + globallyResolvePostfix + "(id);\n"); + sb.append(ind(2) + "return " + globallyResolvePrefix + ofTypeDecl() + resolvePostfix + "(id);\n"); sb.append(ind(1) + "}\n"); } } diff --git a/src/main/jastadd/backend/Serializer.jadd b/src/main/jastadd/backend/Serializer.jadd index 90ba24e30df96ba67eb8d3bec543347648d58879..9e89e7f54ca786727178ebb8d4817ce49170d3fd 100644 --- a/src/main/jastadd/backend/Serializer.jadd +++ b/src/main/jastadd/backend/Serializer.jadd @@ -209,7 +209,7 @@ aspect Serializer { if (jsonPointer) { sb.append(ind(indent) + "g.writeStringField(\"" + getID() + "\", get" + getID() + "().jsonPointer());\n"); } else if (manualReferences) { - sb.append(ind(indent) + "g.writeStringField(\"" + getID() + "\", createRefTo" + getID() + "(" + getID() + "()));\n"); + sb.append(ind(indent) + "g.writeStringField(\"" + getID() + "\", " + createRefMethod + "To" + getID() + "(" + getID() + "()));\n"); } else { sb.append(ind(indent) + "g.writeStringField(\"" + getID() + "\", get" + getID() + "().unique$Id());\n"); } @@ -217,7 +217,7 @@ aspect Serializer { if (jsonPointer) { sb.append(ind(indent) + "g.writeStringField(\"" + getID() + "\", " + getID() + "().jsonPointer());\n"); } else if (manualReferences) { - sb.append(ind(indent) + "g.writeStringField(\"" + getID() + "\", createRefTo" + getID() + "(" + getID() + "()));\n"); + sb.append(ind(indent) + "g.writeStringField(\"" + getID() + "\", " + createRefMethod + "To" + getID() + "(" + getID() + "()));\n"); } else { sb.append(ind(indent) + "g.writeStringField(\"" + getID() + "\", " + getID() + "().unique$Id());\n"); } @@ -238,7 +238,7 @@ aspect Serializer { if (jsonPointer) { sb.append(ind(indent + 1) + "g.writeStringField(\"" + getID() + "\", " + getID() + "().jsonPointer());\n"); } else if (manualReferences) { - sb.append(ind(indent + 1) + "g.writeStringField(\"" + getID() + "\", " + "createRefTo" + getID() + "(" + getID() + "()));\n"); + sb.append(ind(indent + 1) + "g.writeStringField(\"" + getID() + "\", " + "" + createRefMethod + "To" + getID() + "(" + getID() + "()));\n"); } else { sb.append(ind(indent + 1) + "g.writeStringField(\"" + getID() + "\", " + getID() + "().unique$Id());\n"); } @@ -256,7 +256,7 @@ aspect Serializer { if (jsonPointer) { sb.append(ind(indent + 1) + "g.writeString(child.jsonPointer());\n"); } else if (manualReferences) { - sb.append(ind(indent + 1) + "g.writeString(createRefTo" + getID() + "(child));\n"); + sb.append(ind(indent + 1) + "g.writeString(" + createRefMethod + "To" + getID() + "(child));\n"); }else { sb.append(ind(indent + 1) + "g.writeString(child.unique$Id());\n"); } @@ -565,11 +565,11 @@ aspect Serializer { sb.append(ind(1) + " return null;\n"); sb.append(ind(1) + "}\n"); sb.append("\n"); - sb.append(ind(1) + "ASTNode ASTNode.globallyResolveASTNodeByUID(String uid) {\n"); + sb.append(ind(1) + "ASTNode ASTNode." + globallyResolvePrefix + "ASTNodeByUID(String uid) {\n"); sb.append(ind(2) + "if (getParent() == null) {\n"); sb.append(ind(3) + "return uid$Map().get(uid).get();\n"); sb.append(ind(2) + "} else {\n"); - sb.append(ind(3) + "return getParent().globallyResolveASTNodeByUID(uid);\n"); + sb.append(ind(3) + "return getParent()." + globallyResolvePrefix + "ASTNodeByUID(uid);\n"); sb.append(ind(2) + "}\n"); sb.append(ind(1) + "}\n"); sb.append("\n"); @@ -616,18 +616,18 @@ aspect Serializer { } public void OneRelationComponent.deserialize(StringBuilder sb, int indent) { - sb.append(ind(indent) + "element.set" + nameCapitalized() + "(" + ofTypeDecl().getID() + ".createRefDirection(relations.get(\"" + getID() + "\").asText()));\n"); + sb.append(ind(indent) + "element.set" + nameCapitalized() + "(" + ofTypeDecl().getID() + "." + createRefMethod + "Direction(relations.get(\"" + getID() + "\").asText()));\n"); sb.append(ind(indent - 1) + "} else {\n"); sb.append(ind(indent) + "throw new DeserializationException(\"deserializer of missing mandatory relation child " + getID() + "\");\n"); } public void OptionalRelationComponent.deserialize(StringBuilder sb, int indent) { - sb.append(ind(indent) + "element.set" + nameCapitalized() + "(" + ofTypeDecl().getID() + ".createRefDirection(relations.get(\"" + getID() + "\").asText()));\n"); + sb.append(ind(indent) + "element.set" + nameCapitalized() + "(" + ofTypeDecl().getID() + "." + createRefMethod + "Direction(relations.get(\"" + getID() + "\").asText()));\n"); } public void ManyRelationComponent.deserialize(StringBuilder sb, int indent) { sb.append(ind(indent) + "for (" + jsonNodeType + " child : relations.get(\"" + getID() + "\")) {\n"); - sb.append(ind(indent + 1) + "element.add" + (useJastAddNames?"":"To") + nameCapitalized() + "(" + ofTypeDecl().getID() + ".createRefDirection(child.asText()));\n"); + sb.append(ind(indent + 1) + "element.add" + (useJastAddNames?"":"To") + nameCapitalized() + "(" + ofTypeDecl().getID() + "." + createRefMethod + "Direction(child.asText()));\n"); sb.append(ind(indent) + "}\n"); } }