< prev index next >

test/langtools/tools/javac/processing/model/completionfailure/NoAbortForBadClassFile.java

Print this page
rev 48841 : imported patch 8187950


  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 


< prev index next >