From d59a171b65b30ea6e03a05aa8da18b2394037f4a Mon Sep 17 00:00:00 2001 From: Simon Ogorodnik Date: Tue, 19 Nov 2019 19:16:25 +0300 Subject: [PATCH] [FIR] Fix isMyTypeVariable in ConeInferenceContext --- .../fir/resolve/calls/ConeInferenceContext.kt | 2 +- .../resolve/stdlib/j+k/typeParameterUse.kt | 19 +++++++++++++++++++ .../resolve/stdlib/j+k/typeParameterUse.txt | 4 ++++ ...FirDiagnosticsWithStdlibTestGenerated.java | 5 +++++ 4 files changed, 29 insertions(+), 1 deletion(-) create mode 100644 compiler/fir/resolve/testData/resolve/stdlib/j+k/typeParameterUse.kt create mode 100644 compiler/fir/resolve/testData/resolve/stdlib/j+k/typeParameterUse.txt diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/ConeInferenceContext.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/ConeInferenceContext.kt index 71aa02373ca..db6b7280d6a 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/ConeInferenceContext.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/ConeInferenceContext.kt @@ -241,7 +241,7 @@ interface ConeInferenceContext : TypeSystemInferenceExtensionContext, override fun KotlinTypeMarker.mayBeTypeVariable(): Boolean { require(this is ConeKotlinType) - return this is ConeTypeVariableType + return this.typeConstructor() is ConeTypeVariableTypeConstructor } override fun CapturedTypeMarker.typeConstructorProjection(): TypeArgumentMarker { diff --git a/compiler/fir/resolve/testData/resolve/stdlib/j+k/typeParameterUse.kt b/compiler/fir/resolve/testData/resolve/stdlib/j+k/typeParameterUse.kt new file mode 100644 index 00000000000..16dbfa26eed --- /dev/null +++ b/compiler/fir/resolve/testData/resolve/stdlib/j+k/typeParameterUse.kt @@ -0,0 +1,19 @@ +// FULL_JDK +// FILE: U.java +import org.jetbrains.annotations.NotNull; +public class U { + + @NotNull + public T getValue(Box<@NotNull T> box) {} +} + +// FILE: Box.java + +public class Box {} + + +// FILE: useSite.kt +fun foo(holder: U, box: Box): Int { + + return holder.getValue(box) +} \ No newline at end of file diff --git a/compiler/fir/resolve/testData/resolve/stdlib/j+k/typeParameterUse.txt b/compiler/fir/resolve/testData/resolve/stdlib/j+k/typeParameterUse.txt new file mode 100644 index 00000000000..e4f74861b68 --- /dev/null +++ b/compiler/fir/resolve/testData/resolve/stdlib/j+k/typeParameterUse.txt @@ -0,0 +1,4 @@ +FILE: useSite.kt + public final fun foo(holder: R|U|, box: R|Box|): R|kotlin/Int| { + ^foo R|/holder|.R|/U.getValue|(R|/box|) + } diff --git a/compiler/fir/resolve/tests/org/jetbrains/kotlin/fir/FirDiagnosticsWithStdlibTestGenerated.java b/compiler/fir/resolve/tests/org/jetbrains/kotlin/fir/FirDiagnosticsWithStdlibTestGenerated.java index 40393eaaefb..667b1f5ebd4 100644 --- a/compiler/fir/resolve/tests/org/jetbrains/kotlin/fir/FirDiagnosticsWithStdlibTestGenerated.java +++ b/compiler/fir/resolve/tests/org/jetbrains/kotlin/fir/FirDiagnosticsWithStdlibTestGenerated.java @@ -513,6 +513,11 @@ public class FirDiagnosticsWithStdlibTestGenerated extends AbstractFirDiagnostic public void testStaticGenericMethod() throws Exception { runTest("compiler/fir/resolve/testData/resolve/stdlib/j+k/StaticGenericMethod.kt"); } + + @TestMetadata("typeParameterUse.kt") + public void testTypeParameterUse() throws Exception { + runTest("compiler/fir/resolve/testData/resolve/stdlib/j+k/typeParameterUse.kt"); + } } @TestMetadata("compiler/fir/resolve/testData/resolve/stdlib/problems")