author | mcimadamore |
Mon, 31 Aug 2015 17:33:34 +0100 | |
changeset 32454 | b0ac04e0fefe |
child 43769 | c60feafb47db |
permissions | -rw-r--r-- |
32454
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
1 |
/* |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
2 |
* Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved. |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
3 |
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
4 |
* |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
5 |
* This code is free software; you can redistribute it and/or modify it |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
6 |
* under the terms of the GNU General Public License version 2 only, as |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
7 |
* published by the Free Software Foundation. |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
8 |
* |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
9 |
* This code is distributed in the hope that it will be useful, but WITHOUT |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
10 |
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
11 |
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
12 |
* version 2 for more details (a copy is included in the LICENSE file that |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
13 |
* accompanied this code). |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
14 |
* |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
15 |
* You should have received a copy of the GNU General Public License version |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
16 |
* 2 along with this work; if not, write to the Free Software Foundation, |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
17 |
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
18 |
* |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
19 |
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
20 |
* or visit www.oracle.com if you need additional information or have any |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
21 |
* questions. |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
22 |
*/ |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
23 |
|
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
24 |
package combo; |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
25 |
|
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
26 |
import com.sun.source.tree.CompilationUnitTree; |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
27 |
import com.sun.source.util.JavacTask; |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
28 |
import com.sun.source.util.TaskEvent.Kind; |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
29 |
import com.sun.source.util.TaskListener; |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
30 |
import com.sun.tools.javac.api.JavacTool; |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
31 |
import com.sun.tools.javac.util.List; |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
32 |
import combo.ComboParameter.Resolver; |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
33 |
|
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
34 |
import javax.lang.model.element.Element; |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
35 |
import javax.tools.Diagnostic; |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
36 |
import javax.tools.DiagnosticListener; |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
37 |
import javax.tools.JavaFileObject; |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
38 |
import javax.tools.SimpleJavaFileObject; |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
39 |
import java.io.IOException; |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
40 |
import java.io.Writer; |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
41 |
import java.net.URI; |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
42 |
import java.util.HashMap; |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
43 |
import java.util.Map; |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
44 |
import java.util.stream.Collectors; |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
45 |
import java.util.stream.StreamSupport; |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
46 |
|
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
47 |
/** |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
48 |
* This class represents a compilation task associated with a combo test instance. This is a small |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
49 |
* wrapper around {@link JavacTask} which allows for fluent setup style and which makes use of |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
50 |
* the shared compilation context to speedup performances. |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
51 |
*/ |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
52 |
public class ComboTask { |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
53 |
|
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
54 |
/** Sources to be compiled in this task. */ |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
55 |
private List<JavaFileObject> sources = List.nil(); |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
56 |
|
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
57 |
/** Options associated with this task. */ |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
58 |
private List<String> options = List.nil(); |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
59 |
|
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
60 |
/** Diagnostic collector. */ |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
61 |
private DiagnosticCollector diagsCollector = new DiagnosticCollector(); |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
62 |
|
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
63 |
/** Output writer. */ |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
64 |
private Writer out; |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
65 |
|
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
66 |
/** Listeners associated with this task. */ |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
67 |
private List<TaskListener> listeners = List.nil(); |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
68 |
|
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
69 |
/** Underlying javac task object. */ |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
70 |
private JavacTask task; |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
71 |
|
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
72 |
/** Combo execution environment. */ |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
73 |
private ComboTestHelper<?>.Env env; |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
74 |
|
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
75 |
ComboTask(ComboTestHelper<?>.Env env) { |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
76 |
this.env = env; |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
77 |
} |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
78 |
|
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
79 |
/** |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
80 |
* Add a new source to this task. |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
81 |
*/ |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
82 |
public ComboTask withSource(JavaFileObject comboSource) { |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
83 |
sources = sources.prepend(comboSource); |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
84 |
return this; |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
85 |
} |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
86 |
|
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
87 |
/** |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
88 |
* Add a new template source with given name to this task; the template is replaced with |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
89 |
* corresponding combo parameters (as defined in the combo test environment). |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
90 |
*/ |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
91 |
public ComboTask withSourceFromTemplate(String name, String template) { |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
92 |
return withSource(new ComboTemplateSource(name, template)); |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
93 |
} |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
94 |
|
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
95 |
/** |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
96 |
* Add a new template source with default name ("Test") to this task; the template is replaced with |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
97 |
* corresponding combo parameters (as defined in the combo test environment). |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
98 |
*/ |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
99 |
public ComboTask withSourceFromTemplate(String template) { |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
100 |
return withSource(new ComboTemplateSource("Test", template)); |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
101 |
} |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
102 |
|
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
103 |
/** |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
104 |
* Add a new template source with given name to this task; the template is replaced with |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
105 |
* corresponding combo parameters (as defined in the combo test environment). A custom resolver |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
106 |
* is used to add combo parameter mappings to the current combo test environment. |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
107 |
*/ |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
108 |
public ComboTask withSourceFromTemplate(String name, String template, Resolver resolver) { |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
109 |
return withSource(new ComboTemplateSource(name, template, resolver)); |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
110 |
} |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
111 |
|
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
112 |
/** |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
113 |
* Add a new template source with default name ("Test") to this task; the template is replaced with |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
114 |
* corresponding combo parameters (as defined in the combo test environment). A custom resolver |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
115 |
* is used to add combo parameter mappings to the current combo test environment. |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
116 |
*/ |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
117 |
public ComboTask withSourceFromTemplate(String template, Resolver resolver) { |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
118 |
return withSource(new ComboTemplateSource("Test", template, resolver)); |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
119 |
} |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
120 |
|
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
121 |
/** |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
122 |
* Add a new option to this task. |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
123 |
*/ |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
124 |
public ComboTask withOption(String opt) { |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
125 |
options = options.append(opt); |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
126 |
return this; |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
127 |
} |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
128 |
|
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
129 |
/** |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
130 |
* Add a set of options to this task. |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
131 |
*/ |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
132 |
public ComboTask withOptions(String[] opts) { |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
133 |
for (String opt : opts) { |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
134 |
options = options.append(opt); |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
135 |
} |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
136 |
return this; |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
137 |
} |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
138 |
|
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
139 |
/** |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
140 |
* Add a set of options to this task. |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
141 |
*/ |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
142 |
public ComboTask withOptions(Iterable<? extends String> opts) { |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
143 |
for (String opt : opts) { |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
144 |
options = options.append(opt); |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
145 |
} |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
146 |
return this; |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
147 |
} |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
148 |
|
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
149 |
/** |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
150 |
* Set the output writer associated with this task. |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
151 |
*/ |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
152 |
public ComboTask withWriter(Writer out) { |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
153 |
this.out = out; |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
154 |
return this; |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
155 |
} |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
156 |
|
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
157 |
/** |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
158 |
* Add a task listener to this task. |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
159 |
*/ |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
160 |
public ComboTask withListener(TaskListener listener) { |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
161 |
listeners = listeners.prepend(listener); |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
162 |
return this; |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
163 |
} |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
164 |
|
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
165 |
/** |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
166 |
* Parse the sources associated with this task. |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
167 |
*/ |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
168 |
public Result<Iterable<? extends CompilationUnitTree>> parse() throws IOException { |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
169 |
return new Result<>(getTask().parse()); |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
170 |
} |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
171 |
|
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
172 |
/** |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
173 |
* Parse and analyzes the sources associated with this task. |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
174 |
*/ |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
175 |
public Result<Iterable<? extends Element>> analyze() throws IOException { |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
176 |
return new Result<>(getTask().analyze()); |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
177 |
} |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
178 |
|
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
179 |
/** |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
180 |
* Parse, analyze and perform code generation for the sources associated with this task. |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
181 |
*/ |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
182 |
public Result<Iterable<? extends JavaFileObject>> generate() throws IOException { |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
183 |
return new Result<>(getTask().generate()); |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
184 |
} |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
185 |
|
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
186 |
/** |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
187 |
* Fork a new compilation task; if possible the compilation context from previous executions is |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
188 |
* retained (see comments in ReusableContext as to when it's safe to do so); otherwise a brand |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
189 |
* new context is created. |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
190 |
*/ |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
191 |
public JavacTask getTask() { |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
192 |
if (task == null) { |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
193 |
ReusableContext context = env.context(); |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
194 |
String opts = options == null ? "" : |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
195 |
StreamSupport.stream(options.spliterator(), false).collect(Collectors.joining()); |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
196 |
context.clear(); |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
197 |
if (!context.polluted && (context.opts == null || context.opts.equals(opts))) { |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
198 |
//we can reuse former context |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
199 |
env.info().ctxReusedCount++; |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
200 |
} else { |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
201 |
env.info().ctxDroppedCount++; |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
202 |
//it's not safe to reuse context - create a new one |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
203 |
context = env.setContext(new ReusableContext()); |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
204 |
} |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
205 |
context.opts = opts; |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
206 |
JavacTask javacTask = ((JavacTool)env.javaCompiler()).getTask(out, env.fileManager(), |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
207 |
diagsCollector, options, null, sources, context); |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
208 |
javacTask.setTaskListener(context); |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
209 |
for (TaskListener l : listeners) { |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
210 |
javacTask.addTaskListener(l); |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
211 |
} |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
212 |
task = javacTask; |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
213 |
} |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
214 |
return task; |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
215 |
} |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
216 |
|
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
217 |
/** |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
218 |
* This class is used to help clients accessing the results of a given compilation task. |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
219 |
* Contains several helper methods to inspect diagnostics generated during the task execution. |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
220 |
*/ |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
221 |
public class Result<D> { |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
222 |
|
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
223 |
/** The underlying compilation results. */ |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
224 |
private final D data; |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
225 |
|
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
226 |
public Result(D data) { |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
227 |
this.data = data; |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
228 |
} |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
229 |
|
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
230 |
public D get() { |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
231 |
return data; |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
232 |
} |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
233 |
|
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
234 |
/** |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
235 |
* Did this task generate any error diagnostics? |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
236 |
*/ |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
237 |
public boolean hasErrors() { |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
238 |
return diagsCollector.diagsByKind.containsKey(Diagnostic.Kind.ERROR); |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
239 |
} |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
240 |
|
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
241 |
/** |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
242 |
* Did this task generate any warning diagnostics? |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
243 |
*/ |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
244 |
public boolean hasWarnings() { |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
245 |
return diagsCollector.diagsByKind.containsKey(Diagnostic.Kind.WARNING); |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
246 |
} |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
247 |
|
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
248 |
/** |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
249 |
* Did this task generate any note diagnostics? |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
250 |
*/ |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
251 |
public boolean hasNotes() { |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
252 |
return diagsCollector.diagsByKind.containsKey(Diagnostic.Kind.NOTE); |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
253 |
} |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
254 |
|
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
255 |
/** |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
256 |
* Did this task generate any diagnostic with given key? |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
257 |
*/ |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
258 |
public boolean containsKey(String key) { |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
259 |
return diagsCollector.diagsByKeys.containsKey(key); |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
260 |
} |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
261 |
|
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
262 |
/** |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
263 |
* Retrieve the list of diagnostics of a given kind. |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
264 |
*/ |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
265 |
public List<Diagnostic<? extends JavaFileObject>> diagnosticsForKind(Diagnostic.Kind kind) { |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
266 |
List<Diagnostic<? extends JavaFileObject>> diags = diagsCollector.diagsByKind.get(kind); |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
267 |
return diags != null ? diags : List.nil(); |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
268 |
} |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
269 |
|
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
270 |
/** |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
271 |
* Retrieve the list of diagnostics with given key. |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
272 |
*/ |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
273 |
public List<Diagnostic<? extends JavaFileObject>> diagnosticsForKey(String key) { |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
274 |
List<Diagnostic<? extends JavaFileObject>> diags = diagsCollector.diagsByKeys.get(key); |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
275 |
return diags != null ? diags : List.nil(); |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
276 |
} |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
277 |
|
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
278 |
/** |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
279 |
* Dump useful info associated with this task. |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
280 |
*/ |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
281 |
public String compilationInfo() { |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
282 |
return "instance#" + env.info().comboCount + ":[ options = " + options |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
283 |
+ ", diagnostics = " + diagsCollector.diagsByKeys.keySet() |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
284 |
+ ", dimensions = " + env.bindings |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
285 |
+ ", sources = \n" + sources.stream().map(s -> { |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
286 |
try { |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
287 |
return s.getCharContent(true); |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
288 |
} catch (IOException ex) { |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
289 |
return ""; |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
290 |
} |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
291 |
}).collect(Collectors.joining(",")) + "]"; |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
292 |
} |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
293 |
} |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
294 |
|
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
295 |
/** |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
296 |
* This class represents a Java source file whose contents are defined in terms of a template |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
297 |
* string. The holes in such template are expanded using corresponding combo parameter |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
298 |
* instances which can be retrieved using a resolver object. |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
299 |
*/ |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
300 |
class ComboTemplateSource extends SimpleJavaFileObject { |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
301 |
|
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
302 |
String source; |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
303 |
Map<String, ComboParameter> localParametersCache = new HashMap<>(); |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
304 |
|
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
305 |
protected ComboTemplateSource(String name, String template) { |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
306 |
this(name, template, null); |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
307 |
} |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
308 |
|
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
309 |
protected ComboTemplateSource(String name, String template, Resolver resolver) { |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
310 |
super(URI.create("myfo:/" + env.info().comboCount + "/" + name + ".java"), Kind.SOURCE); |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
311 |
source = ComboParameter.expandTemplate(template, pname -> resolveParameter(pname, resolver)); |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
312 |
} |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
313 |
|
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
314 |
@Override |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
315 |
public CharSequence getCharContent(boolean ignoreEncodingErrors) { |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
316 |
return source; |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
317 |
} |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
318 |
|
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
319 |
/** |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
320 |
* Combo parameter resolver function. First parameters are looked up in the global environment, |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
321 |
* then the local environment is looked up as a fallback. |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
322 |
*/ |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
323 |
ComboParameter resolveParameter(String pname, Resolver resolver) { |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
324 |
//first search the env |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
325 |
ComboParameter parameter = env.parametersCache.get(pname); |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
326 |
if (parameter == null) { |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
327 |
//then lookup local cache |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
328 |
parameter = localParametersCache.get(pname); |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
329 |
if (parameter == null && resolver != null) { |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
330 |
//if still null and we have a custom resolution function, try that |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
331 |
parameter = resolver.lookup(pname); |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
332 |
if (parameter != null) { |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
333 |
//if a match was found, store it in the local cache to aviod redundant recomputation |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
334 |
localParametersCache.put(pname, parameter); |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
335 |
} |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
336 |
} |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
337 |
} |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
338 |
return parameter; |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
339 |
} |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
340 |
} |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
341 |
|
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
342 |
/** |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
343 |
* Helper class to collect all diagnostic generated during the execution of a given compilation task. |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
344 |
*/ |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
345 |
class DiagnosticCollector implements DiagnosticListener<JavaFileObject> { |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
346 |
|
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
347 |
Map<Diagnostic.Kind, List<Diagnostic<? extends JavaFileObject>>> diagsByKind = new HashMap<>(); |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
348 |
Map<String, List<Diagnostic<? extends JavaFileObject>>> diagsByKeys = new HashMap<>(); |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
349 |
|
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
350 |
public void report(Diagnostic<? extends JavaFileObject> diagnostic) { |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
351 |
List<Diagnostic<? extends JavaFileObject>> diags = |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
352 |
diagsByKeys.getOrDefault(diagnostic.getCode(), List.nil()); |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
353 |
diagsByKeys.put(diagnostic.getCode(), diags.prepend(diagnostic)); |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
354 |
Diagnostic.Kind kind = diagnostic.getKind(); |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
355 |
diags = diagsByKind.getOrDefault(kind, List.nil()); |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
356 |
diagsByKind.put(kind, diags.prepend(diagnostic)); |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
357 |
} |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
358 |
} |
b0ac04e0fefe
8129962: Investigate performance improvements in langtools combo tests
mcimadamore
parents:
diff
changeset
|
359 |
} |