Skip to content
Snippets Groups Projects
Commit 647e1f2d authored by Johannes Mey's avatar Johannes Mey
Browse files

remove import statement from generated code (this also implies Instant and...

remove import statement from generated code (this also implies Instant and Period must be qualified everywhere). some additional minor code quality improvements.
parent 3afecd7c
Branches
Tags
1 merge request!13Better api generation
...@@ -141,7 +141,7 @@ aspect ComponentAnalysis { ...@@ -141,7 +141,7 @@ aspect ComponentAnalysis {
//--- relationComponentsTransitive --- //--- relationComponentsTransitive ---
syn Collection<RelationComponent> TypeDecl.relationComponentsTransitive() { syn Collection<RelationComponent> TypeDecl.relationComponentsTransitive() {
ArrayList<RelationComponent> list = new ArrayList<>(); Collection<RelationComponent> list = new ArrayList<>();
if (hasSuper() && getSuper().decl() != null) { if (hasSuper() && getSuper().decl() != null) {
list.addAll(getSuper().decl().relationComponentsTransitive()); list.addAll(getSuper().decl().relationComponentsTransitive());
} }
...@@ -192,7 +192,7 @@ aspect InstanceSupplier { ...@@ -192,7 +192,7 @@ aspect InstanceSupplier {
//--- subTypeDecls --- //--- subTypeDecls ---
syn Collection<TypeDecl> TypeDecl.subTypeDecls() { syn Collection<TypeDecl> TypeDecl.subTypeDecls() {
java.util.List<TypeDecl> subDecls = new ArrayList(); Collection<TypeDecl> subDecls = new ArrayList();
for (TypeDecl decl : program().getTypeDeclList()) { for (TypeDecl decl : program().getTypeDeclList()) {
if (decl.hasSuper() && decl.getSuper().getID().equals(getID())) { if (decl.hasSuper() && decl.getSuper().getID().equals(getID())) {
subDecls.add(decl); subDecls.add(decl);
......
import java.io.ByteArrayOutputStream;
import java.io.PrintStream;
import java.lang.reflect.InvocationTargetException;
// We have been careful to not import many types here because the imports are added for
// _ALL_ AST nodes and can cause collisions in the abstract grammar namespace.
aspect DumpTree { aspect DumpTree {
private static final String ASTNode.DUMP_TREE_INDENT = " "; private static final String ASTNode.DUMP_TREE_INDENT = " ";
public String ASTNode.dumpTree() { public String ASTNode.dumpTree() {
ByteArrayOutputStream bytes = new ByteArrayOutputStream(); java.io.ByteArrayOutputStream bytes = new java.io.ByteArrayOutputStream();
dumpTree(new PrintStream(bytes)); dumpTree(new java.io.PrintStream(bytes));
return bytes.toString(); return bytes.toString();
} }
public void ASTNode.dumpTree(PrintStream out) { public void ASTNode.dumpTree(java.io.PrintStream out) {
dumpTree(out, ""); dumpTree(out, "");
out.flush(); out.flush();
} }
public void ASTNode.dumpTree(PrintStream out, String indent) { public void ASTNode.dumpTree(java.io.PrintStream out, String indent) {
out.print(indent + getClass().getSimpleName()); out.print(indent + getClass().getSimpleName());
out.print(getTokens()); out.print(getTokens());
String extra = extraDumpInfo(); String extra = extraDumpInfo();
...@@ -40,26 +33,20 @@ aspect DumpTree { ...@@ -40,26 +33,20 @@ aspect DumpTree {
public String ASTNode.extraDumpInfo() { return ""; } public String ASTNode.extraDumpInfo() { return ""; }
public String ASTNode.getTokens() { public String ASTNode.getTokens() {
java.util.TreeSet<java.lang.reflect.Method> methods = new java.util.TreeSet<>( java.util.TreeSet<java.lang.reflect.Method> methods = new java.util.TreeSet<>(Comparator.comparing(Method::getName));
new java.util.Comparator<java.lang.reflect.Method>() {
public int compare(java.lang.reflect.Method m1, java.lang.reflect.Method m2) {
return m1.getName().compareTo(m2.getName());
}
});
methods.addAll(java.util.Arrays.asList(getClass().getMethods())); methods.addAll(java.util.Arrays.asList(getClass().getMethods()));
String result = ""; StringBuilder result = new StringBuilder();
for (java.lang.reflect.Method method : methods) { for (java.lang.reflect.Method method : methods) {
ASTNodeAnnotation.Token token = method.getAnnotation(ASTNodeAnnotation.Token.class); ASTNodeAnnotation.Token token = method.getAnnotation(ASTNodeAnnotation.Token.class);
if (token != null) { if (token != null) {
try { try {
result += String.format(" %s=\"%s\"", token.name(), method.invoke(this)); result.append(String.format(" %s=\"%s\"", token.name(), method.invoke(this)));
} catch (IllegalAccessException ignored) { } catch (IllegalAccessException | java.lang.reflect.InvocationTargetException ignored) {
} catch (InvocationTargetException ignored) {
} }
} }
} }
return result; return result.toString();
} }
} }
\ No newline at end of file
...@@ -3,6 +3,7 @@ aspect BackendAbstractGrammar { ...@@ -3,6 +3,7 @@ aspect BackendAbstractGrammar {
public static String ASTNode.listInterface = "java.util.List"; public static String ASTNode.listInterface = "java.util.List";
public static String ASTNode.listClass = "java.util.ArrayList"; public static String ASTNode.listClass = "java.util.ArrayList";
public static String ASTNode.jastAddListType = "List"; public static String ASTNode.jastAddListType = "List";
public static String ASTNode.jastAddOptType = "Opt";
public static boolean ASTNode.resolverHelper = false; public static boolean ASTNode.resolverHelper = false;
public static boolean ASTNode.serializer = false; public static boolean ASTNode.serializer = false;
......
...@@ -6,9 +6,6 @@ aspect BackendAspect { ...@@ -6,9 +6,6 @@ aspect BackendAspect {
} }
public void Program.generateAspect(StringBuilder sb) { public void Program.generateAspect(StringBuilder sb) {
sb.append("import java.util.Collections;\n");
sb.append("import java.time.Instant;\n");
sb.append("import java.time.Period;\n");
sb.append("aspect RelAstAPI {\n"); sb.append("aspect RelAstAPI {\n");
for (TypeDecl td: getTypeDecls()) { for (TypeDecl td: getTypeDecls()) {
...@@ -52,7 +49,7 @@ aspect BackendAspect { ...@@ -52,7 +49,7 @@ aspect BackendAspect {
return ASTNode.jastAddListType + "<" + getTypeUse() + "> " + getID(); return ASTNode.jastAddListType + "<" + getTypeUse() + "> " + getID();
} }
public String OptComponent.constructorParameter() { public String OptComponent.constructorParameter() {
return "Opt<" + getTypeUse() + "> " + getID(); return ASTNode.jastAddOptType + "<" + getTypeUse() + "> " + getID();
} }
public String Component.constructorSetMethod() { public String Component.constructorSetMethod() {
return "set" + getID(); return "set" + getID();
......
...@@ -72,7 +72,7 @@ aspect BackendBidirectionalAPI { ...@@ -72,7 +72,7 @@ aspect BackendBidirectionalAPI {
sb.append(ind(3) + "}\n"); sb.append(ind(3) + "}\n");
sb.append(ind(2) + "}\n"); sb.append(ind(2) + "}\n");
} }
sb.append(ind(2) + "return l != null ? Collections.unmodifiableList(l) : Collections.emptyList();\n"); sb.append(ind(2) + "return l != null ? java.util.Collections.unmodifiableList(l) : java.util.Collections.emptyList();\n");
sb.append(ind(1) + "}\n"); sb.append(ind(1) + "}\n");
// Add // Add
...@@ -175,7 +175,7 @@ aspect BackendBidirectionalAPI { ...@@ -175,7 +175,7 @@ aspect BackendBidirectionalAPI {
sb.append(ind(3) + "}\n"); sb.append(ind(3) + "}\n");
sb.append(ind(2) + "}\n"); sb.append(ind(2) + "}\n");
} }
sb.append(ind(2) + "return l != null ? Collections.unmodifiableList(l) : Collections.emptyList();\n"); sb.append(ind(2) + "return l != null ? java.util.Collections.unmodifiableList(l) : java.util.Collections.emptyList();\n");
sb.append(ind(1) + "}\n"); sb.append(ind(1) + "}\n");
// Add // Add
......
...@@ -48,7 +48,7 @@ aspect BackendDirectedAPI { ...@@ -48,7 +48,7 @@ aspect BackendDirectedAPI {
sb.append(ind(3) + "}\n"); sb.append(ind(3) + "}\n");
sb.append(ind(2) + "}\n"); sb.append(ind(2) + "}\n");
} }
sb.append(ind(2) + "return l != null ? Collections.unmodifiableList(l) : Collections.emptyList();\n"); sb.append(ind(2) + "return l != null ? java.util.Collections.unmodifiableList(l) : java.util.Collections.emptyList();\n");
sb.append(ind(1) + "}\n"); sb.append(ind(1) + "}\n");
// Add // Add
......
...@@ -169,10 +169,10 @@ aspect Serializer { ...@@ -169,10 +169,10 @@ aspect Serializer {
case "String": case "String":
sb.append(ind(indent) + "g.writeStringField(\"" + getID() + "\", get" + getID() + "());\n"); sb.append(ind(indent) + "g.writeStringField(\"" + getID() + "\", get" + getID() + "());\n");
break; break;
case "Instant": case "java.time.Instant":
sb.append(ind(indent) + "g.writeStringField(\"" + getID() + "\", get" + getID() + "().toString());\n"); sb.append(ind(indent) + "g.writeStringField(\"" + getID() + "\", get" + getID() + "().toString());\n");
break; break;
case "Period": case "java.time.Period":
sb.append(ind(indent) + "g.writeStringField(\"" + getID() + "\", get" + getID() + "().toString());\n"); sb.append(ind(indent) + "g.writeStringField(\"" + getID() + "\", get" + getID() + "().toString());\n");
break; break;
default: default:
...@@ -390,11 +390,11 @@ aspect Serializer { ...@@ -390,11 +390,11 @@ aspect Serializer {
case "String": case "String":
sb.append(ind(indent) + "element.set" + getID() + "(children.get(\"" + getID() + "\").asText());\n"); sb.append(ind(indent) + "element.set" + getID() + "(children.get(\"" + getID() + "\").asText());\n");
break; break;
case "Instant": case "java.time.Instant":
sb.append(ind(indent) + "element.set" + getID() + "(Instant.parse(children.get(\"" + getID() + "\").asText()));\n"); sb.append(ind(indent) + "element.set" + getID() + "(java.time.Instant.parse(children.get(\"" + getID() + "\").asText()));\n");
break; break;
case "Period": case "java.time.Period":
sb.append(ind(indent) + "element.set" + getID() + "(Period.parse(children.get(\"" + getID() + "\").asText()));\n"); sb.append(ind(indent) + "element.set" + getID() + "(java.time.Period.parse(children.get(\"" + getID() + "\").asText()));\n");
break; break;
default: default:
// assume that the type is an enum. there is no way of checking this here // assume that the type is an enum. there is no way of checking this here
......
...@@ -13,8 +13,8 @@ C:NamedElement ::= D1:D [D2:D] D3:D* ...@@ -13,8 +13,8 @@ C:NamedElement ::= D1:D [D2:D] D3:D*
<C1:char> <C2:Character> <C1:char> <C2:Character>
<T1:String> <T1:String>
<T2> <T2>
<N:Instant> <N:java.time.Instant>
<P:Period> <P:java.time.Period>
<Day:Weekday>; <Day:Weekday>;
D:NamedElement; D:NamedElement;
......
...@@ -13,8 +13,8 @@ C:NamedElement ::= D1:D [D2:D] D3:D* ...@@ -13,8 +13,8 @@ C:NamedElement ::= D1:D [D2:D] D3:D*
<C1:char> <C2:Character> <C1:char> <C2:Character>
<T1:String> <T1:String>
<T2> <T2>
<N:Instant> <N:java.time.Instant>
<P:Period> <P:java.time.Period>
<Day:Weekday>; <Day:Weekday>;
D:NamedElement; D:NamedElement;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment