test/langtools/tools/javac/platform/CanHandleClassFilesTest.java
changeset 53038 9dd0a2fdec24
parent 51799 3fabe59fe4de
equal deleted inserted replaced
53037:e84983c2735e 53038:9dd0a2fdec24
    24 /**
    24 /**
    25  * @test
    25  * @test
    26  * @bug 8207954
    26  * @bug 8207954
    27  * @summary Verify that CreateSymbols can handle classfiles from the current release.
    27  * @summary Verify that CreateSymbols can handle classfiles from the current release.
    28  * @library /tools/lib /tools/javac/lib
    28  * @library /tools/lib /tools/javac/lib
    29  * @modules jdk.compiler/com.sun.tools.javac.api
    29  * @modules jdk.compiler/com.sun.tools.javac.api:+open
    30  *          jdk.compiler/com.sun.tools.javac.main
    30  *          jdk.compiler/com.sun.tools.javac.main
       
    31  *          jdk.compiler/com.sun.tools.javac.jvm:+open
       
    32  *          jdk.compiler/com.sun.tools.javac.util:+open
       
    33  *          jdk.jdeps/com.sun.tools.classfile:+open
    31  * @build toolbox.ToolBox toolbox.JavacTask toolbox.Task
    34  * @build toolbox.ToolBox toolbox.JavacTask toolbox.Task
    32  * @run main CanHandleClassFilesTest
    35  * @run main CanHandleClassFilesTest
    33  */
    36  */
    34 
    37 
    35 import java.io.Writer;
    38 import java.io.Writer;
    36 import java.nio.file.Files;
    39 import java.nio.file.Files;
    37 import java.nio.file.Path;
    40 import java.nio.file.Path;
    38 import java.nio.file.Paths;
    41 import java.nio.file.Paths;
       
    42 import java.util.stream.Stream;
    39 
    43 
    40 import javax.tools.StandardLocation;
    44 import javax.tools.StandardLocation;
    41 
    45 
    42 import toolbox.JavacTask;
    46 import toolbox.JavacTask;
    43 import toolbox.ToolBox;
    47 import toolbox.ToolBox;
    91                         throw new ClassNotFoundException(name);
    95                         throw new ClassNotFoundException(name);
    92                     }
    96                     }
    93                 }
    97                 }
    94             };
    98             };
    95 
    99 
       
   100             // open the non-exported packages needed by CreateSymbols to its module
       
   101             Module targetModule = cl.getUnnamedModule();
       
   102             Stream.of("jdk.compiler/com.sun.tools.javac.api",
       
   103                       "jdk.compiler/com.sun.tools.javac.jvm",
       
   104                       "jdk.compiler/com.sun.tools.javac.util",
       
   105                       "jdk.jdeps/com.sun.tools.classfile")
       
   106                     .forEach(p -> open(p, targetModule));
       
   107 
    96             var createSymbolsClass = Class.forName("build.tools.symbolgenerator.CreateSymbols", false, cl);
   108             var createSymbolsClass = Class.forName("build.tools.symbolgenerator.CreateSymbols", false, cl);
    97             var main = createSymbolsClass.getDeclaredMethod("main", String[].class);
   109             var main = createSymbolsClass.getMethod("main", String[].class);
    98             var symbols = targetDir.resolve("symbols");
   110             var symbols = targetDir.resolve("symbols");
    99 
   111 
   100             try (Writer w = Files.newBufferedWriter(symbols)) {}
   112             try (Writer w = Files.newBufferedWriter(symbols)) {}
   101 
   113 
   102             main.invoke(null,
   114             main.invoke(null,
   110                                                symbols.toAbsolutePath().toString(),
   122                                                symbols.toAbsolutePath().toString(),
   111                                                targetDir.resolve("ct.sym").toAbsolutePath().toString()});
   123                                                targetDir.resolve("ct.sym").toAbsolutePath().toString()});
   112         }
   124         }
   113     }
   125     }
   114 
   126 
       
   127     void open(String moduleAndPackage, Module target) {
       
   128         String[] s = moduleAndPackage.split("/");
       
   129         var moduleName = s[0];
       
   130         var packageName = s[1];
       
   131         ModuleLayer.boot().findModule(moduleName).orElseThrow().addOpens(packageName, target);
       
   132     }
       
   133 
   115 }
   134 }