33 * jdk.compiler/com.sun.tools.javac.jvm
34 * jdk.compiler/com.sun.tools.javac.main
35 * jdk.compiler/com.sun.tools.javac.processing
36 * jdk.compiler/com.sun.tools.javac.util
37 * @build toolbox.ToolBox toolbox.JavacTask
38 * @run main NoAbortForBadClassFile
39 */
40
41 import java.nio.file.Files;
42 import java.nio.file.Path;
43 import java.nio.file.Paths;
44 import java.util.ArrayList;
45 import java.util.Arrays;
46 import java.util.Collections;
47 import java.util.List;
48 import java.util.stream.Collectors;
49 import java.util.stream.Stream;
50
51 import com.sun.tools.javac.api.JavacTaskImpl;
52 import com.sun.tools.javac.api.JavacTool;
53 import com.sun.tools.javac.code.Flags;
54 import com.sun.tools.javac.code.Symbol.ClassSymbol;
55 import com.sun.tools.javac.code.Symbol.CompletionFailure;
56 import com.sun.tools.javac.code.Symtab;
57 import com.sun.tools.javac.jvm.ClassReader;
58 import com.sun.tools.javac.util.Context;
59 import com.sun.tools.javac.util.Context.Factory;
60 import com.sun.tools.javac.util.Names;
61 import com.sun.tools.javac.util.Options;
62 import toolbox.Task;
63 import toolbox.Task.Expect;
64
65 import toolbox.TestRunner;
66 import toolbox.ToolBox;
67
68 public class NoAbortForBadClassFile extends TestRunner {
69
70 private ToolBox tb = new ToolBox();
71
72 public NoAbortForBadClassFile() {
172
173 nextTODO.remove(p);
174
175 List<Path> nextList = new ArrayList<>(currentList);
176
177 nextList.add(p);
178
179 permutations(nextTODO, nextList, result);
180 }
181 }
182
183 private List<String> complete(Path test, List<Path> order, Path missing, boolean badClassFile) {
184 Context context = new Context();
185 if (badClassFile) {
186 TestClassReader.preRegister(context);
187 }
188 JavacTool tool = JavacTool.create();
189 JavacTaskImpl task = (JavacTaskImpl) tool.getTask(null, null, null, List.of("-classpath", test.toString(), "-XDblockClass=" + flatName(missing)), null, null, context);
190 Symtab syms = Symtab.instance(context);
191 Names names = Names.instance(context);
192
193 task.getElements().getTypeElement("java.lang.Object");
194
195 if (!badClassFile) {
196 //to ensure the same paths taken in ClassFinder.completeEnclosing in case the file is missing:
197 syms.enterClass(syms.unnamedModule, names.fromString(flatName(missing)));
198 }
199
200 List<String> result = new ArrayList<>();
201
202 for (Path toCheck : order) {
203 ClassSymbol sym = syms.enterClass(syms.unnamedModule, names.fromString(flatName(toCheck)));
204
205 try {
206 sym.complete();
207 } catch (CompletionFailure ignore) {
208 }
209
210 long flags = sym.flags_field;
211
|
33 * jdk.compiler/com.sun.tools.javac.jvm
34 * jdk.compiler/com.sun.tools.javac.main
35 * jdk.compiler/com.sun.tools.javac.processing
36 * jdk.compiler/com.sun.tools.javac.util
37 * @build toolbox.ToolBox toolbox.JavacTask
38 * @run main NoAbortForBadClassFile
39 */
40
41 import java.nio.file.Files;
42 import java.nio.file.Path;
43 import java.nio.file.Paths;
44 import java.util.ArrayList;
45 import java.util.Arrays;
46 import java.util.Collections;
47 import java.util.List;
48 import java.util.stream.Collectors;
49 import java.util.stream.Stream;
50
51 import com.sun.tools.javac.api.JavacTaskImpl;
52 import com.sun.tools.javac.api.JavacTool;
53 import com.sun.tools.javac.code.DeferredCompletionFailureHandler;
54 import com.sun.tools.javac.code.Flags;
55 import com.sun.tools.javac.code.Symbol.ClassSymbol;
56 import com.sun.tools.javac.code.Symbol.CompletionFailure;
57 import com.sun.tools.javac.code.Symtab;
58 import com.sun.tools.javac.jvm.ClassReader;
59 import com.sun.tools.javac.util.Context;
60 import com.sun.tools.javac.util.Context.Factory;
61 import com.sun.tools.javac.util.Names;
62 import com.sun.tools.javac.util.Options;
63 import toolbox.Task;
64 import toolbox.Task.Expect;
65
66 import toolbox.TestRunner;
67 import toolbox.ToolBox;
68
69 public class NoAbortForBadClassFile extends TestRunner {
70
71 private ToolBox tb = new ToolBox();
72
73 public NoAbortForBadClassFile() {
173
174 nextTODO.remove(p);
175
176 List<Path> nextList = new ArrayList<>(currentList);
177
178 nextList.add(p);
179
180 permutations(nextTODO, nextList, result);
181 }
182 }
183
184 private List<String> complete(Path test, List<Path> order, Path missing, boolean badClassFile) {
185 Context context = new Context();
186 if (badClassFile) {
187 TestClassReader.preRegister(context);
188 }
189 JavacTool tool = JavacTool.create();
190 JavacTaskImpl task = (JavacTaskImpl) tool.getTask(null, null, null, List.of("-classpath", test.toString(), "-XDblockClass=" + flatName(missing)), null, null, context);
191 Symtab syms = Symtab.instance(context);
192 Names names = Names.instance(context);
193
194 DeferredCompletionFailureHandler dcfh = DeferredCompletionFailureHandler.instance(context);
195
196 dcfh.setHandler(dcfh.javacCodeHandler);
197
198 task.getElements().getTypeElement("java.lang.Object");
199
200 if (!badClassFile) {
201 //to ensure the same paths taken in ClassFinder.completeEnclosing in case the file is missing:
202 syms.enterClass(syms.unnamedModule, names.fromString(flatName(missing)));
203 }
204
205 List<String> result = new ArrayList<>();
206
207 for (Path toCheck : order) {
208 ClassSymbol sym = syms.enterClass(syms.unnamedModule, names.fromString(flatName(toCheck)));
209
210 try {
211 sym.complete();
212 } catch (CompletionFailure ignore) {
213 }
214
215 long flags = sym.flags_field;
216
|