test/langtools/tools/javac/api/ast/CodeBuilder.java
branchjlahoda-tree-builder
changeset 57296 464cc8d22d94
parent 57295 5497ee9d40f4
child 57297 ad0be596956b
--- a/test/langtools/tools/javac/api/ast/CodeBuilder.java	Thu Mar 28 11:31:30 2019 +0100
+++ b/test/langtools/tools/javac/api/ast/CodeBuilder.java	Fri Mar 29 10:12:18 2019 +0100
@@ -37,6 +37,8 @@
 import java.util.Locale;
 import java.util.Set;
 
+import com.sun.source.tree.MemberSelectTree;
+import com.sun.source.tree.ParameterizedTypeTree;
 
 public class CodeBuilder {
 
@@ -48,7 +50,21 @@
             @Override
             public Void visitClass(ClassTree node, Void p) {
                 result.append(currentBuilder() + "._class(\"" + node.getSimpleName() + "\", ");
-                doScan("C", () -> super.visitClass(node, p));
+                doScan("C", () -> {
+//                    R r = scan(node.getModifiers(), p);
+//                    r = scanAndReduce(node.getTypeParameters(), p, r);
+                    if (node.getExtendsClause() != null) {
+                        result.append(currentBuilder() + ".superclass(");
+                        handleDeclaredType(node.getExtendsClause());
+                        result.append(")");
+                    }
+                    for (Tree impl : node.getImplementsClause()) {
+                        result.append(currentBuilder() + ".superinterface(");
+                        handleDeclaredType(impl);
+                        result.append(")");
+                    }
+                    scan(node.getMembers(), p);
+                });
                 result.append(")");
                 return null;
             }
@@ -83,6 +99,20 @@
             }
 
             @Override
+            public Void visitParameterizedType(ParameterizedTypeTree node, Void p) {
+                scan(node.getType(), null);
+                result.append(", ");
+                doScan("A", () -> {
+                    for (Tree ta : node.getTypeArguments()) {
+                        result.append(currentBuilder() + ".type(");
+                        handleDeclaredType(ta);
+                        result.append(")");
+                    }
+                });
+                return null;
+            }
+
+            @Override
             public Void visitLiteral(LiteralTree node, Void p) {
                 result.append(currentBuilder() + ".literal(" + node.getValue() + ")");
                 return null;
@@ -104,11 +134,30 @@
             }
 
             @Override
+            public Void visitMemberSelect(MemberSelectTree node, Void p) {
+                //TODO: use ident(String...) for "flat" selects
+                result.append(currentBuilder() + ".select(");
+                doScan("E", node.getExpression());
+                result.append(", \"");
+                result.append(node.getIdentifier());
+                result.append("\")");
+                return null;
+            }
+
+            @Override
             public Void visitIdentifier(IdentifierTree node, Void p) {
                 result.append(currentBuilder() + ".ident(\"" + node.getName() + "\")");
                 return null;
             }
 
+            private void handleDeclaredType(Tree t) {
+                doScan("T", () -> {
+                    result.append(currentBuilder() + "._class(");
+                    doScan("Q", t);
+                    result.append(")");
+                });
+            }
+
             private String currentBuilder() {
                 if (currentBuilder != null) {
                     String res = currentBuilder;