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 |