31 */ |
31 */ |
32 |
32 |
33 import java.io.File; |
33 import java.io.File; |
34 import java.util.*; |
34 import java.util.*; |
35 import java.util.Map.Entry; |
35 import java.util.Map.Entry; |
36 import java.util.stream.StreamSupport; |
|
37 |
36 |
38 import javax.lang.model.element.Element; |
37 import javax.lang.model.element.Element; |
39 import javax.lang.model.element.ElementKind; |
38 import javax.lang.model.element.ElementKind; |
40 import javax.lang.model.element.ModuleElement; |
39 import javax.lang.model.element.ModuleElement; |
41 import javax.lang.model.element.PackageElement; |
40 import javax.lang.model.element.PackageElement; |
42 import javax.lang.model.element.TypeElement; |
41 import javax.lang.model.element.TypeElement; |
43 import javax.lang.model.util.Elements; |
42 import javax.lang.model.util.Elements; |
44 import javax.tools.*; |
43 import javax.tools.*; |
45 import javax.tools.JavaFileManager.Location; |
|
46 |
44 |
47 import com.sun.source.util.JavacTask; |
45 import com.sun.source.util.JavacTask; |
48 import com.sun.tools.javac.model.JavacElements; |
46 import com.sun.tools.javac.model.JavacElements; |
49 |
47 |
50 import static javax.tools.StandardLocation.CLASS_PATH; |
48 import static javax.tools.StandardLocation.CLASS_PATH; |
51 import static javax.tools.StandardLocation.PLATFORM_CLASS_PATH; |
49 import static javax.tools.StandardLocation.PLATFORM_CLASS_PATH; |
52 import static javax.tools.StandardLocation.SYSTEM_MODULES; |
|
53 import static javax.tools.JavaFileObject.Kind.CLASS; |
50 import static javax.tools.JavaFileObject.Kind.CLASS; |
54 |
51 |
55 |
52 |
56 public class Main { |
53 public class Main { |
57 |
54 |
65 static int progress = 0; |
62 static int progress = 0; |
66 static JavaCompiler tool; |
63 static JavaCompiler tool; |
67 static JavacTask javac; |
64 static JavacTask javac; |
68 static Elements elements; |
65 static Elements elements; |
69 |
66 |
|
67 static List<String> addmods_ALL_SYSTEM = Arrays.asList("-addmods", "ALL-SYSTEM"); |
|
68 |
70 public static void main(String[] args) throws Exception { |
69 public static void main(String[] args) throws Exception { |
71 JavaCompiler tool = ToolProvider.getSystemJavaCompiler(); |
70 JavaCompiler tool = ToolProvider.getSystemJavaCompiler(); |
72 try (StandardJavaFileManager fm = tool.getStandardFileManager(null, null, null)) { |
71 try (StandardJavaFileManager fm = tool.getStandardFileManager(null, null, null)) { |
73 fm.setLocation(CLASS_PATH, Collections.<File>emptyList()); |
72 fm.setLocation(CLASS_PATH, Collections.<File>emptyList()); |
74 JavacTask javac = (JavacTask)tool.getTask(null, fm, null, null, null, null); |
73 JavacTask javac = (JavacTask)tool.getTask(null, fm, null, addmods_ALL_SYSTEM, null, null); |
75 Elements elements = javac.getElements(); |
74 Elements elements = javac.getElements(); |
76 |
75 |
77 final Map<String, Set<String>> packages = new LinkedHashMap<>(); |
76 final Map<String, Set<String>> packages = new LinkedHashMap<>(); |
78 |
77 |
79 int nestedClasses = 0; |
78 int nestedClasses = 0; |
107 } |
106 } |
108 } |
107 } |
109 javac = null; |
108 javac = null; |
110 elements = null; |
109 elements = null; |
111 |
110 |
112 javac = (JavacTask)tool.getTask(null, fm, null, null, null, null); |
111 javac = (JavacTask)tool.getTask(null, fm, null, addmods_ALL_SYSTEM, null, null); |
113 elements = javac.getElements(); |
112 elements = javac.getElements(); |
114 |
113 |
115 for (Entry<String, Set<String>> module2Packages : packages.entrySet()) { |
114 for (Entry<String, Set<String>> module2Packages : packages.entrySet()) { |
116 ModuleElement me = elements.getModuleElement(module2Packages.getKey()); |
115 ModuleElement me = elements.getModuleElement(module2Packages.getKey()); |
|
116 me.getClass(); |
117 for (String name : module2Packages.getValue()) { |
117 for (String name : module2Packages.getValue()) { |
118 PackageElement pe = ((JavacElements) elements).getPackageElement(me, name); |
118 PackageElement pe = ((JavacElements) elements).getPackageElement(me, name); |
119 for (Element e : pe.getEnclosedElements()) { |
119 for (Element e : pe.getEnclosedElements()) { |
120 e.getSimpleName().getClass(); |
120 e.getSimpleName().getClass(); |
121 } |
121 } |