Skip to content

Commit 845f9fc

Browse files
committed
GROOVY-10282
1 parent c66d390 commit 845f9fc

File tree

4 files changed

+41
-2
lines changed

4 files changed

+41
-2
lines changed

base-test/org.eclipse.jdt.groovy.core.tests.compiler/src/org/eclipse/jdt/groovy/core/tests/xform/StaticCompilationTests.java

+19
Original file line numberDiff line numberDiff line change
@@ -6406,4 +6406,23 @@ public void testCompileStatic10229() {
64066406
checkDisassemblyFor("C$_b_closure1.class",
64076407
" // Signature: ()Ljava/util/List<Ljava/util/Map<Ljava/lang/String;+Ljava/lang/Object;>;>;\n"); // not L?;
64086408
}
6409+
6410+
@Test // BiFunction and BinaryOperator with same type parameter
6411+
public void testCompileStatic10282() {
6412+
assumeTrue(isParrotParser());
6413+
6414+
//@formatter:off
6415+
String[] sources = {
6416+
"Main.groovy",
6417+
"@groovy.transform.CompileStatic\n" +
6418+
"String f() {\n" +
6419+
" def integers = java.util.stream.IntStream.range(0, 10).boxed()\n" +
6420+
" integers.reduce('', (s, i) -> s + '-', String::concat)\n" +
6421+
"}\n" +
6422+
"print f()\n",
6423+
};
6424+
//@formatter:on
6425+
6426+
runConformTest(sources, "----------");
6427+
}
64096428
}

base/org.codehaus.groovy25/src/org/codehaus/groovy/ast/tools/GenericsUtils.java

+8
Original file line numberDiff line numberDiff line change
@@ -918,13 +918,18 @@ public static Map<GenericsType, GenericsType> makeDeclaringAndActualGenericsType
918918
* @since 2.5.9
919919
*/
920920
public static Map<GenericsType, GenericsType> makeDeclaringAndActualGenericsTypeMapOfExactType(ClassNode declaringClass, ClassNode actualReceiver) {
921+
/* GRECLIPSE edit -- GROOVY-10282
921922
List<ClassNode> parameterizedTypeList = new LinkedList<>();
922923
923924
Map<GenericsType, GenericsType> result = makeDeclaringAndActualGenericsTypeMapOfExactType(declaringClass, actualReceiver, parameterizedTypeList);
924925
925926
return connectGenericsTypes(result);
927+
*/
928+
return doMakeDeclaringAndActualGenericsTypeMap(declaringClass, actualReceiver, true).getFirst();
929+
// GRECLIPSE end
926930
}
927931

932+
/* GRECLIPSE edit
928933
private static Map<GenericsType, GenericsType> makeDeclaringAndActualGenericsTypeMapOfExactType(ClassNode declaringClass, ClassNode actualReceiver, List<ClassNode> parameterizedTypeList) {
929934
Tuple2<Map<GenericsType, GenericsType>, ClassNode> resultAndParameterizedTypeTuple = doMakeDeclaringAndActualGenericsTypeMap(declaringClass, actualReceiver, true);
930935
ClassNode parameterizedType = resultAndParameterizedTypeTuple.getSecond();
@@ -937,6 +942,7 @@ private static Map<GenericsType, GenericsType> makeDeclaringAndActualGenericsTyp
937942
938943
return connectGenericsTypes(result);
939944
}
945+
*/
940946

941947
private static Tuple2<Map<GenericsType, GenericsType>, ClassNode> doMakeDeclaringAndActualGenericsTypeMap(ClassNode declaringClass, ClassNode actualReceiver, boolean tryToFindExactType) {
942948
ClassNode parameterizedType = findParameterizedTypeFromCache(declaringClass, actualReceiver, tryToFindExactType);
@@ -970,6 +976,7 @@ private static Tuple2<Map<GenericsType, GenericsType>, ClassNode> doMakeDeclarin
970976
// GRECLIPSE end
971977
}
972978

979+
/* GRECLIPSE edit
973980
private static Map<GenericsType, GenericsType> connectGenericsTypes(Map<GenericsType, GenericsType> genericsTypeMap) {
974981
Map<GenericsType, GenericsType> result = new LinkedHashMap<>();
975982
@@ -993,6 +1000,7 @@ private static Map<GenericsType, GenericsType> connectGenericsTypes(Map<Generics
9931000
9941001
return result;
9951002
}
1003+
*/
9961004

