Skip to content

Commit 632e2bd

Browse files
committed
GROOVY-9763
1 parent 9ddae89 commit 632e2bd

File tree

3 files changed

+36
-0
lines changed
  • base
  • base-test/org.eclipse.jdt.groovy.core.tests.compiler/src/org/eclipse/jdt/groovy/core/tests/basic

3 files changed

+36
-0
lines changed

base-test/org.eclipse.jdt.groovy.core.tests.compiler/src/org/eclipse/jdt/groovy/core/tests/basic/TraitsTests.java

+25
Original file line numberDiff line numberDiff line change
@@ -2674,4 +2674,29 @@ public void testTraits9760() {
26742674

26752675
runConformTest(sources, "works");
26762676
}
2677+
2678+
@Test
2679+
public void testTraits9763() {
2680+
//@formatter:off
2681+
String[] sources = {
2682+
"Script.groovy",
2683+
"@groovy.transform.CompileStatic\n" +
2684+
"void test() {\n" +
2685+
" C.m({ -> print 'works'; return 0 })\n" +
2686+
"}\n" +
2687+
"test()\n",
2688+
2689+
"C.groovy",
2690+
"class C implements T {\n" +
2691+
"}\n",
2692+
2693+
"T.groovy",
2694+
"trait T {\n" +
2695+
" static <U> U m(Closure<U> callable) { callable.call() }\n" +
2696+
"}\n",
2697+
};
2698+
//@formatter:on
2699+
2700+
runConformTest(sources, "works");
2701+
}
26772702
}

base/org.codehaus.groovy25/src/org/codehaus/groovy/transform/trait/TraitComposer.java

+6
Original file line numberDiff line numberDiff line change
@@ -143,12 +143,18 @@ private static void applyTrait(final ClassNode trait, final ClassNode cNode, fin
143143
Parameter[] origParams = new Parameter[helperMethodParams.length - 1];
144144
Parameter[] params = new Parameter[helperMethodParams.length - 1];
145145
System.arraycopy(methodNode.getParameters(), 1, params, 0, params.length);
146+
/* GRECLIPSE edit -- GROOVY-9763
146147
Map<String,ClassNode> methodGenericsSpec = new LinkedHashMap<String, ClassNode>(genericsSpec);
147148
MethodNode originalMethod = trait.getMethod(name, params);
148149
// Original method may be null for the case of private or static methods
149150
if (originalMethod!=null) {
150151
methodGenericsSpec = GenericsUtils.addMethodGenerics(originalMethod, methodGenericsSpec);
151152
}
153+
*/
154+
MethodNode originalMethod = trait.getMethod(name, params);
155+
Map<String, ClassNode> methodGenericsSpec = GenericsUtils.addMethodGenerics(
156+
originalMethod != null ? originalMethod : methodNode, genericsSpec);
157+
// GRECLIPSE end
152158
for (int i = 1; i < helperMethodParams.length; i++) {
153159
Parameter parameter = helperMethodParams[i];
154160
ClassNode originType = parameter.getOriginType();

base/org.codehaus.groovy30/src/org/codehaus/groovy/transform/trait/TraitComposer.java

+5
Original file line numberDiff line numberDiff line change
@@ -142,8 +142,13 @@ private static void applyTrait(final ClassNode trait, final ClassNode cNode, fin
142142
Parameter[] params = new Parameter[nParams - 1];
143143
System.arraycopy(methodNode.getParameters(), 1, params, 0, params.length);
144144
MethodNode originalMethod = trait.getMethod(name, params);
145+
/* GRECLIPSE edit -- GROOVY-9763
145146
Map<String, ClassNode> methodGenericsSpec = Optional.ofNullable(originalMethod)
146147
.map(m -> GenericsUtils.addMethodGenerics(m, genericsSpec)).orElse(genericsSpec);
148+
*/
149+
Map<String, ClassNode> methodGenericsSpec = GenericsUtils.addMethodGenerics(
150+
Optional.ofNullable(originalMethod).orElse(methodNode), genericsSpec);
151+
// GRECLIPSE end
147152
for (int i = 1; i < nParams; i += 1) {
148153
Parameter parameter = helperMethodParams[i];
149154
ClassNode originType = parameter.getOriginType();

0 commit comments

Comments
 (0)