From 115f9b3db44d782fbfc638e8219c17e2d219e408 Mon Sep 17 00:00:00 2001 From: "alexey.afanasiev" Date: Thu, 20 Jul 2017 17:36:41 +0300 Subject: [PATCH] IDEA-176307 Incorrect closure to SAM coercion --- .../processors/SubstitutorComputer.java | 2 +- .../GrGenericsInferringTest.groovy | 76 +++++++++++++++++++ 2 files changed, 77 insertions(+), 1 deletion(-) diff --git a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/resolve/processors/SubstitutorComputer.java b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/resolve/processors/SubstitutorComputer.java index 5167aa634659..150ee826d0d8 100644 --- a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/resolve/processors/SubstitutorComputer.java +++ b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/lang/resolve/processors/SubstitutorComputer.java @@ -260,7 +260,7 @@ public class SubstitutorComputer { if (closureParameters.length != 1) return null; PsiSubstitutor substitutor = myHelper.inferTypeArguments( - samClassTypeParameters, new PsiType[]{samReturnType}, closureParameters, LanguageLevel.JDK_1_7 + samClassTypeParameters, new PsiType[]{samReturnType}, closureParameters, LanguageLevel.JDK_1_8 ); if (substitutor.getSubstitutionMap().isEmpty()) return null; diff --git a/plugins/groovy/test/org/jetbrains/plugins/groovy/lang/highlighting/GrGenericsInferringTest.groovy b/plugins/groovy/test/org/jetbrains/plugins/groovy/lang/highlighting/GrGenericsInferringTest.groovy index 5b61830a13cd..b656674c4e3c 100644 --- a/plugins/groovy/test/org/jetbrains/plugins/groovy/lang/highlighting/GrGenericsInferringTest.groovy +++ b/plugins/groovy/test/org/jetbrains/plugins/groovy/lang/highlighting/GrGenericsInferringTest.groovy @@ -15,7 +15,18 @@ */ package org.jetbrains.plugins.groovy.lang.highlighting +import com.intellij.testFramework.LightProjectDescriptor +import org.jetbrains.annotations.NotNull +import org.jetbrains.plugins.groovy.GroovyLightProjectDescriptor + class GrGenericsInferringTest extends GrHighlightingTestBase { + + @Override + @NotNull + protected LightProjectDescriptor getProjectDescriptor() { + return GroovyLightProjectDescriptor.GROOVY_2_3 + } + void testMapExplicit() { testHighlighting ''' import groovy.transform.CompileStatic @@ -319,4 +330,69 @@ class Foo { } ''' } + + void testClosureToSAM() { + testHighlighting '''\ +import groovy.transform.CompileStatic + +interface SAM { + Out run(In argument) } + +@CompileStatic +class SomeClass2 { + static String join(T item, SAM f) { + return "" + } + + static void method() { + join(new SomeClass2(), { it.toString() }) + } +} + +''' + } + + void testClosureToSAMWildcard() { + testHighlighting '''\ +import groovy.transform.CompileStatic + +interface SAM { + Out run(In argument) +} + +@CompileStatic +class SomeClass2 { + static String join(T item, SAM f) { + return "" + } + + static void method() { + join(new SomeClass2(), { it.toString() }) + } +} +''' + } + + void testClosureToSAMGenericWildcard() { + testHighlighting '''\ + import groovy.transform.CompileStatic + + interface SAM { + Out run(In argument) + } + + @CompileStatic + class SomeClass2 { + static String join(List item, SAM f) { + return "" + } + + static void method() { + def list = [new SomeClass2()] + join(list, { it.toString() }) + } + } + ''' + } +} \ No newline at end of file