langtools/test/jdk/javadoc/tool/modules/ModuleTestBase.java
changeset 44301 2f97c71f06f4
parent 44288 c33a416cfcf8
equal deleted inserted replaced
44300:4bd6416db3de 44301:2f97c71f06f4
    25 import java.io.PrintWriter;
    25 import java.io.PrintWriter;
    26 import java.io.StringWriter;
    26 import java.io.StringWriter;
    27 import java.nio.file.Path;
    27 import java.nio.file.Path;
    28 import java.nio.file.Paths;
    28 import java.nio.file.Paths;
    29 import java.util.Arrays;
    29 import java.util.Arrays;
    30 import java.util.Collections;
    30 import java.util.HashSet;
    31 import java.util.List;
    31 import java.util.List;
    32 import java.util.Locale;
    32 import java.util.Locale;
    33 import java.util.Set;
    33 import java.util.Set;
    34 import java.util.TreeSet;
    34 import java.util.TreeSet;
    35 import java.util.stream.Collectors;
    35 import java.util.stream.Collectors;
   156         for (String arg : args) {
   156         for (String arg : args) {
   157             checkDocletOutputPresent("Included", ElementKind.CLASS, arg);
   157             checkDocletOutputPresent("Included", ElementKind.CLASS, arg);
   158         }
   158         }
   159     }
   159     }
   160 
   160 
       
   161     void checkTypesSelected(String... args) throws Exception {
       
   162         for (String arg : args) {
       
   163             checkDocletOutputPresent("Selected", ElementKind.CLASS, arg);
       
   164         }
       
   165     }
       
   166 
   161     void checkMembersSelected(String... args) throws Exception {
   167     void checkMembersSelected(String... args) throws Exception {
   162         for (String arg : args) {
   168         for (String arg : args) {
   163             checkDocletOutputPresent("Selected", ElementKind.METHOD, arg);
   169             checkDocletOutputPresent("Selected", ElementKind.METHOD, arg);
   164         }
   170         }
   165     }
   171     }
   278 
   284 
   279     public static class ModulesTesterDoclet implements Doclet {
   285     public static class ModulesTesterDoclet implements Doclet {
   280         StringWriter sw = new StringWriter();
   286         StringWriter sw = new StringWriter();
   281         PrintWriter ps = new PrintWriter(sw);
   287         PrintWriter ps = new PrintWriter(sw);
   282 
   288 
       
   289         DocletEnvironment docEnv = null;
       
   290 
       
   291         boolean hasDocComments = false;
       
   292 
       
   293         String hasDocComments(Element e) {
       
   294             String comment = docEnv.getElementUtils().getDocComment(e);
       
   295             return comment != null && !comment.isEmpty()
       
   296                     ? "hasDocComments"
       
   297                     : "noDocComments";
       
   298         }
       
   299 
   283         // csv style output, for simple regex verification
   300         // csv style output, for simple regex verification
   284         void printDataSet(String header, Set<? extends Element> set) {
   301         void printDataSet(String header, Set<? extends Element> set) {
   285             for (Element e : set) {
   302             for (Element e : set) {
   286                 ps.print(header);
   303                 ps.print(header);
   287                 new SimpleElementVisitor9<Void, Void>() {
   304                 new SimpleElementVisitor9<Void, Void>() {
   288                     @Override
   305                     @Override
   289                     public Void visitModule(ModuleElement e, Void p) {
   306                     public Void visitModule(ModuleElement e, Void p) {
   290                         ps.print(FS);
   307                         ps.print(FS);
   291                         ps.print(e.getKind());
   308                         ps.print(e.getKind());
   292                         ps.print(FS);
   309                         ps.print(FS);
   293                         ps.println(e.getQualifiedName());
   310                         ps.print(e.getQualifiedName());
       
   311                         if (hasDocComments) {
       
   312                             ps.print(FS);
       
   313                             ps.print(hasDocComments(e));
       
   314                         }
       
   315                         ps.println();
   294                         return null;
   316                         return null;
   295                     }
   317                     }
   296 
   318 
   297                     @Override
   319                     @Override
   298                     public Void visitPackage(PackageElement e, Void p) {
   320                     public Void visitPackage(PackageElement e, Void p) {
   299                         ps.print(FS);
   321                         ps.print(FS);
   300                         ps.print(e.getKind());
   322                         ps.print(e.getKind());
   301                         ps.print(FS);
   323                         ps.print(FS);
   302                         ps.println(e.getQualifiedName());
   324                         ps.print(e.getQualifiedName());
       
   325                         if (hasDocComments) {
       
   326                             ps.print(FS);
       
   327                             ps.print(hasDocComments(e));
       
   328                         }
       
   329                         ps.println();
   303                         return null;
   330                         return null;
   304                     }
   331                     }
   305 
   332 
   306                     @Override
   333                     @Override
   307                     public Void visitType(TypeElement e, Void p) {
   334                     public Void visitType(TypeElement e, Void p) {
   308                         ps.print(FS);
   335                         ps.print(FS);
   309                         ps.print(ElementKind.CLASS);
   336                         ps.print(ElementKind.CLASS);
   310                         ps.print(FS);
   337                         ps.print(FS);
   311                         ps.println(e.getQualifiedName());
   338                         ps.print(e.getQualifiedName());
       
   339                         if (hasDocComments) {
       
   340                             ps.print(FS);
       
   341                             ps.print(hasDocComments(e));
       
   342                         }
       
   343                         ps.println();
   312                         return null;
   344                         return null;
   313                     }
   345                     }
   314 
   346 
   315                     @Override
   347                     @Override
   316                     protected Void defaultAction(Element e, Void p) {
   348                     protected Void defaultAction(Element e, Void p) {
   336                         ps.print(FS);
   368                         ps.print(FS);
   337                         ps.print(ElementKind.METHOD); // always METHOD
   369                         ps.print(ElementKind.METHOD); // always METHOD
   338                         ps.print(FS);
   370                         ps.print(FS);
   339                         ps.print(fqn);
   371                         ps.print(fqn);
   340                         ps.print(".");
   372                         ps.print(".");
   341                         ps.println(e.getSimpleName());
   373                         ps.print(e.getSimpleName());
       
   374                         if (hasDocComments) {
       
   375                             ps.print(FS);
       
   376                             ps.print(hasDocComments(e));
       
   377                         }
       
   378                         ps.println();
   342                         return null;
   379                         return null;
   343                     }
   380                     }
   344                 }.visit(e);
   381                 }.visit(e);
   345             }
   382             }
   346         }
   383         }
   347 
   384 
   348         @Override
   385         @Override
   349         public boolean run(DocletEnvironment docenv) {
   386         public boolean run(DocletEnvironment docenv) {
       
   387             this.docEnv = docenv;
   350             ps.println("ModuleMode" + FS + docenv.getModuleMode());
   388             ps.println("ModuleMode" + FS + docenv.getModuleMode());
   351             printDataSet("Specified", docenv.getSpecifiedElements());
   389             printDataSet("Specified", docenv.getSpecifiedElements());
   352             printDataSet("Included", docenv.getIncludedElements());
   390             printDataSet("Included", docenv.getIncludedElements());
   353             printDataSet("Selected", getAllSelectedElements(docenv));
   391             printDataSet("Selected", getAllSelectedElements(docenv));
   354             System.out.println(sw);
   392             System.out.println(sw);
   367             Set<? extends Element> elements = docenv.getIncludedElements();
   405             Set<? extends Element> elements = docenv.getIncludedElements();
   368             for (ModuleElement me : ElementFilter.modulesIn(elements)) {
   406             for (ModuleElement me : ElementFilter.modulesIn(elements)) {
   369                 addEnclosedElements(docenv, result, me);
   407                 addEnclosedElements(docenv, result, me);
   370             }
   408             }
   371             for (PackageElement pe : ElementFilter.packagesIn(elements)) {
   409             for (PackageElement pe : ElementFilter.packagesIn(elements)) {
   372                 addEnclosedElements(docenv, result, docenv.getElementUtils().getModuleOf(pe));
   410                 ModuleElement mdle = docenv.getElementUtils().getModuleOf(pe);
       
   411                 if (mdle != null)
       
   412                     addEnclosedElements(docenv, result, mdle);
   373                 addEnclosedElements(docenv, result, pe);
   413                 addEnclosedElements(docenv, result, pe);
   374             }
   414             }
   375             for (TypeElement te : ElementFilter.typesIn(elements)) {
   415             for (TypeElement te : ElementFilter.typesIn(elements)) {
   376                 addEnclosedElements(docenv, result, te);
   416                 addEnclosedElements(docenv, result, te);
   377             }
   417             }
   388             }
   428             }
   389         }
   429         }
   390 
   430 
   391         @Override
   431         @Override
   392         public Set<Doclet.Option> getSupportedOptions() {
   432         public Set<Doclet.Option> getSupportedOptions() {
   393             return Collections.emptySet();
   433             Option[] options = {
       
   434                 new Option() {
       
   435                     private final List<String> someOption = Arrays.asList(
       
   436                             "-hasDocComments"
       
   437                     );
       
   438 
       
   439                     @Override
       
   440                     public int getArgumentCount() {
       
   441                         return 0;
       
   442                     }
       
   443 
       
   444                     @Override
       
   445                     public String getDescription() {
       
   446                         return "print disposition of doc comments on an element";
       
   447                     }
       
   448 
       
   449                     @Override
       
   450                     public Option.Kind getKind() {
       
   451                         return Option.Kind.STANDARD;
       
   452                     }
       
   453 
       
   454                     @Override
       
   455                     public List<String> getNames() {
       
   456                         return someOption;
       
   457                     }
       
   458 
       
   459                     @Override
       
   460                     public String getParameters() {
       
   461                         return "flag";
       
   462                     }
       
   463 
       
   464                     @Override
       
   465                     public boolean process(String opt, List<String> arguments) {
       
   466                         hasDocComments = true;
       
   467                         return true;
       
   468                     }
       
   469                 }
       
   470             };
       
   471             return new HashSet<>(Arrays.asList(options));
   394         }
   472         }
   395 
   473 
   396         @Override
   474         @Override
   397         public void init(Locale locale, Reporter reporter) {}
   475         public void init(Locale locale, Reporter reporter) {}
   398 
   476