You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@groovy.apache.org by pa...@apache.org on 2022/06/05 01:42:43 UTC
[groovy] branch master updated: GROOVY-10578: Groovydoc noscripts and nomainforscripts options no longer work
This is an automated email from the ASF dual-hosted git repository.
paulk pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/groovy.git
The following commit(s) were added to refs/heads/master by this push:
new 4fc7c5d290 GROOVY-10578: Groovydoc noscripts and nomainforscripts options no longer work
4fc7c5d290 is described below
commit 4fc7c5d290725b7120ee3466d81da2ce94e770d3
Author: Paul King <pa...@asert.com.au>
AuthorDate: Sun Jun 5 11:42:23 2022 +1000
GROOVY-10578: Groovydoc noscripts and nomainforscripts options no longer work
---
.../org/apache/groovy/antlr/GroovydocVisitor.java | 12 ++++++++
.../tools/groovydoc/antlr4/GroovyDocParser.java | 2 +-
.../groovy/tools/groovydoc/GroovyDocToolTest.java | 36 ++++++++++++++++++++++
3 files changed, 49 insertions(+), 1 deletion(-)
diff --git a/subprojects/groovy-groovydoc/src/main/java/org/apache/groovy/antlr/GroovydocVisitor.java b/subprojects/groovy-groovydoc/src/main/java/org/apache/groovy/antlr/GroovydocVisitor.java
index b1fa2a06ae..02adcdb3b5 100644
--- a/subprojects/groovy-groovydoc/src/main/java/org/apache/groovy/antlr/GroovydocVisitor.java
+++ b/subprojects/groovy-groovydoc/src/main/java/org/apache/groovy/antlr/GroovydocVisitor.java
@@ -56,6 +56,7 @@ import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
+import java.util.Properties;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@@ -73,12 +74,18 @@ public class GroovydocVisitor extends ClassCodeVisitorSupport {
private String packagePath;
private SimpleGroovyClassDoc currentClassDoc = null;
private Map<String, GroovyClassDoc> classDocs = new HashMap<>();
+ private final Properties properties;
private static final String FS = "/";
public GroovydocVisitor(final SourceUnit unit, String packagePath, List<LinkArgument> links) {
+ this(unit, packagePath, links, new Properties());
+ }
+
+ public GroovydocVisitor(final SourceUnit unit, String packagePath, List<LinkArgument> links, Properties properties) {
this.unit = unit;
this.packagePath = packagePath;
this.links = links;
+ this.properties = properties;
}
@Override
@@ -117,6 +124,7 @@ public class GroovydocVisitor extends ClassCodeVisitorSupport {
currentClassDoc.setTokenType(SimpleGroovyDoc.INTERFACE_DEF);
}
if (node.isScript()) {
+ if ("false".equals(properties.getProperty("processScripts", "true"))) return;
currentClassDoc.setScript(true);
}
for (ClassNode iface : node.getInterfaces()) {
@@ -205,6 +213,10 @@ public class GroovydocVisitor extends ClassCodeVisitorSupport {
public void visitMethod(MethodNode node) {
if (currentClassDoc.isEnum() && "$INIT".equals(node.getName()))
return;
+ if ("false".equals(properties.getProperty("includeMainForScripts", "true"))
+ && currentClassDoc.isScript() && "main".equals(node.getName()) && node.isStatic() && node.getParameters().length == 1)
+ return;
+
SimpleGroovyMethodDoc meth = new SimpleGroovyMethodDoc(node.getName(), currentClassDoc);
meth.setReturnType(new SimpleGroovyType(makeType(node.getReturnType())));
setConstructorOrMethodCommon(node, meth);
diff --git a/subprojects/groovy-groovydoc/src/main/java/org/codehaus/groovy/tools/groovydoc/antlr4/GroovyDocParser.java b/subprojects/groovy-groovydoc/src/main/java/org/codehaus/groovy/tools/groovydoc/antlr4/GroovyDocParser.java
index 95297a83a0..c2ed129406 100644
--- a/subprojects/groovy-groovydoc/src/main/java/org/codehaus/groovy/tools/groovydoc/antlr4/GroovyDocParser.java
+++ b/subprojects/groovy-groovydoc/src/main/java/org/codehaus/groovy/tools/groovydoc/antlr4/GroovyDocParser.java
@@ -85,7 +85,7 @@ public class GroovyDocParser implements GroovyDocParserI {
compUnit.addSource(unit);
compUnit.compile(Phases.CONVERSION);
ModuleNode root = unit.getAST();
- GroovydocVisitor visitor = new GroovydocVisitor(unit, packagePath, links);
+ GroovydocVisitor visitor = new GroovydocVisitor(unit, packagePath, links, properties);
visitor.visitClass(root.getClasses().get(0));
return visitor.getGroovyClassDocs();
}
diff --git a/subprojects/groovy-groovydoc/src/test/groovy/org/codehaus/groovy/tools/groovydoc/GroovyDocToolTest.java b/subprojects/groovy-groovydoc/src/test/groovy/org/codehaus/groovy/tools/groovydoc/GroovyDocToolTest.java
index 81f405831e..5586f21bb7 100644
--- a/subprojects/groovy-groovydoc/src/test/groovy/org/codehaus/groovy/tools/groovydoc/GroovyDocToolTest.java
+++ b/subprojects/groovy-groovydoc/src/test/groovy/org/codehaus/groovy/tools/groovydoc/GroovyDocToolTest.java
@@ -1356,6 +1356,42 @@ public class GroovyDocToolTest extends GroovyTestCase {
assertFalse("Script local variables should not appear in groovydoc output", scriptDoc.contains("localVar"));
}
+ public void testScriptCommandLineOptions() throws Exception {
+ List<String> srcList = new ArrayList<String>();
+ srcList.add("org/codehaus/groovy/tools/groovydoc/testfiles/Script.groovy");
+
+ // default params
+ htmlTool.add(srcList);
+ MockOutputTool output = new MockOutputTool();
+ htmlTool.renderToOutput(output, MOCK_DIR);
+ String scriptDoc = output.getText(MOCK_DIR + "/org/codehaus/groovy/tools/groovydoc/testfiles/Script.html");
+ assertNotNull("Expected to find Script.html in: " + output, scriptDoc);
+ assertTrue("There should be a reference to method run in: " + scriptDoc, scriptDoc.contains("#run()"));
+ assertTrue("There should be a reference to method main in: " + scriptDoc, scriptDoc.contains("#main("));
+
+ // -noscript case
+ Properties props = new Properties();
+ props.put("processScripts", "false");
+ htmlTool = makeHtmltool(new ArrayList<LinkArgument>(), props);
+ htmlTool.add(srcList);
+ output = new MockOutputTool();
+ htmlTool.renderToOutput(output, MOCK_DIR);
+ scriptDoc = output.getText(MOCK_DIR + "/org/codehaus/groovy/tools/groovydoc/testfiles/Script.html");
+ assertNull("Expected to not find Script.html in: " + output, scriptDoc);
+
+ // -nomainforscript case
+ props = new Properties();
+ props.put("includeMainForScripts", "false");
+ htmlTool = makeHtmltool(new ArrayList<LinkArgument>(), props);
+ htmlTool.add(srcList);
+ output = new MockOutputTool();
+ htmlTool.renderToOutput(output, MOCK_DIR);
+ scriptDoc = output.getText(MOCK_DIR + "/org/codehaus/groovy/tools/groovydoc/testfiles/Script.html");
+ assertNotNull("Expected to find Script.html in: " + output, scriptDoc);
+ assertTrue("There should be a reference to method run in: " + scriptDoc, scriptDoc.contains("#run()"));
+ assertFalse("There should not be a reference to method main in: " + scriptDoc, scriptDoc.contains("#main("));
+ }
+
private boolean containsTagWithName(String text, String tagname, String name) {
return text.matches("(?s).*<"+ tagname + "[^>]* name=\""+ name + "\".*");
}