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/08/18 17:10:57 UTC

[groovy] branch GROOVY-8788 updated: GROOVY-6668: STC: reduce distance of `GString` for `String` target

This is an automated email from the ASF dual-hosted git repository.

emilles pushed a commit to branch GROOVY-8788
in repository https://gitbox.apache.org/repos/asf/groovy.git


The following commit(s) were added to refs/heads/GROOVY-8788 by this push:
     new ef75b99540 GROOVY-6668: STC: reduce distance of `GString` for `String` target
ef75b99540 is described below

commit ef75b9954095e6cf9c23f03db27c5ccd603da41f
Author: Eric Milles <er...@thomsonreuters.com>
AuthorDate: Thu Aug 18 12:10:41 2022 -0500

    GROOVY-6668: STC: reduce distance of `GString` for `String` target
---
 .../groovy/transform/stc/StaticTypeCheckingSupport.java   |  3 +++
 .../transform/stc/DefaultGroovyMethodsSTCTest.groovy      | 15 +++++++++++++++
 2 files changed, 18 insertions(+)

diff --git a/src/main/java/org/codehaus/groovy/transform/stc/StaticTypeCheckingSupport.java b/src/main/java/org/codehaus/groovy/transform/stc/StaticTypeCheckingSupport.java
index de55e6992b..23684d9ff8 100644
--- a/src/main/java/org/codehaus/groovy/transform/stc/StaticTypeCheckingSupport.java
+++ b/src/main/java/org/codehaus/groovy/transform/stc/StaticTypeCheckingSupport.java
@@ -923,6 +923,9 @@ public abstract class StaticTypeCheckingSupport {
         if (receiver.isArray() && compare.isArray()) {
             return getDistance(receiver.getComponentType(), compare.getComponentType());
         }
+        if (isGStringOrGStringStringLUB(receiver) && isStringType(compare)) {
+            return 3; // GROOVY-6668: closer than Object and GroovyObjectSupport
+        }
         int dist = 0;
         ClassNode unwrapReceiver = getUnwrapper(receiver);
         ClassNode unwrapCompare = getUnwrapper(compare);
diff --git a/src/test/groovy/transform/stc/DefaultGroovyMethodsSTCTest.groovy b/src/test/groovy/transform/stc/DefaultGroovyMethodsSTCTest.groovy
index dc30227909..27e7f85dcc 100644
--- a/src/test/groovy/transform/stc/DefaultGroovyMethodsSTCTest.groovy
+++ b/src/test/groovy/transform/stc/DefaultGroovyMethodsSTCTest.groovy
@@ -338,4 +338,19 @@ class DefaultGroovyMethodsSTCTest extends StaticTypeCheckingTestCase {
             test()
         '''
     }
+
+    // GROOVY-6668
+    void testMapGetAtVsObjectGetAt2() {
+        assertScript '''
+            Map<String, String> map = [key:'val']
+
+            assert map.get('key')  .toUpperCase() == 'VAL'
+            assert map.getAt('key').toUpperCase() == 'VAL'
+            assert map['key']      .toUpperCase() == 'VAL'
+
+            assert map.get("${'key'}")  ?.toUpperCase() == null  // get(Object); no coerce
+            assert map.getAt("${'key'}")?.toUpperCase() == 'VAL'
+            assert map["${'key'}"]      ?.toUpperCase() == 'VAL'
+        '''
+    }
 }