57 |
57 |
58 public static void main(String[] args) { |
58 public static void main(String[] args) { |
59 Path src = Paths.get(ToolBox.testSrc, "test-input", "src"); |
59 Path src = Paths.get(ToolBox.testSrc, "test-input", "src"); |
60 |
60 |
61 JavaCompiler javac = ToolProvider.getSystemJavaCompiler(); |
61 JavaCompiler javac = ToolProvider.getSystemJavaCompiler(); |
62 StandardJavaFileManager fileManager = javac.getStandardFileManager(null, null, null); |
62 try (StandardJavaFileManager fileManager = javac.getStandardFileManager(null, null, null)) { |
63 SmartFileManager smartFileManager = new SmartFileManager(fileManager); |
63 SmartFileManager smartFileManager = new SmartFileManager(fileManager); |
64 smartFileManager.setSymbolFileEnabled(false); |
64 smartFileManager.setSymbolFileEnabled(false); |
65 Iterable<? extends JavaFileObject> fileObjects = |
65 Iterable<? extends JavaFileObject> fileObjects = |
66 fileManager.getJavaFileObjectsFromFiles(Arrays.asList(src.resolve("pkg/Test.java").toFile())); |
66 fileManager.getJavaFileObjectsFromFiles(Arrays.asList(src.resolve("pkg/Test.java").toFile())); |
67 JavacTaskImpl task = (JavacTaskImpl) javac.getTask(new PrintWriter(System.out), |
67 JavacTaskImpl task = (JavacTaskImpl) javac.getTask(new PrintWriter(System.out), |
68 smartFileManager, |
68 smartFileManager, |
69 null, |
69 null, |
70 Arrays.asList("-d", "classes", |
70 Arrays.asList("-d", "classes", |
71 "-sourcepath", src.toAbsolutePath().toString()), |
71 "-sourcepath", src.toAbsolutePath().toString()), |
72 null, |
72 null, |
73 fileObjects); |
73 fileObjects); |
74 DependencyCollector depsCollector = new DependencyCollector(); |
74 DependencyCollector depsCollector = new DependencyCollector(); |
75 task.addTaskListener(depsCollector); |
75 task.addTaskListener(depsCollector); |
76 task.doCall(); |
76 task.doCall(); |
77 |
77 |
78 // Find pkg symbol |
78 // Find pkg symbol |
79 PackageSymbol pkg = findPkgSymbolWithName(depsCollector.getSourcePackages(), "pkg"); |
79 PackageSymbol pkg = findPkgSymbolWithName(depsCollector.getSourcePackages(), "pkg"); |
80 Set<PackageSymbol> foundDependencies = depsCollector.getDependenciesForPkg(pkg); |
80 Set<PackageSymbol> foundDependencies = depsCollector.getDependenciesForPkg(pkg); |
81 |
81 |
82 // Print dependencies |
82 // Print dependencies |
83 System.out.println("Found dependencies:"); |
83 System.out.println("Found dependencies:"); |
84 foundDependencies.stream() |
84 foundDependencies.stream() |
85 .sorted(Comparator.comparing(DependencyCollection::extractNumber)) |
85 .sorted(Comparator.comparing(DependencyCollection::extractNumber)) |
86 .forEach(p -> System.out.println(" " + p)); |
86 .forEach(p -> System.out.println(" " + p)); |
87 |
87 |
88 // Check result |
88 // Check result |
89 Set<Integer> found = foundDependencies.stream() |
89 Set<Integer> found = foundDependencies.stream() |
90 .map(DependencyCollection::extractNumber) |
90 .map(DependencyCollection::extractNumber) |
91 .collect(Collectors.toSet()); |
91 .collect(Collectors.toSet()); |
92 found.remove(-1); // Dependencies with no number (java.lang etc) |
92 found.remove(-1); // Dependencies with no number (java.lang etc) |
93 Set<Integer> expected = new HashSet<>(); |
93 Set<Integer> expected = new HashSet<>(); |
94 for (int i = 2; i <= 30; i++) { |
94 for (int i = 2; i <= 30; i++) { |
95 if (i == 15) continue; // Case 15 correspond to the type of a throw-away return value. |
95 if (i == 15) continue; // Case 15 correspond to the type of a throw-away return value. |
96 expected.add(i); |
96 expected.add(i); |
|
97 } |
|
98 |
|
99 Set<Integer> missing = new HashSet<>(expected); |
|
100 missing.removeAll(found); |
|
101 if (missing.size() > 0) { |
|
102 System.out.println("Missing dependencies:"); |
|
103 missing.forEach(i -> System.out.println(" Dependency " + i)); |
|
104 } |
|
105 |
|
106 Set<Integer> unexpected = new HashSet<>(found); |
|
107 unexpected.removeAll(expected); |
|
108 if (unexpected.size() > 0) { |
|
109 System.out.println("Unexpected dependencies found:"); |
|
110 unexpected.forEach(i -> System.out.println(" Dependency " + i)); |
|
111 } |
|
112 |
|
113 if (missing.size() > 0 || unexpected.size() > 0) |
|
114 throw new AssertionError("Missing and/or unexpected dependencies found."); |
97 } |
115 } |
98 |
|
99 Set<Integer> missing = new HashSet<>(expected); |
|
100 missing.removeAll(found); |
|
101 if (missing.size() > 0) { |
|
102 System.out.println("Missing dependencies:"); |
|
103 missing.forEach(i -> System.out.println(" Dependency " + i)); |
|
104 } |
|
105 |
|
106 Set<Integer> unexpected = new HashSet<>(found); |
|
107 unexpected.removeAll(expected); |
|
108 if (unexpected.size() > 0) { |
|
109 System.out.println("Unexpected dependencies found:"); |
|
110 unexpected.forEach(i -> System.out.println(" Dependency " + i)); |
|
111 } |
|
112 |
|
113 if (missing.size() > 0 || unexpected.size() > 0) |
|
114 throw new AssertionError("Missing and/or unexpected dependencies found."); |
|
115 } |
116 } |
116 |
117 |
117 private static PackageSymbol findPkgSymbolWithName(Set<PackageSymbol> syms, String name) { |
118 private static PackageSymbol findPkgSymbolWithName(Set<PackageSymbol> syms, String name) { |
118 for (PackageSymbol ps : syms) |
119 for (PackageSymbol ps : syms) |
119 if (ps.fullname.toString().equals("pkg")) |
120 if (ps.fullname.toString().equals("pkg")) |