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 + "\".*");
     }