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 { }