You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@groovy.apache.org by em...@apache.org on 2020/12/10 20:57:39 UTC

[groovy] 05/05: prevent non-final parameter warnings for script methods

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

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

commit 1413397f1a3e0bf755ad02f35d61e3f2b0022ae9
Author: Eric Milles <er...@thomsonreuters.com>
AuthorDate: Mon Dec 7 11:22:49 2020 -0600

    prevent non-final parameter warnings for script methods
    
    Conflicts:
    	src/main/java/org/codehaus/groovy/ast/ModuleNode.java
---
 src/main/java/org/codehaus/groovy/ast/ModuleNode.java       | 13 +++++++++----
 .../groovy/console/ui/AstNodeToScriptAdapterTest.groovy     |  7 +++----
 .../groovy/console/ui/ScriptToTreeNodeAdapterTest.groovy    |  6 +++---
 3 files changed, 15 insertions(+), 11 deletions(-)

diff --git a/src/main/java/org/codehaus/groovy/ast/ModuleNode.java b/src/main/java/org/codehaus/groovy/ast/ModuleNode.java
index 23ab7c4..66588dd 100644
--- a/src/main/java/org/codehaus/groovy/ast/ModuleNode.java
+++ b/src/main/java/org/codehaus/groovy/ast/ModuleNode.java
@@ -326,6 +326,12 @@ public class ModuleNode extends ASTNode implements Opcodes {
         }
     }
 
+    private static Parameter[] finalParam(final ClassNode type, final String name) {
+        Parameter parameter = param(type, name);
+        parameter.setModifiers(ACC_FINAL);
+        return params(parameter);
+    }
+
     protected ClassNode createStatementsClass() {
         ClassNode classNode = getScriptClassDummy();
         if (classNode.getName().endsWith("package-info")) {
@@ -339,12 +345,11 @@ public class ModuleNode extends ASTNode implements Opcodes {
                 "main",
                 ACC_PUBLIC | ACC_STATIC,
                 ClassHelper.VOID_TYPE,
-                params(param(ClassHelper.STRING_TYPE.makeArray(), "args")),
+                finalParam(ClassHelper.STRING_TYPE.makeArray(), "args"),
                 ClassNode.EMPTY_ARRAY,
-                // InvokerHelper.runScript(scriptClass, args)
                 stmt(
                     callX(
-                        classX(ClassHelper.make(InvokerHelper.class)),
+                        ClassHelper.make(InvokerHelper.class),
                         "runScript",
                         args(classX(classNode), varX("args"))
                     )
@@ -374,7 +379,7 @@ public class ModuleNode extends ASTNode implements Opcodes {
 
         classNode.addConstructor(
             ACC_PUBLIC,
-            params(param(ClassHelper.make(Binding.class), "context")),
+            finalParam(ClassHelper.make(Binding.class), "context"),
             ClassNode.EMPTY_ARRAY,
             stmt);
 
diff --git a/subprojects/groovy-console/src/test/groovy/groovy/console/ui/AstNodeToScriptAdapterTest.groovy b/subprojects/groovy-console/src/test/groovy/groovy/console/ui/AstNodeToScriptAdapterTest.groovy
index 323a9cf..99cdcdc 100644
--- a/subprojects/groovy-console/src/test/groovy/groovy/console/ui/AstNodeToScriptAdapterTest.groovy
+++ b/subprojects/groovy-console/src/test/groovy/groovy/console/ui/AstNodeToScriptAdapterTest.groovy
@@ -31,25 +31,24 @@ import static org.codehaus.groovy.ast.tools.GeneralUtils.constX
 import static org.codehaus.groovy.ast.tools.GeneralUtils.stmt
 
 /**
- * Unit test for ScriptToTreeNodeAdapter.
+ * Unit test for {@link AstNodeToScriptAdapter}.
  *
  * The assertions in this test case often assert against the toString() representation of
  * an object. Normally, this is bad form. However, the class under test is meant to display
  * toString() forms in a user interface. So in this case it is appropriate.
  */
-class AstNodeToScriptAdapterTest extends GroovyTestCase {
+final class AstNodeToScriptAdapterTest extends GroovyTestCase {
 
     private static String compileToScript(String script, CompilePhase phase = CompilePhase.SEMANTIC_ANALYSIS) {
         new AstNodeToScriptAdapter().compileToScript(script, phase.phaseNumber)
     }
 
     void testScript() {
-
         String result = compileToScript('true')
 
         assert result =~ /public class script[0-9]* extends groovy\.lang\.Script \{/
         assert result =~ /public script[0-9]*\(\) \{\s*\}/
-        assert result =~ /public script[0-9]*\(groovy.lang.Binding context\) \{\s*super\(context\)\s*\}/
+        assert result =~ /public script[0-9]*\(final groovy.lang.Binding context\) \{\s*super\(context\)\s*\}/
         assert result =~ /public java.lang.Object run\(\) \{\s*true\s*\}/
     }
 
diff --git a/subprojects/groovy-console/src/test/groovy/groovy/console/ui/ScriptToTreeNodeAdapterTest.groovy b/subprojects/groovy-console/src/test/groovy/groovy/console/ui/ScriptToTreeNodeAdapterTest.groovy
index 7653a81..f566fb0 100644
--- a/subprojects/groovy-console/src/test/groovy/groovy/console/ui/ScriptToTreeNodeAdapterTest.groovy
+++ b/subprojects/groovy-console/src/test/groovy/groovy/console/ui/ScriptToTreeNodeAdapterTest.groovy
@@ -26,13 +26,13 @@ import org.codehaus.groovy.control.Phases
 import javax.swing.tree.TreeNode
 
 /**
- * Unit test for ScriptToTreeNodeAdapter.
+ * Unit test for {@link ScriptToTreeNodeAdapter}.
  *
  * The assertions in this test case often assert against the toString() representation of
  * an object. Normally, this is bad form. However, the class under test is meant to display
  * toString() forms in a user interface. So in this case it is appropriate.
  */
-class ScriptToTreeNodeAdapterTest extends GroovyTestCase {
+final class ScriptToTreeNodeAdapterTest extends GroovyTestCase {
 
      private final classLoader = new GroovyClassLoader()
 
@@ -285,7 +285,7 @@ class ScriptToTreeNodeAdapterTest extends GroovyTestCase {
                         eq('Methods'),
                         eq('MethodNode - main'),
                         startsWith('ExpressionStatement'),  //notice, there is only one ExpressionStatement
-                        startsWith('MethodCall'),
+                        startsWith('StaticMethodCallExpression'),
                 ]
         )
     }