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/02/11 20:29:47 UTC
[groovy] 01/01: GROOVY-9389: check setter type(s) against
field/property/accessor type
This is an automated email from the ASF dual-hosted git repository.
emilles pushed a commit to branch GROOVY-9389
in repository https://gitbox.apache.org/repos/asf/groovy.git
commit e0bd2bddf6d5687bcb89925203b232e46ea12e77
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
---
.../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()