This is an automated email from the ASF dual-hosted git repository.

paulk pushed a commit to branch GROOVY_3_0_X
in repository https://gitbox.apache.org/repos/asf/groovy.git


The following commit(s) were added to refs/heads/GROOVY_3_0_X by this push:
     new b4e3f756d8 GROOVY-10578: Groovydoc noscripts and nomainforscripts 
options no longer work
b4e3f756d8 is described below

commit b4e3f756d8dc7d25440d9ea54c0bc649649ec9d3
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 ebb714c258..b4af548b28 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
@@ -84,7 +84,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 b058508b95..b7a4005ae6 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 + 
"\".*");
     }

Reply via email to