langtools/test/tools/sjavac/DependencyCollection.java
changeset 27319 030080f03e4f
parent 26991 88d998b3bb4b
child 27384 51aa4299ae7b
equal deleted inserted replaced
27318:4660a5da7d90 27319:030080f03e4f
    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"))