Repository: groovy Updated Branches: refs/heads/GROOVY_2_4_X 630008a1f -> de2082d6e
GROOVY-7014: minor prefactor Project: http://git-wip-us.apache.org/repos/asf/groovy/repo Commit: http://git-wip-us.apache.org/repos/asf/groovy/commit/de2082d6 Tree: http://git-wip-us.apache.org/repos/asf/groovy/tree/de2082d6 Diff: http://git-wip-us.apache.org/repos/asf/groovy/diff/de2082d6 Branch: refs/heads/GROOVY_2_4_X Commit: de2082d6ebfa6b4df49c47b535d5d294fb15b971 Parents: 630008a Author: paulk <pa...@asert.com.au> Authored: Fri Aug 12 13:27:03 2016 +1000 Committer: paulk <pa...@asert.com.au> Committed: Fri Aug 12 13:27:50 2016 +1000 ---------------------------------------------------------------------- src/main/org/codehaus/groovy/ast/ClassNode.java | 6 +-- .../groovy/control/StaticImportVisitor.java | 52 +++++++++++++++----- .../codehaus/groovy/control/StaticVerifier.java | 22 ++++++--- .../groovy/bugs/ConstructorThisCallBug.groovy | 39 ++++++--------- 4 files changed, 72 insertions(+), 47 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/groovy/blob/de2082d6/src/main/org/codehaus/groovy/ast/ClassNode.java ---------------------------------------------------------------------- diff --git a/src/main/org/codehaus/groovy/ast/ClassNode.java b/src/main/org/codehaus/groovy/ast/ClassNode.java index 6306f5f..12994ed 100644 --- a/src/main/org/codehaus/groovy/ast/ClassNode.java +++ b/src/main/org/codehaus/groovy/ast/ClassNode.java @@ -104,8 +104,6 @@ import java.util.Set; * by the class are needed, then a call to {@link #redirect()} will help. * * @see org.codehaus.groovy.ast.ClassHelper - * @author <a href="mailto:ja...@coredevelopers.net">James Strachan</a> - * @author Jochen Theodorou */ public class ClassNode extends AnnotatedNode implements Opcodes { private static class MapOfLists { @@ -1298,10 +1296,10 @@ public class ClassNode extends AnnotatedNode implements Opcodes { } else if (arguments instanceof MapExpression) { count = 1; } - + for (MethodNode method : getMethods(name)) { if(method.isStatic()) { - Parameter[] parameters = method.getParameters(); + Parameter[] parameters = method.getParameters(); if (parameters.length == count) return true; // handle varargs case http://git-wip-us.apache.org/repos/asf/groovy/blob/de2082d6/src/main/org/codehaus/groovy/control/StaticImportVisitor.java ---------------------------------------------------------------------- diff --git a/src/main/org/codehaus/groovy/control/StaticImportVisitor.java b/src/main/org/codehaus/groovy/control/StaticImportVisitor.java index 84b8156..945cc86 100644 --- a/src/main/org/codehaus/groovy/control/StaticImportVisitor.java +++ b/src/main/org/codehaus/groovy/control/StaticImportVisitor.java @@ -18,20 +18,44 @@ */ package org.codehaus.groovy.control; -import static org.codehaus.groovy.runtime.MetaClassHelper.capitalize; - -import org.codehaus.groovy.ast.*; -import org.codehaus.groovy.ast.expr.*; +import org.codehaus.groovy.ast.AnnotatedNode; +import org.codehaus.groovy.ast.AnnotationNode; +import org.codehaus.groovy.ast.ClassCodeExpressionTransformer; +import org.codehaus.groovy.ast.ClassNode; +import org.codehaus.groovy.ast.DynamicVariable; +import org.codehaus.groovy.ast.FieldNode; +import org.codehaus.groovy.ast.ImportNode; +import org.codehaus.groovy.ast.MethodNode; +import org.codehaus.groovy.ast.ModuleNode; +import org.codehaus.groovy.ast.PropertyNode; +import org.codehaus.groovy.ast.Variable; +import org.codehaus.groovy.ast.expr.AnnotationConstantExpression; +import org.codehaus.groovy.ast.expr.ArgumentListExpression; +import org.codehaus.groovy.ast.expr.BinaryExpression; +import org.codehaus.groovy.ast.expr.ClassExpression; +import org.codehaus.groovy.ast.expr.ClosureExpression; +import org.codehaus.groovy.ast.expr.ConstantExpression; +import org.codehaus.groovy.ast.expr.ConstructorCallExpression; +import org.codehaus.groovy.ast.expr.EmptyExpression; +import org.codehaus.groovy.ast.expr.Expression; +import org.codehaus.groovy.ast.expr.ListExpression; +import org.codehaus.groovy.ast.expr.MapEntryExpression; +import org.codehaus.groovy.ast.expr.MethodCallExpression; +import org.codehaus.groovy.ast.expr.NamedArgumentListExpression; +import org.codehaus.groovy.ast.expr.PropertyExpression; +import org.codehaus.groovy.ast.expr.StaticMethodCallExpression; +import org.codehaus.groovy.ast.expr.TupleExpression; +import org.codehaus.groovy.ast.expr.VariableExpression; import org.codehaus.groovy.ast.stmt.Statement; import org.codehaus.groovy.syntax.Types; -import java.util.*; +import java.util.List; +import java.util.Map; + +import static org.codehaus.groovy.runtime.MetaClassHelper.capitalize; /** * Visitor to resolve constants and method calls from static Imports - * - * @author Jochen Theodorou - * @author Paul King */ public class StaticImportVisitor extends ClassCodeExpressionTransformer { private ClassNode currentClass; @@ -509,15 +533,19 @@ public class StaticImportVisitor extends ClassCodeExpressionTransformer { return accessor; } - private static boolean hasStaticProperty(ClassNode staticImportType, String propName) { - ClassNode classNode = staticImportType; + private static boolean hasStaticProperty(ClassNode cNode, String propName) { + return getStaticProperty(cNode, propName) != null; + } + + private static PropertyNode getStaticProperty(ClassNode cNode, String propName) { + ClassNode classNode = cNode; while (classNode != null) { for (PropertyNode pn : classNode.getProperties()) { - if (pn.getName().equals(propName) && pn.isStatic()) return true; + if (pn.getName().equals(propName) && pn.isStatic()) return pn; } classNode = classNode.getSuperClass(); } - return false; + return null; } private Expression findStaticPropertyAccessorByFullName(ClassNode staticImportType, String accessorMethodName) { http://git-wip-us.apache.org/repos/asf/groovy/blob/de2082d6/src/main/org/codehaus/groovy/control/StaticVerifier.java ---------------------------------------------------------------------- diff --git a/src/main/org/codehaus/groovy/control/StaticVerifier.java b/src/main/org/codehaus/groovy/control/StaticVerifier.java index 1cb8e49..7c70bd4 100644 --- a/src/main/org/codehaus/groovy/control/StaticVerifier.java +++ b/src/main/org/codehaus/groovy/control/StaticVerifier.java @@ -18,8 +18,20 @@ */ package org.codehaus.groovy.control; -import org.codehaus.groovy.ast.*; -import org.codehaus.groovy.ast.expr.*; +import org.codehaus.groovy.ast.ClassCodeVisitorSupport; +import org.codehaus.groovy.ast.ClassNode; +import org.codehaus.groovy.ast.CodeVisitorSupport; +import org.codehaus.groovy.ast.DynamicVariable; +import org.codehaus.groovy.ast.FieldNode; +import org.codehaus.groovy.ast.MethodNode; +import org.codehaus.groovy.ast.Parameter; +import org.codehaus.groovy.ast.Variable; +import org.codehaus.groovy.ast.expr.ClosureExpression; +import org.codehaus.groovy.ast.expr.ConstructorCallExpression; +import org.codehaus.groovy.ast.expr.Expression; +import org.codehaus.groovy.ast.expr.MethodCallExpression; +import org.codehaus.groovy.ast.expr.PropertyExpression; +import org.codehaus.groovy.ast.expr.VariableExpression; import java.util.ArrayList; import java.util.Arrays; @@ -28,14 +40,10 @@ import java.util.List; /** * Verifier to check non-static access in static contexts - * - * @author Jochen Theodorou - * @author Paul King - * @author <a href="mailto:roshandawr...@codehaus.org">Roshan Dawrani</a> */ public class StaticVerifier extends ClassCodeVisitorSupport { private boolean inSpecialConstructorCall; - private boolean inPropertyExpression; + private boolean inPropertyExpression; // TODO use it or lose it private boolean inClosure; private MethodNode currentMethod; private SourceUnit source; http://git-wip-us.apache.org/repos/asf/groovy/blob/de2082d6/src/test/groovy/bugs/ConstructorThisCallBug.groovy ---------------------------------------------------------------------- diff --git a/src/test/groovy/bugs/ConstructorThisCallBug.groovy b/src/test/groovy/bugs/ConstructorThisCallBug.groovy index fd70783..4f5c88b 100644 --- a/src/test/groovy/bugs/ConstructorThisCallBug.groovy +++ b/src/test/groovy/bugs/ConstructorThisCallBug.groovy @@ -16,34 +16,25 @@ * specific language governing permissions and limitations * under the License. */ -/** - * ConstructorThisCallBug.groovy - * - * Test Script for the Jira issue: GROOVY-994. - * - * @author Pilho Kim - * @date 2005.08.05.06.21 - */ - package groovy.bugs -public class ConstructorThisCallBug extends GroovyTestCase { - public void testCallA() { - def a1 = new ConstructorCallA("foo") - def a2 = new ConstructorCallA(9) - def a3 = new ConstructorCallA() +class ConstructorThisCallBug extends GroovyTestCase { + // GROOVY-994 + void testCallA() { + assert new ConstructorCallA("foo").toString() == 'foo' + assert new ConstructorCallA(9).toString() == '81' + assert new ConstructorCallA().toString() == '100' } -} -public class ConstructorCallA { - public ConstructorCallA() { - this(19) // call another constructor - } + private static class ConstructorCallA { + private String a - public ConstructorCallA(String a) { - } + ConstructorCallA(String a) { this.a = a } + + ConstructorCallA(int a) { this("" + (a * a)) } // call another constructor - public ConstructorCallA(int a) { - this("" + (a*a)) // call another constructor + ConstructorCallA() { this(10) } // call another constructor + + String toString() { a } } -} +}