Refine the verification for assignments
Project: http://git-wip-us.apache.org/repos/asf/groovy/repo Commit: http://git-wip-us.apache.org/repos/asf/groovy/commit/fc490b97 Tree: http://git-wip-us.apache.org/repos/asf/groovy/tree/fc490b97 Diff: http://git-wip-us.apache.org/repos/asf/groovy/diff/fc490b97 Branch: refs/heads/master Commit: fc490b9793d3b6210977df20668d876258350db8 Parents: b017a53 Author: sunlan <sun...@apache.org> Authored: Tue Mar 28 00:34:53 2017 +0800 Committer: sunlan <sun...@apache.org> Committed: Tue Mar 28 00:34:53 2017 +0800 ---------------------------------------------------------------------- .../classgen/ClassCompletionVerifier.java | 23 +++----------------- .../groovy/classgen/VariableScopeVisitor.java | 22 +++---------------- src/main/org/codehaus/groovy/syntax/Types.java | 2 ++ 3 files changed, 8 insertions(+), 39 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/groovy/blob/fc490b97/src/main/org/codehaus/groovy/classgen/ClassCompletionVerifier.java ---------------------------------------------------------------------- diff --git a/src/main/org/codehaus/groovy/classgen/ClassCompletionVerifier.java b/src/main/org/codehaus/groovy/classgen/ClassCompletionVerifier.java index a8f4948..4319f2a 100644 --- a/src/main/org/codehaus/groovy/classgen/ClassCompletionVerifier.java +++ b/src/main/org/codehaus/groovy/classgen/ClassCompletionVerifier.java @@ -510,26 +510,9 @@ public class ClassCompletionVerifier extends ClassCodeVisitorSupport { } super.visitBinaryExpression(expression); - switch (expression.getOperation().getType()) { - case Types.EQUAL: // = assignment - case Types.BITWISE_AND_EQUAL: - case Types.BITWISE_OR_EQUAL: - case Types.BITWISE_XOR_EQUAL: - case Types.PLUS_EQUAL: - case Types.MINUS_EQUAL: - case Types.MULTIPLY_EQUAL: - case Types.DIVIDE_EQUAL: - case Types.INTDIV_EQUAL: - case Types.MOD_EQUAL: - case Types.POWER_EQUAL: - case Types.LEFT_SHIFT_EQUAL: - case Types.RIGHT_SHIFT_EQUAL: - case Types.RIGHT_SHIFT_UNSIGNED_EQUAL: - checkFinalFieldAccess(expression.getLeftExpression()); - checkSuperOrThisOnLHS(expression.getLeftExpression()); - break; - default: - break; + if (Types.ASSIGNMENT_SET.contains(expression.getOperation().getType())) { + checkFinalFieldAccess(expression.getLeftExpression()); + checkSuperOrThisOnLHS(expression.getLeftExpression()); } } http://git-wip-us.apache.org/repos/asf/groovy/blob/fc490b97/src/main/org/codehaus/groovy/classgen/VariableScopeVisitor.java ---------------------------------------------------------------------- diff --git a/src/main/org/codehaus/groovy/classgen/VariableScopeVisitor.java b/src/main/org/codehaus/groovy/classgen/VariableScopeVisitor.java index 9085eb7..ad9dd76 100644 --- a/src/main/org/codehaus/groovy/classgen/VariableScopeVisitor.java +++ b/src/main/org/codehaus/groovy/classgen/VariableScopeVisitor.java @@ -347,25 +347,9 @@ public class VariableScopeVisitor extends ClassCodeVisitorSupport { @Override public void visitBinaryExpression(BinaryExpression be) { super.visitBinaryExpression(be); - switch (be.getOperation().getType()) { - case Types.EQUAL: // = assignment - case Types.BITWISE_AND_EQUAL: - case Types.BITWISE_OR_EQUAL: - case Types.BITWISE_XOR_EQUAL: - case Types.PLUS_EQUAL: - case Types.MINUS_EQUAL: - case Types.MULTIPLY_EQUAL: - case Types.DIVIDE_EQUAL: - case Types.INTDIV_EQUAL: - case Types.MOD_EQUAL: - case Types.POWER_EQUAL: - case Types.LEFT_SHIFT_EQUAL: - case Types.RIGHT_SHIFT_EQUAL: - case Types.RIGHT_SHIFT_UNSIGNED_EQUAL: - checkFinalFieldAccess(be.getLeftExpression()); - break; - default: - break; + + if (Types.ASSIGNMENT_SET.contains(be.getOperation().getType())) { + checkFinalFieldAccess(be.getLeftExpression()); } } http://git-wip-us.apache.org/repos/asf/groovy/blob/fc490b97/src/main/org/codehaus/groovy/syntax/Types.java ---------------------------------------------------------------------- diff --git a/src/main/org/codehaus/groovy/syntax/Types.java b/src/main/org/codehaus/groovy/syntax/Types.java index 534c5ea..f03fc18 100644 --- a/src/main/org/codehaus/groovy/syntax/Types.java +++ b/src/main/org/codehaus/groovy/syntax/Types.java @@ -20,6 +20,7 @@ package org.codehaus.groovy.syntax; import org.codehaus.groovy.GroovyBugError; +import java.util.Arrays; import java.util.Collection; import java.util.Collections; import java.util.HashMap; @@ -1446,4 +1447,5 @@ public class Types addDescription( SWITCH_ENTRIES , "<valid in a switch body>" ); } + public static final Set<Integer> ASSIGNMENT_SET = new HashSet<Integer>(Arrays.asList(EQUAL, BITWISE_AND_EQUAL, BITWISE_OR_EQUAL, BITWISE_XOR_EQUAL, PLUS_EQUAL, MINUS_EQUAL, MULTIPLY_EQUAL, DIVIDE_EQUAL, INTDIV_EQUAL, MOD_EQUAL, POWER_EQUAL, LEFT_SHIFT_EQUAL, RIGHT_SHIFT_EQUAL, RIGHT_SHIFT_UNSIGNED_EQUAL, ELVIS_EQUAL)); }