FIR resolve: use proper argument mapping in FlatSignature for constructor
This commit is contained in:
committed by
Mikhail Glukhikh
parent
d89913dc8d
commit
e6b9c41f3a
+1
-1
@@ -59,7 +59,7 @@ class ConeOverloadConflictResolver(
|
|||||||
return FlatSignature(
|
return FlatSignature(
|
||||||
call,
|
call,
|
||||||
constructor.typeParameters.map { it.symbol },
|
constructor.typeParameters.map { it.symbol },
|
||||||
constructor.valueParameters.map { it.returnTypeRef.coneTypeUnsafe() },
|
call.argumentMapping!!.map { it.value.returnTypeRef.coneTypeUnsafe() },
|
||||||
//constructor.receiverTypeRef != null,
|
//constructor.receiverTypeRef != null,
|
||||||
false,
|
false,
|
||||||
constructor.valueParameters.any { it.isVararg },
|
constructor.valueParameters.any { it.isVararg },
|
||||||
|
|||||||
+17
@@ -0,0 +1,17 @@
|
|||||||
|
interface B
|
||||||
|
interface C {
|
||||||
|
val b: B
|
||||||
|
}
|
||||||
|
|
||||||
|
fun A(b: B?, flag: Boolean = true) = A(b!!, flag)
|
||||||
|
|
||||||
|
fun A(c: C, flag: Boolean = true) = A(c.b, flag)
|
||||||
|
|
||||||
|
class A(val b: B, val flag: Boolean = true)
|
||||||
|
|
||||||
|
|
||||||
|
fun foo(c: C, b: B, bn: B?) {
|
||||||
|
val x = A(c)
|
||||||
|
val y = A(b)
|
||||||
|
val z = A(bn)
|
||||||
|
}
|
||||||
+39
@@ -0,0 +1,39 @@
|
|||||||
|
FILE: factoryFunctionOverloads.kt
|
||||||
|
public abstract interface B : R|kotlin/Any| {
|
||||||
|
}
|
||||||
|
public abstract interface C : R|kotlin/Any| {
|
||||||
|
public abstract val b: R|B|
|
||||||
|
public get(): R|B|
|
||||||
|
|
||||||
|
}
|
||||||
|
public final fun A(b: R|B|?, flag: R|kotlin/Boolean| = Boolean(true)): R|A| {
|
||||||
|
^A R|/A.A|(when (lval <bangbang>: R|B|? = R|<local>/b|) {
|
||||||
|
==($subj$, Null(null)) -> {
|
||||||
|
throw <Unresolved name: KotlinNullPointerException>#()
|
||||||
|
}
|
||||||
|
else -> {
|
||||||
|
R|<local>/<bangbang>|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
, R|<local>/flag|)
|
||||||
|
}
|
||||||
|
public final fun A(c: R|C|, flag: R|kotlin/Boolean| = Boolean(true)): R|A| {
|
||||||
|
^A R|/A.A|(R|<local>/c|.R|/C.b|, R|<local>/flag|)
|
||||||
|
}
|
||||||
|
public final class A : R|kotlin/Any| {
|
||||||
|
public constructor(b: R|B|, flag: R|kotlin/Boolean| = Boolean(true)): R|A| {
|
||||||
|
super<R|kotlin/Any|>()
|
||||||
|
}
|
||||||
|
|
||||||
|
public final val b: R|B| = R|<local>/b|
|
||||||
|
public get(): R|B|
|
||||||
|
|
||||||
|
public final val flag: R|kotlin/Boolean| = R|<local>/flag|
|
||||||
|
public get(): R|kotlin/Boolean|
|
||||||
|
|
||||||
|
}
|
||||||
|
public final fun foo(c: R|C|, b: R|B|, bn: R|B|?): R|kotlin/Unit| {
|
||||||
|
lval x: R|A| = R|/A|(R|<local>/c|)
|
||||||
|
lval y: R|A| = R|/A.A|(R|<local>/b|)
|
||||||
|
lval z: R|A| = R|/A.A|(R|<local>/bn|)
|
||||||
|
}
|
||||||
+5
@@ -217,6 +217,11 @@ public class FirResolveTestCaseGenerated extends AbstractFirResolveTestCase {
|
|||||||
runTest("compiler/fir/resolve/testData/resolve/expresssions/dispatchReceiver.kt");
|
runTest("compiler/fir/resolve/testData/resolve/expresssions/dispatchReceiver.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("factoryFunctionOverloads.kt")
|
||||||
|
public void testFactoryFunctionOverloads() throws Exception {
|
||||||
|
runTest("compiler/fir/resolve/testData/resolve/expresssions/factoryFunctionOverloads.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("lambda.kt")
|
@TestMetadata("lambda.kt")
|
||||||
public void testLambda() throws Exception {
|
public void testLambda() throws Exception {
|
||||||
runTest("compiler/fir/resolve/testData/resolve/expresssions/lambda.kt");
|
runTest("compiler/fir/resolve/testData/resolve/expresssions/lambda.kt");
|
||||||
|
|||||||
Reference in New Issue
Block a user