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