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 2020/02/12 04:39:45 UTC
[groovy] branch master updated: GROOVY-9389: check setter type(s)
against field/property/accessor type (closes #1164)
This is an automated email from the ASF dual-hosted git repository.
paulk pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/groovy.git
The following commit(s) were added to refs/heads/master by this push:
new 543c97b GROOVY-9389: check setter type(s) against field/property/accessor type (closes #1164)
543c97b is described below
commit 543c97b6e6bbb67cd6c9c71cac1ca37ac8bd39f4
Author: Eric Milles <er...@thomsonreuters.com>
AuthorDate: Tue Feb 11 14:19:57 2020 -0600
GROOVY-9389: check setter type(s) against field/property/accessor type (closes #1164)
---
.../transform/stc/StaticTypeCheckingVisitor.java | 9 +++++++++
.../groovy/transform/stc/STCAssignmentTest.groovy | 20 ++++++++++++++++++++
2 files changed, 29 insertions(+)
diff --git a/src/main/java/org/codehaus/groovy/transform/stc/StaticTypeCheckingVisitor.java b/src/main/java/org/codehaus/groovy/transform/stc/StaticTypeCheckingVisitor.java
index 86e49f5..1a72af2 100644
--- a/src/main/java/org/codehaus/groovy/transform/stc/StaticTypeCheckingVisitor.java
+++ b/src/main/java/org/codehaus/groovy/transform/stc/StaticTypeCheckingVisitor.java
@@ -2010,6 +2010,15 @@ public class StaticTypeCheckingVisitor extends ClassCodeVisitorSupport {
}
try {
operand.visit(this);
+ SetterInfo setterInfo = removeSetterInfo(operand);
+ if (setterInfo != null) {
+ BinaryExpression rewrite = typeCheckingContext.getEnclosingBinaryExpression();
+ rewrite.setSourcePosition(origin);
+ if (ensureValidSetter(rewrite, operand, rewrite.getRightExpression(), setterInfo)) {
+ return;
+ }
+ }
+
ClassNode operandType = getType(operand);
boolean isPostfix = (origin instanceof PostfixExpression);
String name = (operator == PLUS_PLUS ? "next" : operator == MINUS_MINUS ? "previous" : null);
diff --git a/src/test/groovy/transform/stc/STCAssignmentTest.groovy b/src/test/groovy/transform/stc/STCAssignmentTest.groovy
index 645a6de..f9a7a06 100644
--- a/src/test/groovy/transform/stc/STCAssignmentTest.groovy
+++ b/src/test/groovy/transform/stc/STCAssignmentTest.groovy
@@ -732,6 +732,26 @@ class STCAssignmentTest extends StaticTypeCheckingTestCase {
'''
}
+ // GROOVY-9389
+ void testPostfixOnNumber() {
+ assertScript '''
+ class Pogo {
+ Integer integer = 0
+ Integer getInteger() { return integer }
+ void setInteger(Integer i) { integer = i }
+ }
+ new Pogo().integer++
+ '''
+ shouldFailWithMessages '''
+ class Pogo {
+ Integer integer = 0
+ Integer getInteger() { return integer }
+ void setInteger(Character c) { integer = (c as int) }
+ }
+ new Pogo().integer++
+ ''', 'Cannot assign value of type java.lang.Integer to variable of type java.lang.Character'
+ }
+
void testPostfixOnObject() {
shouldFailWithMessages '''
Object o = new Object()