K2: Allow PCLA inference when a value parameter has a TV type
^KT-64877 Fixed
This commit is contained in:
committed by
Space Team
parent
b2ca19da73
commit
72b0372927
+6
@@ -17199,6 +17199,12 @@ public class DiagnosticCompilerTestFE10TestdataTestGenerated extends AbstractDia
|
||||
runTest("compiler/testData/diagnostics/tests/inference/builderInference/bothOuterAndProperConstraints.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("bothReceiverAndValueParameterNotFixed.kt")
|
||||
public void testBothReceiverAndValueParameterNotFixed() throws Exception {
|
||||
runTest("compiler/testData/diagnostics/tests/inference/builderInference/bothReceiverAndValueParameterNotFixed.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("builderInferenceAnnotationInLambdaWithTVExpectedType.kt")
|
||||
public void testBuilderInferenceAnnotationInLambdaWithTVExpectedType() throws Exception {
|
||||
|
||||
+6
@@ -2772,6 +2772,12 @@ public class LLFirBlackBoxCodegenBasedTestGenerated extends AbstractLLFirBlackBo
|
||||
KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/codegen/box/builderInference"), Pattern.compile("^(.+)\\.kt$"), null, true);
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("lambdaParameterHasTVType.kt")
|
||||
public void testLambdaParameterHasTVType() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/builderInference/lambdaParameterHasTVType.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("receiverUsesOuterTVButReturnTypeIsProper.kt")
|
||||
public void testReceiverUsesOuterTVButReturnTypeIsProper() throws Exception {
|
||||
|
||||
+6
@@ -17199,6 +17199,12 @@ public class LLFirPreresolvedReversedDiagnosticCompilerFE10TestDataTestGenerated
|
||||
runTest("compiler/testData/diagnostics/tests/inference/builderInference/bothOuterAndProperConstraints.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("bothReceiverAndValueParameterNotFixed.kt")
|
||||
public void testBothReceiverAndValueParameterNotFixed() throws Exception {
|
||||
runTest("compiler/testData/diagnostics/tests/inference/builderInference/bothReceiverAndValueParameterNotFixed.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("builderInferenceAnnotationInLambdaWithTVExpectedType.kt")
|
||||
public void testBuilderInferenceAnnotationInLambdaWithTVExpectedType() throws Exception {
|
||||
|
||||
+6
@@ -2772,6 +2772,12 @@ public class LLFirReversedBlackBoxCodegenBasedTestGenerated extends AbstractLLFi
|
||||
KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/codegen/box/builderInference"), Pattern.compile("^(.+)\\.kt$"), null, true);
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("lambdaParameterHasTVType.kt")
|
||||
public void testLambdaParameterHasTVType() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/builderInference/lambdaParameterHasTVType.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("receiverUsesOuterTVButReturnTypeIsProper.kt")
|
||||
public void testReceiverUsesOuterTVButReturnTypeIsProper() throws Exception {
|
||||
|
||||
+6
@@ -17193,6 +17193,12 @@ public class FirLightTreeOldFrontendDiagnosticsTestGenerated extends AbstractFir
|
||||
runTest("compiler/testData/diagnostics/tests/inference/builderInference/bothOuterAndProperConstraints.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("bothReceiverAndValueParameterNotFixed.kt")
|
||||
public void testBothReceiverAndValueParameterNotFixed() throws Exception {
|
||||
runTest("compiler/testData/diagnostics/tests/inference/builderInference/bothReceiverAndValueParameterNotFixed.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("builderInferenceAnnotationInLambdaWithTVExpectedType.kt")
|
||||
public void testBuilderInferenceAnnotationInLambdaWithTVExpectedType() throws Exception {
|
||||
|
||||
+6
@@ -17199,6 +17199,12 @@ public class FirPsiOldFrontendDiagnosticsTestGenerated extends AbstractFirPsiDia
|
||||
runTest("compiler/testData/diagnostics/tests/inference/builderInference/bothOuterAndProperConstraints.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("bothReceiverAndValueParameterNotFixed.kt")
|
||||
public void testBothReceiverAndValueParameterNotFixed() throws Exception {
|
||||
runTest("compiler/testData/diagnostics/tests/inference/builderInference/bothReceiverAndValueParameterNotFixed.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("builderInferenceAnnotationInLambdaWithTVExpectedType.kt")
|
||||
public void testBuilderInferenceAnnotationInLambdaWithTVExpectedType() throws Exception {
|
||||
|
||||
+6
@@ -2755,6 +2755,12 @@ public class FirLightTreeBlackBoxCodegenTestGenerated extends AbstractFirLightTr
|
||||
KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/codegen/box/builderInference"), Pattern.compile("^(.+)\\.kt$"), null, TargetBackend.JVM_IR, true);
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("lambdaParameterHasTVType.kt")
|
||||
public void testLambdaParameterHasTVType() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/builderInference/lambdaParameterHasTVType.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("receiverUsesOuterTVButReturnTypeIsProper.kt")
|
||||
public void testReceiverUsesOuterTVButReturnTypeIsProper() throws Exception {
|
||||
|
||||
+6
@@ -2755,6 +2755,12 @@ public class FirLightTreeBlackBoxCodegenWithIrFakeOverrideGeneratorTestGenerated
|
||||
KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/codegen/box/builderInference"), Pattern.compile("^(.+)\\.kt$"), null, TargetBackend.JVM_IR, true);
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("lambdaParameterHasTVType.kt")
|
||||
public void testLambdaParameterHasTVType() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/builderInference/lambdaParameterHasTVType.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("receiverUsesOuterTVButReturnTypeIsProper.kt")
|
||||
public void testReceiverUsesOuterTVButReturnTypeIsProper() throws Exception {
|
||||
|
||||
+6
@@ -2755,6 +2755,12 @@ public class FirPsiBlackBoxCodegenTestGenerated extends AbstractFirPsiBlackBoxCo
|
||||
KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/codegen/box/builderInference"), Pattern.compile("^(.+)\\.kt$"), null, TargetBackend.JVM_IR, true);
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("lambdaParameterHasTVType.kt")
|
||||
public void testLambdaParameterHasTVType() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/builderInference/lambdaParameterHasTVType.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("receiverUsesOuterTVButReturnTypeIsProper.kt")
|
||||
public void testReceiverUsesOuterTVButReturnTypeIsProper() throws Exception {
|
||||
|
||||
+26
-13
@@ -267,7 +267,7 @@ class FirCallCompleter(
|
||||
this.name = name
|
||||
symbol = FirValueParameterSymbol(name)
|
||||
returnTypeRef =
|
||||
itType.approximateLambdaInputType(symbol).toFirResolvedTypeRef(
|
||||
itType.approximateLambdaInputType(symbol, withPCLASession).toFirResolvedTypeRef(
|
||||
lambdaAtom.atom.source?.fakeElement(KtFakeSourceElementKind.ItLambdaParameter)
|
||||
)
|
||||
defaultValue = null
|
||||
@@ -285,7 +285,7 @@ class FirCallCompleter(
|
||||
receiverType == null -> lambdaArgument.replaceReceiverParameter(null)
|
||||
!lambdaAtom.coerceFirstParameterToExtensionReceiver -> {
|
||||
lambdaArgument.receiverParameter?.apply {
|
||||
val type = receiverType.approximateLambdaInputType(valueParameter = null)
|
||||
val type = receiverType.approximateLambdaInputType(valueParameter = null, withPCLASession)
|
||||
val source =
|
||||
source?.fakeElement(KtFakeSourceElementKind.LambdaReceiver)
|
||||
?: lambdaArgument.source?.fakeElement(KtFakeSourceElementKind.LambdaReceiver)
|
||||
@@ -330,7 +330,7 @@ class FirCallCompleter(
|
||||
)
|
||||
return@forEachIndexed
|
||||
}
|
||||
val newReturnType = theParameters[index].approximateLambdaInputType(parameter.symbol)
|
||||
val newReturnType = theParameters[index].approximateLambdaInputType(parameter.symbol, withPCLASession)
|
||||
val newReturnTypeRef = if (parameter.returnTypeRef is FirImplicitTypeRef) {
|
||||
newReturnType.toFirResolvedTypeRef(parameter.source?.fakeElement(KtFakeSourceElementKind.ImplicitReturnTypeOfLambdaValueParameter))
|
||||
} else parameter.returnTypeRef.resolvedTypeFromPrototype(newReturnType)
|
||||
@@ -376,11 +376,14 @@ class FirCallCompleter(
|
||||
}
|
||||
}
|
||||
|
||||
private fun ConeKotlinType.approximateLambdaInputType(valueParameter: FirValueParameterSymbol?): ConeKotlinType {
|
||||
private fun ConeKotlinType.approximateLambdaInputType(
|
||||
valueParameter: FirValueParameterSymbol?,
|
||||
isRootLambdaForPCLASession: Boolean,
|
||||
): ConeKotlinType {
|
||||
// We only run lambda completion from ConstraintSystemCompletionContext.analyzeRemainingNotAnalyzedPostponedArgument when they are
|
||||
// left uninferred.
|
||||
// Currently, we use stub types for builder inference, so CANNOT_INFER_PARAMETER_TYPE is the only possible result here.
|
||||
if (isTypeVariableThatShouldBeFixedBeforeLambdaAnalysis(isReceiver = valueParameter == null)) {
|
||||
if (useErrorTypeInsteadOfTypeVariableForParameterType(isReceiver = valueParameter == null, isRootLambdaForPCLASession)) {
|
||||
val diagnostic = valueParameter?.let(::ConeCannotInferValueParameterType) ?: ConeCannotInferReceiverParameterType()
|
||||
return ConeErrorType(diagnostic)
|
||||
}
|
||||
@@ -390,18 +393,28 @@ class FirCallCompleter(
|
||||
) ?: this
|
||||
}
|
||||
|
||||
private fun ConeKotlinType.isTypeVariableThatShouldBeFixedBeforeLambdaAnalysis(isReceiver: Boolean): Boolean {
|
||||
private fun ConeKotlinType.useErrorTypeInsteadOfTypeVariableForParameterType(
|
||||
isReceiver: Boolean,
|
||||
isRootLambdaForPCLASession: Boolean,
|
||||
): Boolean {
|
||||
if (this !is ConeTypeVariableType) return false
|
||||
|
||||
// Outside PCLA, all type variables for parameter types should be fixed before lambda analysis
|
||||
// Inside PCLA, we force fixing receivers before lambda analysis
|
||||
if (inferenceSession !is FirPCLAInferenceSession || isReceiver) return true
|
||||
// Receivers are expected to be fixed both for PCLA/nonPCLA lambdas, so just build error type
|
||||
if (isReceiver) return true
|
||||
|
||||
// For type variables not based on type parameters (created for lambda parameters with no expected type)
|
||||
// we force them to be fixed before lambda analysis
|
||||
if (typeConstructor.originalTypeParameter == null) return true
|
||||
// Besides PCLA, all type variables for parameter types should be fixed before lambda analysis
|
||||
// Inside PCLA (or when we start it), we force fixing receivers before lambda analysis, but allow value parameters
|
||||
// to remain unfixed TVs.
|
||||
if (isRootLambdaForPCLASession || inferenceSession is FirPCLAInferenceSession) {
|
||||
// For type variables not based on type parameters (created for lambda parameters with no expected type)
|
||||
// we force them to be fixed before lambda analysis.
|
||||
//
|
||||
// Otherwise, it's a type variable based on a type parameter which resulting type might be inferred from the lambda body,
|
||||
// so in that case leave type variable type
|
||||
return typeConstructor.originalTypeParameter == null
|
||||
}
|
||||
|
||||
return false
|
||||
return true
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
// ISSUE: KT-53553
|
||||
|
||||
// IGNORE_LIGHT_ANALYSIS
|
||||
// IGNORE_BACKEND: ANY
|
||||
// IGNORE_BACKEND_K1: ANY
|
||||
// REASON: red code (see corresponding diagnostic test)
|
||||
|
||||
fun box(): String {
|
||||
|
||||
@@ -0,0 +1,18 @@
|
||||
class Controller<K>
|
||||
|
||||
fun <T> generate(lambda: Controller<T>.(T) -> Unit) {}
|
||||
|
||||
fun consume(f: Controller<String>) {}
|
||||
fun consumeString(f: String) {}
|
||||
|
||||
fun box(): String {
|
||||
generate {
|
||||
consume(this)
|
||||
}
|
||||
|
||||
generate {
|
||||
consumeString(it)
|
||||
}
|
||||
|
||||
return "OK"
|
||||
}
|
||||
+1
-1
@@ -4,7 +4,7 @@
|
||||
fun test() {
|
||||
val buildee = buildFromValue(
|
||||
innerBuild { setInnerTypeVariable(TargetType()) },
|
||||
<!CANNOT_INFER_PARAMETER_TYPE!>{ it.<!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>placeholderExtensionInvokeOnInnerBuildee<!>() }<!>
|
||||
{ <!BUILDER_INFERENCE_STUB_RECEIVER!>it<!>.placeholderExtensionInvokeOnInnerBuildee() }
|
||||
)
|
||||
// exact type equality check — turns unexpected compile-time behavior into red code
|
||||
// considered to be non-user-reproducible code for the purposes of these tests
|
||||
|
||||
+4
-4
@@ -3,13 +3,13 @@
|
||||
|
||||
fun test() {
|
||||
val buildee = stepByStepBuild(
|
||||
<!CANNOT_INFER_PARAMETER_TYPE!>{
|
||||
{
|
||||
it.<!UNRESOLVED_REFERENCE!>concreteTypeMemberProperty<!>
|
||||
TargetType()
|
||||
}<!>,
|
||||
<!CANNOT_INFER_PARAMETER_TYPE!>{
|
||||
},
|
||||
{
|
||||
consumeTargetTypeBase(it)
|
||||
}<!>
|
||||
}
|
||||
)
|
||||
// exact type equality check — turns unexpected compile-time behavior into red code
|
||||
// considered to be non-user-reproducible code for the purposes of these tests
|
||||
|
||||
@@ -2,17 +2,17 @@
|
||||
// CHECK_TYPE_WITH_EXACT
|
||||
|
||||
fun test() {
|
||||
val buildee = <!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>parallelBuild<!>(
|
||||
<!CANNOT_INFER_PARAMETER_TYPE!>{
|
||||
val buildee = parallelBuild(
|
||||
{
|
||||
consumeTargetTypeBase(it)
|
||||
}<!>,
|
||||
<!CANNOT_INFER_PARAMETER_TYPE!>{
|
||||
},
|
||||
{
|
||||
consumeTargetType(it)
|
||||
}<!>
|
||||
}
|
||||
)
|
||||
// exact type equality check — turns unexpected compile-time behavior into red code
|
||||
// considered to be non-user-reproducible code for the purposes of these tests
|
||||
<!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>checkExactType<!><<!CANNOT_INFER_PARAMETER_TYPE!>Buildee<TargetType><!>>(buildee)
|
||||
checkExactType<Buildee<TargetType>>(buildee)
|
||||
}
|
||||
|
||||
|
||||
|
||||
+4
-4
@@ -3,12 +3,12 @@
|
||||
|
||||
fun test() {
|
||||
val buildee = parallelBuild(
|
||||
<!CANNOT_INFER_PARAMETER_TYPE!>{
|
||||
{
|
||||
setTypeVariable(TargetType())
|
||||
}<!>,
|
||||
<!CANNOT_INFER_PARAMETER_TYPE!>{
|
||||
},
|
||||
{
|
||||
consumeDifferentType(<!ARGUMENT_TYPE_MISMATCH!>getTypeVariable()<!>)
|
||||
}<!>
|
||||
}
|
||||
)
|
||||
// exact type equality check — turns unexpected compile-time behavior into red code
|
||||
// considered to be non-user-reproducible code for the purposes of these tests
|
||||
|
||||
+4
-4
@@ -3,12 +3,12 @@
|
||||
|
||||
fun test() {
|
||||
val buildee = parallelInOutBuild(
|
||||
<!CANNOT_INFER_PARAMETER_TYPE!>{
|
||||
{
|
||||
setInProjectedTypeVariable(TargetType())
|
||||
}<!>,
|
||||
<!CANNOT_INFER_PARAMETER_TYPE!>{
|
||||
},
|
||||
{
|
||||
consumeDifferentType(<!ARGUMENT_TYPE_MISMATCH!>getOutProjectedTypeVariable()<!>)
|
||||
}<!>
|
||||
}
|
||||
)
|
||||
// exact type equality check — turns unexpected compile-time behavior into red code
|
||||
// considered to be non-user-reproducible code for the purposes of these tests
|
||||
|
||||
+24
@@ -0,0 +1,24 @@
|
||||
// ISSUE: KT-64876
|
||||
class Controller<K>
|
||||
|
||||
fun <T1> generate1(lambda: T1.(Controller<T1>) -> Unit): T1 = TODO()
|
||||
fun <T2> generate2(lambda: Controller<T2>.(T2) -> Unit): T2 = TODO()
|
||||
|
||||
fun consume(f: Controller<String>) {}
|
||||
fun consumeString(f: String) {}
|
||||
|
||||
fun main() {
|
||||
// We don't expect to allow running PCLA with not fixed TV as receiver
|
||||
// because all the calls should be resolved inside its member scope and we can't do that properly
|
||||
generate1 <!CANNOT_INFER_PARAMETER_TYPE!>{
|
||||
consume(it)
|
||||
}<!>.length
|
||||
|
||||
generate2 {
|
||||
consume(this)
|
||||
}.length
|
||||
|
||||
generate2 {
|
||||
consumeString(it)
|
||||
}.length
|
||||
}
|
||||
+24
@@ -0,0 +1,24 @@
|
||||
// ISSUE: KT-64876
|
||||
class Controller<K>
|
||||
|
||||
fun <T1> generate1(lambda: T1.(Controller<T1>) -> Unit): T1 = TODO()
|
||||
fun <T2> generate2(lambda: Controller<T2>.(T2) -> Unit): T2 = TODO()
|
||||
|
||||
fun consume(f: Controller<String>) {}
|
||||
fun consumeString(f: String) {}
|
||||
|
||||
fun main() {
|
||||
// We don't expect to allow running PCLA with not fixed TV as receiver
|
||||
// because all the calls should be resolved inside its member scope and we can't do that properly
|
||||
generate1 {
|
||||
consume(it)
|
||||
}.length
|
||||
|
||||
generate2 {
|
||||
consume(this)
|
||||
}.length
|
||||
|
||||
generate2 {
|
||||
consumeString(it)
|
||||
}.length
|
||||
}
|
||||
+1
-1
@@ -3,7 +3,7 @@
|
||||
fun test() {
|
||||
foo(
|
||||
flow { emit(0) }
|
||||
) <!CANNOT_INFER_PARAMETER_TYPE!>{ it.collect <!TOO_MANY_ARGUMENTS!>{}<!> }<!>
|
||||
) { <!BUILDER_INFERENCE_STUB_RECEIVER!>it<!>.collect <!TOO_MANY_ARGUMENTS!>{}<!> }
|
||||
|
||||
// 0. Initial
|
||||
// W <: Any / declared upper bound
|
||||
|
||||
+4
-4
@@ -11,7 +11,7 @@ fun test1() {
|
||||
<!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>a<!> <!CANNOT_INFER_PARAMETER_TYPE!>{
|
||||
<!BUILDER_INFERENCE_STUB_RECEIVER!>this.get(0)<!>.<!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>extension<!>()
|
||||
use(<!BUILDER_INFERENCE_STUB_RECEIVER!>this.get(0)<!>::extension)
|
||||
use(it::extension)
|
||||
use(<!BUILDER_INFERENCE_STUB_RECEIVER!>it<!>::extension)
|
||||
}<!>
|
||||
}
|
||||
|
||||
@@ -21,7 +21,7 @@ fun test2() {
|
||||
val v = this.get(0)
|
||||
<!BUILDER_INFERENCE_STUB_RECEIVER!>v<!>.<!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>extension<!>()
|
||||
use(<!BUILDER_INFERENCE_STUB_RECEIVER!>v<!>::extension)
|
||||
use(it::extension)
|
||||
use(<!BUILDER_INFERENCE_STUB_RECEIVER!>it<!>::extension)
|
||||
}<!>
|
||||
}
|
||||
|
||||
@@ -31,7 +31,7 @@ fun test3() {
|
||||
val v by <!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>this.get(0)<!>
|
||||
<!BUILDER_INFERENCE_STUB_RECEIVER!>v<!>.<!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>extension<!>()
|
||||
use(<!BUILDER_INFERENCE_STUB_RECEIVER!>v<!>::extension)
|
||||
use(it::extension)
|
||||
use(<!BUILDER_INFERENCE_STUB_RECEIVER!>it<!>::extension)
|
||||
}<!>
|
||||
}
|
||||
|
||||
@@ -44,7 +44,7 @@ fun test4() {
|
||||
val v by <!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER, NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>this.get(0)<!>
|
||||
<!BUILDER_INFERENCE_STUB_RECEIVER!>v<!>.<!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>extension<!>()
|
||||
use(<!BUILDER_INFERENCE_STUB_RECEIVER!>v<!>::extension)
|
||||
use(it::extension)
|
||||
use(<!BUILDER_INFERENCE_STUB_RECEIVER!>it<!>::extension)
|
||||
}<!>
|
||||
}
|
||||
|
||||
|
||||
+4
-4
@@ -12,7 +12,7 @@ fun test1() {
|
||||
<!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>a<!> <!CANNOT_INFER_PARAMETER_TYPE!>{
|
||||
<!BUILDER_INFERENCE_STUB_RECEIVER!>this.get(0)<!>.<!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>extension<!>()
|
||||
use(<!BUILDER_INFERENCE_STUB_RECEIVER!>this.get(0)<!>::extension)
|
||||
use(it::extension)
|
||||
use(<!BUILDER_INFERENCE_STUB_RECEIVER!>it<!>::extension)
|
||||
}<!>
|
||||
}
|
||||
|
||||
@@ -22,7 +22,7 @@ fun test2() {
|
||||
val v = this.get(0)
|
||||
<!BUILDER_INFERENCE_STUB_RECEIVER!>v<!>.<!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>extension<!>()
|
||||
use(<!BUILDER_INFERENCE_STUB_RECEIVER!>v<!>::extension)
|
||||
use(it::extension)
|
||||
use(<!BUILDER_INFERENCE_STUB_RECEIVER!>it<!>::extension)
|
||||
}<!>
|
||||
}
|
||||
|
||||
@@ -32,7 +32,7 @@ fun test3() {
|
||||
val v by <!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>this.get(0)<!>
|
||||
<!BUILDER_INFERENCE_STUB_RECEIVER!>v<!>.<!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>extension<!>()
|
||||
use(<!BUILDER_INFERENCE_STUB_RECEIVER!>v<!>::extension)
|
||||
use(it::extension)
|
||||
use(<!BUILDER_INFERENCE_STUB_RECEIVER!>it<!>::extension)
|
||||
}<!>
|
||||
}
|
||||
|
||||
@@ -45,7 +45,7 @@ fun test4() {
|
||||
val v by <!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER, NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>this.get(0)<!>
|
||||
<!BUILDER_INFERENCE_STUB_RECEIVER!>v<!>.<!NEW_INFERENCE_NO_INFORMATION_FOR_PARAMETER!>extension<!>()
|
||||
use(<!BUILDER_INFERENCE_STUB_RECEIVER!>v<!>::extension)
|
||||
use(it::extension)
|
||||
use(<!BUILDER_INFERENCE_STUB_RECEIVER!>it<!>::extension)
|
||||
}<!>
|
||||
}
|
||||
|
||||
|
||||
Vendored
+2
-2
@@ -8,9 +8,9 @@ class GenericController<T> {
|
||||
|
||||
fun <S> generate(g: suspend GenericController<S>.(S) -> Unit): S = TODO()
|
||||
|
||||
val test1 = generate <!CANNOT_INFER_PARAMETER_TYPE!>{
|
||||
val test1 = generate {
|
||||
yield(4)
|
||||
}<!>
|
||||
}
|
||||
|
||||
val test2 = generate<Int> {
|
||||
yield(4)
|
||||
|
||||
Generated
+6
@@ -17199,6 +17199,12 @@ public class DiagnosticTestGenerated extends AbstractDiagnosticTest {
|
||||
runTest("compiler/testData/diagnostics/tests/inference/builderInference/bothOuterAndProperConstraints.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("bothReceiverAndValueParameterNotFixed.kt")
|
||||
public void testBothReceiverAndValueParameterNotFixed() throws Exception {
|
||||
runTest("compiler/testData/diagnostics/tests/inference/builderInference/bothReceiverAndValueParameterNotFixed.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("builderInferenceAnnotationInLambdaWithTVExpectedType.kt")
|
||||
public void testBuilderInferenceAnnotationInLambdaWithTVExpectedType() throws Exception {
|
||||
|
||||
+6
@@ -2755,6 +2755,12 @@ public class JvmAbiConsistencyTestBoxGenerated extends AbstractJvmAbiConsistency
|
||||
KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/codegen/box/builderInference"), Pattern.compile("^(.+)\\.kt$"), null, TargetBackend.JVM_IR, true);
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("lambdaParameterHasTVType.kt")
|
||||
public void testLambdaParameterHasTVType() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/builderInference/lambdaParameterHasTVType.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("receiverUsesOuterTVButReturnTypeIsProper.kt")
|
||||
public void testReceiverUsesOuterTVButReturnTypeIsProper() throws Exception {
|
||||
|
||||
+6
@@ -2575,6 +2575,12 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest {
|
||||
KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/codegen/box/builderInference"), Pattern.compile("^(.+)\\.kt$"), null, TargetBackend.JVM, true);
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("lambdaParameterHasTVType.kt")
|
||||
public void testLambdaParameterHasTVType() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/builderInference/lambdaParameterHasTVType.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("receiverUsesOuterTVButReturnTypeIsProper.kt")
|
||||
public void testReceiverUsesOuterTVButReturnTypeIsProper() throws Exception {
|
||||
|
||||
+6
@@ -2755,6 +2755,12 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes
|
||||
KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/codegen/box/builderInference"), Pattern.compile("^(.+)\\.kt$"), null, TargetBackend.JVM_IR, true);
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("lambdaParameterHasTVType.kt")
|
||||
public void testLambdaParameterHasTVType() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/builderInference/lambdaParameterHasTVType.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("receiverUsesOuterTVButReturnTypeIsProper.kt")
|
||||
public void testReceiverUsesOuterTVButReturnTypeIsProper() throws Exception {
|
||||
|
||||
+6
@@ -2755,6 +2755,12 @@ public class IrBlackBoxCodegenWithIrInlinerTestGenerated extends AbstractIrBlack
|
||||
KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/codegen/box/builderInference"), Pattern.compile("^(.+)\\.kt$"), null, TargetBackend.JVM_IR, true);
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("lambdaParameterHasTVType.kt")
|
||||
public void testLambdaParameterHasTVType() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/builderInference/lambdaParameterHasTVType.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("receiverUsesOuterTVButReturnTypeIsProper.kt")
|
||||
public void testReceiverUsesOuterTVButReturnTypeIsProper() throws Exception {
|
||||
|
||||
+5
@@ -2403,6 +2403,11 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes
|
||||
KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/codegen/box/builderInference"), Pattern.compile("^(.+)\\.kt$"), null, TargetBackend.JVM_IR, true);
|
||||
}
|
||||
|
||||
@TestMetadata("lambdaParameterHasTVType.kt")
|
||||
public void testLambdaParameterHasTVType() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/builderInference/lambdaParameterHasTVType.kt");
|
||||
}
|
||||
|
||||
@TestMetadata("receiverUsesOuterTVButReturnTypeIsProper.kt")
|
||||
public void testReceiverUsesOuterTVButReturnTypeIsProper() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/builderInference/receiverUsesOuterTVButReturnTypeIsProper.kt");
|
||||
|
||||
+6
@@ -1861,6 +1861,12 @@ public class FirJsCodegenBoxTestGenerated extends AbstractFirJsCodegenBoxTest {
|
||||
KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/codegen/box/builderInference"), Pattern.compile("^(.+)\\.kt$"), null, TargetBackend.JS_IR, true);
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("lambdaParameterHasTVType.kt")
|
||||
public void testLambdaParameterHasTVType() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/builderInference/lambdaParameterHasTVType.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("receiverUsesOuterTVButReturnTypeIsProper.kt")
|
||||
public void testReceiverUsesOuterTVButReturnTypeIsProper() throws Exception {
|
||||
|
||||
Generated
+6
@@ -1861,6 +1861,12 @@ public class FirJsES6CodegenBoxTestGenerated extends AbstractFirJsES6CodegenBoxT
|
||||
KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/codegen/box/builderInference"), Pattern.compile("^(.+)\\.kt$"), null, TargetBackend.JS_IR_ES6, true);
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("lambdaParameterHasTVType.kt")
|
||||
public void testLambdaParameterHasTVType() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/builderInference/lambdaParameterHasTVType.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("receiverUsesOuterTVButReturnTypeIsProper.kt")
|
||||
public void testReceiverUsesOuterTVButReturnTypeIsProper() throws Exception {
|
||||
|
||||
+6
@@ -1861,6 +1861,12 @@ public class IrJsCodegenBoxTestGenerated extends AbstractIrJsCodegenBoxTest {
|
||||
KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/codegen/box/builderInference"), Pattern.compile("^(.+)\\.kt$"), null, TargetBackend.JS_IR, true);
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("lambdaParameterHasTVType.kt")
|
||||
public void testLambdaParameterHasTVType() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/builderInference/lambdaParameterHasTVType.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("receiverUsesOuterTVButReturnTypeIsProper.kt")
|
||||
public void testReceiverUsesOuterTVButReturnTypeIsProper() throws Exception {
|
||||
|
||||
+6
@@ -1861,6 +1861,12 @@ public class IrJsES6CodegenBoxTestGenerated extends AbstractIrJsES6CodegenBoxTes
|
||||
KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/codegen/box/builderInference"), Pattern.compile("^(.+)\\.kt$"), null, TargetBackend.JS_IR_ES6, true);
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("lambdaParameterHasTVType.kt")
|
||||
public void testLambdaParameterHasTVType() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/builderInference/lambdaParameterHasTVType.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("receiverUsesOuterTVButReturnTypeIsProper.kt")
|
||||
public void testReceiverUsesOuterTVButReturnTypeIsProper() throws Exception {
|
||||
|
||||
+6
@@ -1920,6 +1920,12 @@ public class FirNativeCodegenBoxTestGenerated extends AbstractNativeCodegenBoxTe
|
||||
KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/codegen/box/builderInference"), Pattern.compile("^(.+)\\.kt$"), null, TargetBackend.NATIVE, true);
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("lambdaParameterHasTVType.kt")
|
||||
public void testLambdaParameterHasTVType() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/builderInference/lambdaParameterHasTVType.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("receiverUsesOuterTVButReturnTypeIsProper.kt")
|
||||
public void testReceiverUsesOuterTVButReturnTypeIsProper() throws Exception {
|
||||
|
||||
+6
@@ -1966,6 +1966,12 @@ public class FirNativeCodegenBoxTestNoPLGenerated extends AbstractNativeCodegenB
|
||||
KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/codegen/box/builderInference"), Pattern.compile("^(.+)\\.kt$"), null, TargetBackend.NATIVE, true);
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("lambdaParameterHasTVType.kt")
|
||||
public void testLambdaParameterHasTVType() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/builderInference/lambdaParameterHasTVType.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("receiverUsesOuterTVButReturnTypeIsProper.kt")
|
||||
public void testReceiverUsesOuterTVButReturnTypeIsProper() throws Exception {
|
||||
|
||||
+6
@@ -1874,6 +1874,12 @@ public class NativeCodegenBoxTestGenerated extends AbstractNativeCodegenBoxTest
|
||||
KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/codegen/box/builderInference"), Pattern.compile("^(.+)\\.kt$"), null, TargetBackend.NATIVE, true);
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("lambdaParameterHasTVType.kt")
|
||||
public void testLambdaParameterHasTVType() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/builderInference/lambdaParameterHasTVType.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("receiverUsesOuterTVButReturnTypeIsProper.kt")
|
||||
public void testReceiverUsesOuterTVButReturnTypeIsProper() throws Exception {
|
||||
|
||||
+6
@@ -1921,6 +1921,12 @@ public class NativeCodegenBoxTestNoPLGenerated extends AbstractNativeCodegenBoxT
|
||||
KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/codegen/box/builderInference"), Pattern.compile("^(.+)\\.kt$"), null, TargetBackend.NATIVE, true);
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("lambdaParameterHasTVType.kt")
|
||||
public void testLambdaParameterHasTVType() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/builderInference/lambdaParameterHasTVType.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("receiverUsesOuterTVButReturnTypeIsProper.kt")
|
||||
public void testReceiverUsesOuterTVButReturnTypeIsProper() throws Exception {
|
||||
|
||||
Generated
+6
@@ -1849,6 +1849,12 @@ public class FirWasmCodegenBoxTestGenerated extends AbstractFirWasmCodegenBoxTes
|
||||
KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/codegen/box/builderInference"), Pattern.compile("^([^_](.+))\\.kt$"), null, TargetBackend.WASM, true);
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("lambdaParameterHasTVType.kt")
|
||||
public void testLambdaParameterHasTVType() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/builderInference/lambdaParameterHasTVType.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("receiverUsesOuterTVButReturnTypeIsProper.kt")
|
||||
public void testReceiverUsesOuterTVButReturnTypeIsProper() throws Exception {
|
||||
|
||||
Generated
+6
@@ -1849,6 +1849,12 @@ public class K1WasmCodegenBoxTestGenerated extends AbstractK1WasmCodegenBoxTest
|
||||
KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/testData/codegen/box/builderInference"), Pattern.compile("^([^_](.+))\\.kt$"), null, TargetBackend.WASM, true);
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("lambdaParameterHasTVType.kt")
|
||||
public void testLambdaParameterHasTVType() throws Exception {
|
||||
runTest("compiler/testData/codegen/box/builderInference/lambdaParameterHasTVType.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("receiverUsesOuterTVButReturnTypeIsProper.kt")
|
||||
public void testReceiverUsesOuterTVButReturnTypeIsProper() throws Exception {
|
||||
|
||||
Reference in New Issue
Block a user