[FIR] Resolve LHS of type operator call in independent context
#KT-39046 Fixed
This commit is contained in:
+17
@@ -0,0 +1,17 @@
|
|||||||
|
// ISSUE: KT-39046
|
||||||
|
|
||||||
|
fun foo(b: B<Int, Int>) {}
|
||||||
|
|
||||||
|
fun test_1(b: B<String, Number>) {
|
||||||
|
foo(b.myMap {
|
||||||
|
it.k.length // implicits
|
||||||
|
} as B<Int, Int>)
|
||||||
|
}
|
||||||
|
|
||||||
|
fun test_2(s: String) {
|
||||||
|
val func = { s.length } as B<Int, Int>
|
||||||
|
}
|
||||||
|
|
||||||
|
class B<out K, V>(val k: K, val v: V)
|
||||||
|
|
||||||
|
fun <X, R, V> B<X, V>.myMap(transform: (B<X, V>) -> R): B<R, V> = TODO()
|
||||||
+30
@@ -0,0 +1,30 @@
|
|||||||
|
FILE: lambdaInLhsOfTypeOperatorCall.kt
|
||||||
|
public final fun foo(b: R|B<kotlin/Int, kotlin/Int>|): R|kotlin/Unit| {
|
||||||
|
}
|
||||||
|
public final fun test_1(b: R|B<kotlin/String, kotlin/Number>|): R|kotlin/Unit| {
|
||||||
|
R|/foo|((R|<local>/b|.R|/myMap|<R|kotlin/String|, R|kotlin/Int|, R|kotlin/Number|>(<L> = myMap@fun <anonymous>(it: R|B<kotlin/String, kotlin/Number>|): R|kotlin/Int| {
|
||||||
|
^ R|<local>/it|.R|FakeOverride</B.k: R|kotlin/String|>|.R|kotlin/String.length|
|
||||||
|
}
|
||||||
|
) as R|B<kotlin/Int, kotlin/Int>|))
|
||||||
|
}
|
||||||
|
public final fun test_2(s: R|kotlin/String|): R|kotlin/Unit| {
|
||||||
|
lval func: R|B<kotlin/Int, kotlin/Int>| = (fun <anonymous>(): R|kotlin/Int| {
|
||||||
|
^ R|<local>/s|.R|kotlin/String.length|
|
||||||
|
}
|
||||||
|
as R|B<kotlin/Int, kotlin/Int>|)
|
||||||
|
}
|
||||||
|
public final class B<out K, V> : R|kotlin/Any| {
|
||||||
|
public constructor<out K, V>(k: R|K|, v: R|V|): R|B<K, V>| {
|
||||||
|
super<R|kotlin/Any|>()
|
||||||
|
}
|
||||||
|
|
||||||
|
public final val k: R|K| = R|<local>/k|
|
||||||
|
public get(): R|K|
|
||||||
|
|
||||||
|
public final val v: R|V| = R|<local>/v|
|
||||||
|
public get(): R|V|
|
||||||
|
|
||||||
|
}
|
||||||
|
public final fun <X, R, V> R|B<X, V>|.myMap(transform: R|(B<X, V>) -> R|): R|B<R, V>| {
|
||||||
|
^myMap R|kotlin/TODO|()
|
||||||
|
}
|
||||||
Generated
+5
@@ -243,6 +243,11 @@ public class FirDiagnosticsTestGenerated extends AbstractFirDiagnosticsTest {
|
|||||||
runTest("compiler/fir/analysis-tests/testData/resolve/lambdaArgInScopeFunction.kt");
|
runTest("compiler/fir/analysis-tests/testData/resolve/lambdaArgInScopeFunction.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("lambdaInLhsOfTypeOperatorCall.kt")
|
||||||
|
public void testLambdaInLhsOfTypeOperatorCall() throws Exception {
|
||||||
|
runTest("compiler/fir/analysis-tests/testData/resolve/lambdaInLhsOfTypeOperatorCall.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("lambdaPropertyTypeInference.kt")
|
@TestMetadata("lambdaPropertyTypeInference.kt")
|
||||||
public void testLambdaPropertyTypeInference() throws Exception {
|
public void testLambdaPropertyTypeInference() throws Exception {
|
||||||
runTest("compiler/fir/analysis-tests/testData/resolve/lambdaPropertyTypeInference.kt");
|
runTest("compiler/fir/analysis-tests/testData/resolve/lambdaPropertyTypeInference.kt");
|
||||||
|
|||||||
+5
@@ -243,6 +243,11 @@ public class FirDiagnosticsWithLightTreeTestGenerated extends AbstractFirDiagnos
|
|||||||
runTest("compiler/fir/analysis-tests/testData/resolve/lambdaArgInScopeFunction.kt");
|
runTest("compiler/fir/analysis-tests/testData/resolve/lambdaArgInScopeFunction.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("lambdaInLhsOfTypeOperatorCall.kt")
|
||||||
|
public void testLambdaInLhsOfTypeOperatorCall() throws Exception {
|
||||||
|
runTest("compiler/fir/analysis-tests/testData/resolve/lambdaInLhsOfTypeOperatorCall.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("lambdaPropertyTypeInference.kt")
|
@TestMetadata("lambdaPropertyTypeInference.kt")
|
||||||
public void testLambdaPropertyTypeInference() throws Exception {
|
public void testLambdaPropertyTypeInference() throws Exception {
|
||||||
runTest("compiler/fir/analysis-tests/testData/resolve/lambdaPropertyTypeInference.kt");
|
runTest("compiler/fir/analysis-tests/testData/resolve/lambdaPropertyTypeInference.kt");
|
||||||
|
|||||||
+1
-1
@@ -385,7 +385,7 @@ open class FirExpressionsResolveTransformer(transformer: FirBodyResolveTransform
|
|||||||
typeOperatorCall: FirTypeOperatorCall,
|
typeOperatorCall: FirTypeOperatorCall,
|
||||||
data: ResolutionMode,
|
data: ResolutionMode,
|
||||||
): CompositeTransformResult<FirStatement> {
|
): CompositeTransformResult<FirStatement> {
|
||||||
val resolved = transformExpression(typeOperatorCall, data).single as FirTypeOperatorCall
|
val resolved = transformExpression(typeOperatorCall, ResolutionMode.ContextIndependent).single as FirTypeOperatorCall
|
||||||
resolved.argumentList.transformArguments(integerLiteralTypeApproximator, null)
|
resolved.argumentList.transformArguments(integerLiteralTypeApproximator, null)
|
||||||
val conversionTypeRef = resolved.conversionTypeRef.withTypeArgumentsForBareType(resolved.argument)
|
val conversionTypeRef = resolved.conversionTypeRef.withTypeArgumentsForBareType(resolved.argument)
|
||||||
resolved.transformChildren(object : FirDefaultTransformer<Nothing?>() {
|
resolved.transformChildren(object : FirDefaultTransformer<Nothing?>() {
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
// IGNORE_BACKEND_FIR: JVM_IR
|
|
||||||
// WITH_RUNTIME
|
// WITH_RUNTIME
|
||||||
|
|
||||||
import kotlin.test.assertEquals
|
import kotlin.test.assertEquals
|
||||||
|
|||||||
-1
@@ -1,5 +1,4 @@
|
|||||||
// !LANGUAGE: +FunctionTypesWithBigArity
|
// !LANGUAGE: +FunctionTypesWithBigArity
|
||||||
// IGNORE_BACKEND_FIR: JVM_IR
|
|
||||||
// TARGET_BACKEND: JVM
|
// TARGET_BACKEND: JVM
|
||||||
// WITH_RUNTIME
|
// WITH_RUNTIME
|
||||||
// FILE: Test.java
|
// FILE: Test.java
|
||||||
|
|||||||
@@ -1,4 +1,3 @@
|
|||||||
// IGNORE_BACKEND_FIR: JVM_IR
|
|
||||||
// TARGET_BACKEND: JVM
|
// TARGET_BACKEND: JVM
|
||||||
// WITH_REFLECT
|
// WITH_REFLECT
|
||||||
|
|
||||||
|
|||||||
-1
@@ -1,4 +1,3 @@
|
|||||||
// IGNORE_BACKEND_FIR: JVM_IR
|
|
||||||
// WITH_RUNTIME
|
// WITH_RUNTIME
|
||||||
|
|
||||||
import kotlin.reflect.*
|
import kotlin.reflect.*
|
||||||
|
|||||||
+1
-1
@@ -7,4 +7,4 @@ fun bar(f: () -> Unit) = 1
|
|||||||
fun bar(f: (String) -> Unit) = 2
|
fun bar(f: (String) -> Unit) = 2
|
||||||
|
|
||||||
val x1 = <!UNRESOLVED_REFERENCE!>::foo<!> as () -> Unit
|
val x1 = <!UNRESOLVED_REFERENCE!>::foo<!> as () -> Unit
|
||||||
val x2 = bar(::foo as (String) -> Unit)
|
val x2 = bar(<!UNRESOLVED_REFERENCE!>::foo<!> as (String) -> Unit)
|
||||||
Reference in New Issue
Block a user