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/26 15:27:42 UTC

[groovy] branch GROOVY_3_0_X updated: GROOVY-8828: STC: `UnionTypeClassNode` plain node reference semantics

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

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


The following commit(s) were added to refs/heads/GROOVY_3_0_X by this push:
     new 4e76a889d3 GROOVY-8828: STC: `UnionTypeClassNode` plain node reference semantics
4e76a889d3 is described below

commit 4e76a889d39de4f0a8950391430a296dc6bee4b8
Author: Eric Milles <er...@thomsonreuters.com>
AuthorDate: Fri Aug 26 10:12:59 2022 -0500

    GROOVY-8828: STC: `UnionTypeClassNode` plain node reference semantics
---
 .../groovy/transform/stc/UnionTypeClassNode.java   | 23 +++++++++++++++-------
 .../transform/stc/TypeInferenceSTCTest.groovy      |  2 +-
 2 files changed, 17 insertions(+), 8 deletions(-)

diff --git a/src/main/java/org/codehaus/groovy/transform/stc/UnionTypeClassNode.java b/src/main/java/org/codehaus/groovy/transform/stc/UnionTypeClassNode.java
index 1513421c27..bff30695e8 100644
--- a/src/main/java/org/codehaus/groovy/transform/stc/UnionTypeClassNode.java
+++ b/src/main/java/org/codehaus/groovy/transform/stc/UnionTypeClassNode.java
@@ -43,6 +43,7 @@ import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
+import java.util.StringJoiner;
 
 /**
  * This class node type is very special and should only be used by the static type checker
@@ -57,18 +58,17 @@ import java.util.Set;
 class UnionTypeClassNode extends ClassNode {
     private final ClassNode[] delegates;
 
-    public UnionTypeClassNode(ClassNode... classNodes) {
-        super("<UnionType:" + asArrayDescriptor(classNodes) + ">", 0, ClassHelper.OBJECT_TYPE);
+    UnionTypeClassNode(final ClassNode... classNodes) {
+        super(makeName(classNodes), 0, ClassHelper.OBJECT_TYPE);
         delegates = classNodes == null ? ClassNode.EMPTY_ARRAY : classNodes;
     }
 
-    private static String asArrayDescriptor(ClassNode... nodes) {
-        StringBuilder sb = new StringBuilder();
+    private static String makeName(final ClassNode[] nodes) {
+        StringJoiner sj = new StringJoiner("+", "<UnionType:", ">");
         for (ClassNode node : nodes) {
-            if (sb.length() > 0) sb.append("+");
-            sb.append(node.getText());
+            sj.add(node.getText());
         }
-        return sb.toString();
+        return sj.toString();
     }
 
     public ClassNode[] getDelegates() {
@@ -306,6 +306,15 @@ class UnionTypeClassNode extends ClassNode {
         return nodes;
     }
 
+    @Override
+    public ClassNode getPlainNodeReference() {
+        int n = delegates.length; ClassNode[] plainNodes = new ClassNode[n];
+        for (int i = 0; i < n; i += 1) {
+            plainNodes[i] = delegates[i].getPlainNodeReference();
+        }
+        return new UnionTypeClassNode(plainNodes);
+    }
+
     @Override
     public List<PropertyNode> getProperties() {
         List<PropertyNode> nodes = new LinkedList<PropertyNode>();
diff --git a/src/test/groovy/transform/stc/TypeInferenceSTCTest.groovy b/src/test/groovy/transform/stc/TypeInferenceSTCTest.groovy
index e865073b18..14ada2abb1 100644
--- a/src/test/groovy/transform/stc/TypeInferenceSTCTest.groovy
+++ b/src/test/groovy/transform/stc/TypeInferenceSTCTest.groovy
@@ -398,7 +398,7 @@ class TypeInferenceSTCTest extends StaticTypeCheckingTestCase {
         }
     }
 
-    @NotYetImplemented // GROOVY-8828
+    // GROOVY-8828
     void testMultipleInstanceOf7() {
         assertScript '''
             interface Foo { }