9971005
public static boolean hasPlaceHolders(final ClassNode parameterizedType) {
9981006
return checkPlaceHolders(parameterizedType, GenericsType::isPlaceholder);

base/org.codehaus.groovy30/src/org/codehaus/groovy/ast/tools/GenericsUtils.java

+7-1
Original file line numberDiff line numberDiff line change
@@ -848,9 +848,14 @@ public static Map<GenericsType, GenericsType> makeDeclaringAndActualGenericsType
848848
* @since 3.0.0
849849
*/
850850
public static Map<GenericsType, GenericsType> makeDeclaringAndActualGenericsTypeMapOfExactType(final ClassNode declaringClass, final ClassNode actualReceiver) {
851+
/* GRECLIPSE edit -- GROOVY-10282
851852
return makeDeclaringAndActualGenericsTypeMapOfExactType(declaringClass, actualReceiver, new HashSet<>());
853+
*/
854+
return doMakeDeclaringAndActualGenericsTypeMap(declaringClass, actualReceiver, true).getV1();
855+
// GRECLIPSE end
852856
}
853857

858+
/* GRECLIPSE edit
854859
private static Map<GenericsType, GenericsType> makeDeclaringAndActualGenericsTypeMapOfExactType(final ClassNode declaringClass, final ClassNode actualReceiver, final Set<ClassNode> parameterizedTypes) {
855860
Tuple2<Map<GenericsType, GenericsType>, ClassNode> tuple = doMakeDeclaringAndActualGenericsTypeMap(declaringClass, actualReceiver, true);
856861
Map<GenericsType, GenericsType> result = tuple.getV1();
@@ -863,6 +868,7 @@ private static Map<GenericsType, GenericsType> makeDeclaringAndActualGenericsTyp
863868
864869
return result;
865870
}
871+
*/
866872

867873
private static Tuple2<Map<GenericsType, GenericsType>, ClassNode> doMakeDeclaringAndActualGenericsTypeMap(final ClassNode declaringClass, final ClassNode actualReceiver, final boolean tryToFindExactType) {
868874
ClassNode parameterizedType = findParameterizedTypeFromCache(declaringClass, actualReceiver, tryToFindExactType);
@@ -916,7 +922,6 @@ private static Map<GenericsType, GenericsType> makePlaceholderAndParameterizedTy
916922
917923
return result;
918924
}
919-
*/
920925
921926
private static Map<GenericsType, GenericsType> connectGenericsTypes(final Map<GenericsType, GenericsType> genericsTypeMap) {
922927
Map<GenericsType, GenericsType> result = new LinkedHashMap<>();
@@ -941,6 +946,7 @@ private static Map<GenericsType, GenericsType> connectGenericsTypes(final Map<Ge
941946
942947
return result;
943948
}
949+
*/
944950

945951
/**
946952
* Checks if the type has any non-placeholder (aka resolved) generics.

base/org.codehaus.groovy40/src/org/codehaus/groovy/ast/tools/GenericsUtils.java

+7-1
Original file line numberDiff line numberDiff line change
@@ -847,9 +847,14 @@ public static Map<GenericsType, GenericsType> makeDeclaringAndActualGenericsType
847847
* @since 3.0.0
848848
*/
849849
public static Map<GenericsType, GenericsType> makeDeclaringAndActualGenericsTypeMapOfExactType(final ClassNode declaringClass, final ClassNode actualReceiver) {
850+
/* GRECLIPSE edit -- GROOVY-10282
850851
return makeDeclaringAndActualGenericsTypeMapOfExactType(declaringClass, actualReceiver, new HashSet<>());
852+
*/
853+
return doMakeDeclaringAndActualGenericsTypeMap(declaringClass, actualReceiver, true).getV1();
854+
// GRECLIPSE end
851855
}
852856

857+
/* GRECLIPSE edit
853858
private static Map<GenericsType, GenericsType> makeDeclaringAndActualGenericsTypeMapOfExactType(final ClassNode declaringClass, final ClassNode actualReceiver, final Set<ClassNode> parameterizedTypes) {
854859
Tuple2<Map<GenericsType, GenericsType>, ClassNode> tuple = doMakeDeclaringAndActualGenericsTypeMap(declaringClass, actualReceiver, true);
855860
Map<GenericsType, GenericsType> result = tuple.getV1();
@@ -862,6 +867,7 @@ private static Map<GenericsType, GenericsType> makeDeclaringAndActualGenericsTyp
862867
863868
return result;
864869
}
870+
*/
865871

866872
private static Tuple2<Map<GenericsType, GenericsType>, ClassNode> doMakeDeclaringAndActualGenericsTypeMap(final ClassNode declaringClass, final ClassNode actualReceiver, final boolean tryToFindExactType) {
867873
ClassNode parameterizedType = findParameterizedTypeFromCache(declaringClass, actualReceiver, tryToFindExactType);
@@ -914,7 +920,6 @@ private static Map<GenericsType, GenericsType> makePlaceholderAndParameterizedTy
914920
915921
return result;
916922
}
917-
*/
918923
919924
private static Map<GenericsType, GenericsType> connectGenericsTypes(final Map<GenericsType, GenericsType> genericsTypeMap) {
920925
Map<GenericsType, GenericsType> result = new LinkedHashMap<>();
@@ -939,6 +944,7 @@ private static Map<GenericsType, GenericsType> connectGenericsTypes(final Map<Ge
939944
940945
return result;
941946
}
947+
*/
942948

943949
/**
944950
* Checks if the type has any non-placeholder (aka resolved) generics.

0 commit comments

Comments
 (0)