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 2021/10/04 20:10:11 UTC
[groovy] branch GROOVY-10282 created (now b68587a)
This is an automated email from the ASF dual-hosted git repository.
emilles pushed a change to branch GROOVY-10282
in repository https://gitbox.apache.org/repos/asf/groovy.git.
at b68587a GROOVY-10282: GenericsUtils: do not mix type parameter contexts
This branch includes the following new commits:
new b68587a GROOVY-10282: GenericsUtils: do not mix type parameter contexts
The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails. The revisions
listed as "add" were already present in the repository and have only
been added to this reference.
[groovy] 01/01: GROOVY-10282: GenericsUtils: do not mix type
parameter contexts
Posted by em...@apache.org.
This is an automated email from the ASF dual-hosted git repository.
emilles pushed a commit to branch GROOVY-10282
in repository https://gitbox.apache.org/repos/asf/groovy.git
commit b68587a67c0461cef70345ebcdfaa34522d3e4aa
Author: Eric Milles <er...@thomsonreuters.com>
AuthorDate: Mon Oct 4 15:09:53 2021 -0500
GROOVY-10282: GenericsUtils: do not mix type parameter contexts
collect for BiFunction<U, ? super T, U> yields [T:U, U:? super T, R:U]
not [T:? super T, U:? super T, R:? super T]
---
.../codehaus/groovy/ast/tools/GenericsUtils.java | 45 ++--------------------
src/test/groovy/transform/stc/LambdaTest.groovy | 2 +-
2 files changed, 5 insertions(+), 42 deletions(-)
diff --git a/src/main/java/org/codehaus/groovy/ast/tools/GenericsUtils.java b/src/main/java/org/codehaus/groovy/ast/tools/GenericsUtils.java
index 5a97ee6..6505836 100644
--- a/src/main/java/org/codehaus/groovy/ast/tools/GenericsUtils.java
+++ b/src/main/java/org/codehaus/groovy/ast/tools/GenericsUtils.java
@@ -816,7 +816,7 @@ public class GenericsUtils {
* so we need actual types: T: String, S: Long
*/
public static Map<GenericsType, GenericsType> makeDeclaringAndActualGenericsTypeMap(final ClassNode declaringClass, final ClassNode actualReceiver) {
- return doMakeDeclaringAndActualGenericsTypeMap(declaringClass, actualReceiver, false).getV1();
+ return doMakeDeclaringAndActualGenericsTypeMap(declaringClass, actualReceiver, false);
}
/**
@@ -831,23 +831,10 @@ public class GenericsUtils {
* @since 3.0.0
*/
public static Map<GenericsType, GenericsType> makeDeclaringAndActualGenericsTypeMapOfExactType(final ClassNode declaringClass, final ClassNode actualReceiver) {
- return makeDeclaringAndActualGenericsTypeMapOfExactType(declaringClass, actualReceiver, new HashSet<>());
+ return doMakeDeclaringAndActualGenericsTypeMap(declaringClass, actualReceiver, true);
}
- private static Map<GenericsType, GenericsType> makeDeclaringAndActualGenericsTypeMapOfExactType(final ClassNode declaringClass, final ClassNode actualReceiver, final Set<ClassNode> parameterizedTypes) {
- Tuple2<Map<GenericsType, GenericsType>, ClassNode> tuple = doMakeDeclaringAndActualGenericsTypeMap(declaringClass, actualReceiver, true);
- Map<GenericsType, GenericsType> result = tuple.getV1();
- ClassNode parameterizedType = tuple.getV2();
-
- if (parameterizedTypes.add(parameterizedType) && hasPlaceHolders(parameterizedType)) {
- result.putAll(makeDeclaringAndActualGenericsTypeMapOfExactType(parameterizedType, actualReceiver, parameterizedTypes));
- result = connectGenericsTypes(result);
- }
-
- return result;
- }
-
- private static Tuple2<Map<GenericsType, GenericsType>, ClassNode> doMakeDeclaringAndActualGenericsTypeMap(final ClassNode declaringClass, final ClassNode actualReceiver, final boolean tryToFindExactType) {
+ private static Map<GenericsType, GenericsType> doMakeDeclaringAndActualGenericsTypeMap(final ClassNode declaringClass, final ClassNode actualReceiver, final boolean tryToFindExactType) {
Map<GenericsType, GenericsType> map = Collections.emptyMap();
ClassNode parameterizedType = findParameterizedTypeFromCache(declaringClass, actualReceiver, tryToFindExactType);
if (parameterizedType != null && parameterizedType.isRedirectNode() && !parameterizedType.isGenericsPlaceHolder()) { // GROOVY-10166
@@ -862,31 +849,7 @@ public class GenericsUtils {
}
}
}
- return tuple(map, parameterizedType);
- }
-
- private static Map<GenericsType, GenericsType> connectGenericsTypes(final Map<GenericsType, GenericsType> genericsTypeMap) {
- Map<GenericsType, GenericsType> result = new LinkedHashMap<>();
-
- outer:
- for (Map.Entry<GenericsType, GenericsType> entry : genericsTypeMap.entrySet()) {
- GenericsType key = entry.getKey();
- GenericsType value = entry.getValue();
-
- if (value.isPlaceholder()) {
- for (Map.Entry<GenericsType, GenericsType> genericsTypeMapEntry : genericsTypeMap.entrySet()) {
- GenericsType genericsTypeMapEntryValue = genericsTypeMapEntry.getValue();
- if (!genericsTypeMapEntryValue.isPlaceholder() && (genericsTypeMapEntry.getKey().getName().equals(value.getName()))) {
- result.put(key, genericsTypeMapEntryValue); // connected to actual type
- continue outer;
- }
- }
- }
-
- result.put(key, value);
- }
-
- return result;
+ return map;
}
/**
diff --git a/src/test/groovy/transform/stc/LambdaTest.groovy b/src/test/groovy/transform/stc/LambdaTest.groovy
index 3c3c021..a32df04 100644
--- a/src/test/groovy/transform/stc/LambdaTest.groovy
+++ b/src/test/groovy/transform/stc/LambdaTest.groovy
@@ -117,7 +117,7 @@ final class LambdaTest {
'''
}
- @Test @NotYetImplemented
+ @Test // GROOVY-10282
void testBiFunctionAndBinaryOperatorWithSharedTypeParameter() {
assertScript '''
import groovy.transform.CompileStatic