1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 package com.puppycrawl.tools.checkstyle.site;
21
22 import java.nio.file.Path;
23 import java.nio.file.Paths;
24 import java.util.Set;
25
26 import org.apache.maven.doxia.macro.AbstractMacro;
27 import org.apache.maven.doxia.macro.Macro;
28 import org.apache.maven.doxia.macro.MacroExecutionException;
29 import org.apache.maven.doxia.macro.MacroRequest;
30 import org.apache.maven.doxia.sink.Sink;
31 import org.codehaus.plexus.component.annotations.Component;
32
33 import com.puppycrawl.tools.checkstyle.api.DetailNode;
34 import com.puppycrawl.tools.checkstyle.meta.JavadocMetadataScraper;
35 import com.puppycrawl.tools.checkstyle.utils.CommonUtil;
36
37
38
39
40 @Component(role = Macro.class, hint = "description")
41 public class DescriptionMacro extends AbstractMacro {
42
43 @Override
44 public void execute(Sink sink, MacroRequest request) throws MacroExecutionException {
45 final Path modulePath = Paths.get((String) request.getParameter("modulePath"));
46 final String moduleName = CommonUtil.getFileNameWithoutExtension(modulePath.toString());
47
48 final Set<String> propertyNames = ModuleJavadocParsingUtil.getPropertyNames(moduleName);
49
50 final DetailNode moduleJavadoc = SiteUtil.getModuleJavadoc(moduleName, modulePath);
51 if (moduleJavadoc == null) {
52 throw new MacroExecutionException(
53 "Javadoc of module " + moduleName + " is not found.");
54 }
55
56 final int descriptionEndIndex = getDescriptionEndIndex(moduleJavadoc, propertyNames);
57 final String moduleDescription = JavadocMetadataScraper.constructSubTreeText(
58 moduleJavadoc, 0, descriptionEndIndex);
59
60 ModuleJavadocParsingUtil.writeOutJavadocPortion(moduleDescription, sink);
61
62 }
63
64
65
66
67
68
69
70
71 private static int getDescriptionEndIndex(DetailNode moduleJavadoc,
72 Set<String> propertyNamesSet) {
73 int descriptionEndIndex = -1;
74
75 final int notesStartingIndex =
76 ModuleJavadocParsingUtil.getNotesSectionStartIndex(moduleJavadoc);
77 if (notesStartingIndex > -1) {
78 descriptionEndIndex += notesStartingIndex;
79 }
80 else if (propertyNamesSet.isEmpty()) {
81 descriptionEndIndex += ModuleJavadocParsingUtil.getParentSectionStartIndex(
82 moduleJavadoc);
83 }
84 else {
85 descriptionEndIndex += ModuleJavadocParsingUtil.getPropertySectionStartIndex(
86 moduleJavadoc, propertyNamesSet);
87 }
88
89 return descriptionEndIndex;
90 }
91
92 }