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 2022/04/30 21:07:09 UTC
[groovy] 01/02: GROOVY-9006: STC: compare to null for types that overload equals
This is an automated email from the ASF dual-hosted git repository.
emilles pushed a commit to branch GROOVY_2_5_X
in repository https://gitbox.apache.org/repos/asf/groovy.git
commit 7c7a4ec76a7524165fb8612b9c864c1e97bcbcd4
Author: Eric Milles <er...@thomsonreuters.com>
AuthorDate: Tue Oct 19 19:42:22 2021 -0500
GROOVY-9006: STC: compare to null for types that overload equals
Conflicts:
src/main/java/org/codehaus/groovy/transform/stc/StaticTypeCheckingVisitor.java
---
.../groovy/transform/stc/StaticTypeCheckingVisitor.java | 9 +++++++--
src/test/groovy/transform/stc/BugsSTCTest.groovy | 15 +++++++++++++++
2 files changed, 22 insertions(+), 2 deletions(-)
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 9e9a3e7a00..3b9eaa531b 100644
--- a/src/main/java/org/codehaus/groovy/transform/stc/StaticTypeCheckingVisitor.java
+++ b/src/main/java/org/codehaus/groovy/transform/stc/StaticTypeCheckingVisitor.java
@@ -4358,8 +4358,13 @@ public class StaticTypeCheckingVisitor extends ClassCodeVisitorSupport {
return mathResultType;
}
- // GROOVY-5890
- // do not mix Class<Foo> with Foo
+ // GROOVY-9006: compare to null for types that overload equals
+ if ("equals".equals(operationName) && (left == UNKNOWN_PARAMETER_TYPE
+ || right == UNKNOWN_PARAMETER_TYPE)) {
+ return boolean_TYPE;
+ }
+
+ // GROOVY-5890: do not mix Class<Type> with Type
if (leftExpression instanceof ClassExpression) {
left = CLASS_Type.getPlainNodeReference();
}
diff --git a/src/test/groovy/transform/stc/BugsSTCTest.groovy b/src/test/groovy/transform/stc/BugsSTCTest.groovy
index 8d3f2eb097..61d90da3ce 100644
--- a/src/test/groovy/transform/stc/BugsSTCTest.groovy
+++ b/src/test/groovy/transform/stc/BugsSTCTest.groovy
@@ -715,6 +715,21 @@ Printer
'''
}
+ // GROOVY-9006
+ void testAmbiguousMethodResolutionTimestampComparedToNull() {
+ assertScript '''
+ import java.sql.Timestamp
+
+ def test(Timestamp timestamp) {
+ if (timestamp != null) { // Reference to method is ambiguous
+ return 'not null'
+ }
+ }
+ def result = test(new Timestamp(new Date().getTime()))
+ assert result == 'not null'
+ '''
+ }
+
// GROOVY-6911
void testShouldNotThrowArrayIndexOfOutBoundsException() {
assertScript '''