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 2016/06/03 04:19:04 UTC
groovy git commit: GROOVY-7852: Inconsistent checking of final for
multi-assignments
Repository: groovy
Updated Branches:
refs/heads/master b57f46df4 -> 0795f3eef
GROOVY-7852: Inconsistent checking of final for multi-assignments
Project: http://git-wip-us.apache.org/repos/asf/groovy/repo
Commit: http://git-wip-us.apache.org/repos/asf/groovy/commit/0795f3ee
Tree: http://git-wip-us.apache.org/repos/asf/groovy/tree/0795f3ee
Diff: http://git-wip-us.apache.org/repos/asf/groovy/diff/0795f3ee
Branch: refs/heads/master
Commit: 0795f3eefd5ee9d0952d355098edc50e38639aaa
Parents: b57f46d
Author: paulk <pa...@asert.com.au>
Authored: Thu Jun 2 12:29:42 2016 +1000
Committer: paulk <pa...@asert.com.au>
Committed: Thu Jun 2 12:29:42 2016 +1000
----------------------------------------------------------------------
.../codehaus/groovy/classgen/FinalVariableAnalyzer.java | 11 +++++++++--
.../groovy/classgen/FinalVariableAnalyzerTest.groovy | 7 +++++++
2 files changed, 16 insertions(+), 2 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/groovy/blob/0795f3ee/src/main/org/codehaus/groovy/classgen/FinalVariableAnalyzer.java
----------------------------------------------------------------------
diff --git a/src/main/org/codehaus/groovy/classgen/FinalVariableAnalyzer.java b/src/main/org/codehaus/groovy/classgen/FinalVariableAnalyzer.java
index 64006c2..dc47387 100644
--- a/src/main/org/codehaus/groovy/classgen/FinalVariableAnalyzer.java
+++ b/src/main/org/codehaus/groovy/classgen/FinalVariableAnalyzer.java
@@ -28,6 +28,7 @@ import org.codehaus.groovy.ast.expr.EmptyExpression;
import org.codehaus.groovy.ast.expr.Expression;
import org.codehaus.groovy.ast.expr.PostfixExpression;
import org.codehaus.groovy.ast.expr.PrefixExpression;
+import org.codehaus.groovy.ast.expr.TupleExpression;
import org.codehaus.groovy.ast.expr.VariableExpression;
import org.codehaus.groovy.ast.stmt.BlockStatement;
import org.codehaus.groovy.ast.stmt.CatchStatement;
@@ -161,9 +162,15 @@ public class FinalVariableAnalyzer extends ClassCodeVisitorSupport {
if (assignment) {
if (leftExpression instanceof Variable) {
boolean uninitialized =
- isDeclaration &&
- rightExpression == EmptyExpression.INSTANCE;
+ isDeclaration && rightExpression == EmptyExpression.INSTANCE;
recordAssignment((Variable) leftExpression, isDeclaration, uninitialized, false, expression);
+ } else if (leftExpression instanceof TupleExpression) {
+ TupleExpression te = (TupleExpression) leftExpression;
+ for (Expression next : te.getExpressions()) {
+ if (next instanceof Variable) {
+ recordAssignment((Variable) next, isDeclaration, false, false, next);
+ }
+ }
}
}
}
http://git-wip-us.apache.org/repos/asf/groovy/blob/0795f3ee/src/test/org/codehaus/groovy/classgen/FinalVariableAnalyzerTest.groovy
----------------------------------------------------------------------
diff --git a/src/test/org/codehaus/groovy/classgen/FinalVariableAnalyzerTest.groovy b/src/test/org/codehaus/groovy/classgen/FinalVariableAnalyzerTest.groovy
index d5525cf..cd42b84 100644
--- a/src/test/org/codehaus/groovy/classgen/FinalVariableAnalyzerTest.groovy
+++ b/src/test/org/codehaus/groovy/classgen/FinalVariableAnalyzerTest.groovy
@@ -77,6 +77,13 @@ class FinalVariableAnalyzerTest extends GroovyTestCase {
'''
}
+ void testReassignedVarShouldNotBeFinalWhenUsingMultiAssigment() {
+ assertFinals x: false, '''
+ def x = 1
+ (x) = [2]
+ '''
+ }
+
void testUnassignedVarShouldNotBeConsideredFinal() {
assertFinals x:false, '''def x'''
}