78 } else {
79 code.append(" switch(i) {\n");
80 }
81 for (String expr : expressions) {
82 code.append("case ");
83 int start = code.length();
84 code.append(expr);
85 spans.add(new SimpleEntry<>((long) start, (long) code.length()));
86 code.append(" -> {}");
87 }
88 code.append(" };\n");
89 }
90 code.append(" }\n" +
91 "}\n");
92 final JavaCompiler tool = ToolProvider.getSystemJavaCompiler();
93 assert tool != null;
94 DiagnosticListener<JavaFileObject> noErrors = d -> { throw new AssertionError(d.getMessage(null)); };
95
96 StringWriter out = new StringWriter();
97 JavacTask ct = (JavacTask) tool.getTask(out, null, noErrors,
98 List.of("--enable-preview", "-source", sourceVersion), null,
99 Arrays.asList(new MyFileObject(code.toString())));
100 CompilationUnitTree cut = ct.parse().iterator().next();
101 Trees trees = Trees.instance(ct);
102 new TreePathScanner<Void, Void>() {
103 @Override
104 public Void visitCase(CaseTree node, Void p) {
105 long start = trees.getSourcePositions().getStartPosition(cut, node.getExpression());
106 long end = trees.getSourcePositions().getEndPosition(cut, node.getExpression());
107 if (!spans.remove(new SimpleEntry<>(start, end))) {
108 throw new AssertionError("Did not find an expression span in expected spans: " +
109 start + "-" + end +
110 " '" + node.getExpression().toString() + "'");
111 }
112 return super.visitCase(node, p);
113 }
114 }.scan(cut, null);
115
116 if (!spans.isEmpty()) {
117 throw new AssertionError("Remaning spans: " + spans);
118 }
|
78 } else {
79 code.append(" switch(i) {\n");
80 }
81 for (String expr : expressions) {
82 code.append("case ");
83 int start = code.length();
84 code.append(expr);
85 spans.add(new SimpleEntry<>((long) start, (long) code.length()));
86 code.append(" -> {}");
87 }
88 code.append(" };\n");
89 }
90 code.append(" }\n" +
91 "}\n");
92 final JavaCompiler tool = ToolProvider.getSystemJavaCompiler();
93 assert tool != null;
94 DiagnosticListener<JavaFileObject> noErrors = d -> { throw new AssertionError(d.getMessage(null)); };
95
96 StringWriter out = new StringWriter();
97 JavacTask ct = (JavacTask) tool.getTask(out, null, noErrors,
98 List.of(), null,
99 Arrays.asList(new MyFileObject(code.toString())));
100 CompilationUnitTree cut = ct.parse().iterator().next();
101 Trees trees = Trees.instance(ct);
102 new TreePathScanner<Void, Void>() {
103 @Override
104 public Void visitCase(CaseTree node, Void p) {
105 long start = trees.getSourcePositions().getStartPosition(cut, node.getExpression());
106 long end = trees.getSourcePositions().getEndPosition(cut, node.getExpression());
107 if (!spans.remove(new SimpleEntry<>(start, end))) {
108 throw new AssertionError("Did not find an expression span in expected spans: " +
109 start + "-" + end +
110 " '" + node.getExpression().toString() + "'");
111 }
112 return super.visitCase(node, p);
113 }
114 }.scan(cut, null);
115
116 if (!spans.isEmpty()) {
117 throw new AssertionError("Remaning spans: " + spans);
118 }
|