diff --git a/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirBlackBoxCodegenTestGenerated.java b/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirBlackBoxCodegenTestGenerated.java index e38c6951323..fe475d51963 100644 --- a/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirBlackBoxCodegenTestGenerated.java +++ b/compiler/fir/fir2ir/tests-gen/org/jetbrains/kotlin/test/runners/codegen/FirBlackBoxCodegenTestGenerated.java @@ -18157,6 +18157,12 @@ public class FirBlackBoxCodegenTestGenerated extends AbstractFirBlackBoxCodegenT runTest("compiler/testData/codegen/box/inference/builderInference/kt47744.kt"); } + @Test + @TestMetadata("kt48445.kt") + public void testKt48445() throws Exception { + runTest("compiler/testData/codegen/box/inference/builderInference/kt48445.kt"); + } + @Test @TestMetadata("labaledCall.kt") public void testLabaledCall() throws Exception { diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/DelegatedPropertyResolver.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/DelegatedPropertyResolver.kt index ede549cee93..ceaa7a89b7d 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/DelegatedPropertyResolver.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/DelegatedPropertyResolver.kt @@ -24,6 +24,8 @@ import org.jetbrains.kotlin.resolve.calls.callUtil.getResolvedCall import org.jetbrains.kotlin.resolve.calls.checkers.OperatorCallChecker import org.jetbrains.kotlin.resolve.calls.components.InferenceSession import org.jetbrains.kotlin.resolve.calls.components.PostponedArgumentsAnalyzer +import org.jetbrains.kotlin.resolve.calls.context.BasicCallResolutionContext +import org.jetbrains.kotlin.resolve.calls.context.CheckArgumentTypesMode import org.jetbrains.kotlin.resolve.calls.context.ContextDependency import org.jetbrains.kotlin.resolve.calls.inference.ConstraintSystem import org.jetbrains.kotlin.resolve.calls.inference.ConstraintSystemCompleter @@ -40,6 +42,7 @@ import org.jetbrains.kotlin.resolve.calls.results.OverloadResolutionResults import org.jetbrains.kotlin.resolve.calls.smartcasts.DataFlowInfo import org.jetbrains.kotlin.resolve.calls.smartcasts.DataFlowValueFactory import org.jetbrains.kotlin.resolve.calls.tower.PSICallResolver +import org.jetbrains.kotlin.resolve.calls.util.CallMaker import org.jetbrains.kotlin.resolve.constants.IntegerLiteralTypeConstructor import org.jetbrains.kotlin.resolve.scopes.LexicalScope import org.jetbrains.kotlin.resolve.scopes.ScopeUtils @@ -692,7 +695,9 @@ class DelegatedPropertyResolver( ) } - val resolutionCallbacks = psiCallResolver.createResolutionCallbacks(trace, newInferenceSession, context = null) + val call = CallMaker.makeCall(delegateExpression, receiver) + val resolutionContext = BasicCallResolutionContext.create(context, call, CheckArgumentTypesMode.CHECK_VALUE_ARGUMENTS) + val resolutionCallbacks = psiCallResolver.createResolutionCallbacks(trace, newInferenceSession, resolutionContext) val resolutionResults = newInferenceSession.resolveCandidates(resolutionCallbacks) for ((name, isGet) in listOf(OperatorNameConventions.GET_VALUE to true, OperatorNameConventions.SET_VALUE to false)) { diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/tower/KotlinResolutionCallbacksImpl.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/tower/KotlinResolutionCallbacksImpl.kt index 2beb85ed58f..bc4c710419e 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/tower/KotlinResolutionCallbacksImpl.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/tower/KotlinResolutionCallbacksImpl.kt @@ -71,7 +71,7 @@ class KotlinResolutionCallbacksImpl( private val doubleColonExpressionResolver: DoubleColonExpressionResolver, private val deprecationResolver: DeprecationResolver, private val moduleDescriptor: ModuleDescriptor, - private val topLevelCallContext: BasicCallResolutionContext?, + private val topLevelCallContext: BasicCallResolutionContext, private val missingSupertypesResolver: MissingSupertypesResolver ) : KotlinResolutionCallbacks { class LambdaInfo(val expectedType: UnwrappedType, val contextDependency: ContextDependency) { @@ -160,8 +160,6 @@ class KotlinResolutionCallbacksImpl( val coroutineSession = if (stubsForPostponedVariables.isNotEmpty()) { - require(topLevelCallContext != null) { "Top level call context should not be null to analyze coroutine-lambda" } - BuilderInferenceSession( psiCallResolver, postponedArgumentsAnalyzer, kotlinConstraintSystemCompleter, callComponents, builtIns, topLevelCallContext, stubsForPostponedVariables, trace, @@ -303,8 +301,7 @@ class KotlinResolutionCallbacksImpl( override fun disableContractsIfNecessary(resolvedAtom: ResolvedCallAtom) { val atom = resolvedAtom.atom as? PSIKotlinCall ?: return - val context = topLevelCallContext ?: return - disableContractsInsideContractsBlock(atom.psiCall, resolvedAtom.candidateDescriptor, context.scope, trace) + disableContractsInsideContractsBlock(atom.psiCall, resolvedAtom.candidateDescriptor, topLevelCallContext.scope, trace) } override fun convertSignedConstantToUnsigned(argument: KotlinCallArgument): IntegerValueTypeConstant? { diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/tower/PSICallResolver.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/tower/PSICallResolver.kt index 327a0520f0f..daf67b0db76 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/tower/PSICallResolver.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/tower/PSICallResolver.kt @@ -184,7 +184,7 @@ class PSICallResolver( private fun createResolutionCallbacks(context: BasicCallResolutionContext) = createResolutionCallbacks(context.trace, context.inferenceSession, context) - fun createResolutionCallbacks(trace: BindingTrace, inferenceSession: InferenceSession, context: BasicCallResolutionContext?) = + fun createResolutionCallbacks(trace: BindingTrace, inferenceSession: InferenceSession, context: BasicCallResolutionContext) = KotlinResolutionCallbacksImpl( trace, expressionTypingServices, typeApproximator, argumentTypeResolver, languageVersionSettings, kotlinToResolvedCallTransformer, diff --git a/compiler/testData/codegen/box/inference/builderInference/kt48445.kt b/compiler/testData/codegen/box/inference/builderInference/kt48445.kt new file mode 100644 index 00000000000..e3a9e9aa83e --- /dev/null +++ b/compiler/testData/codegen/box/inference/builderInference/kt48445.kt @@ -0,0 +1,75 @@ +// DONT_TARGET_EXACT_BACKEND: WASM +// !LANGUAGE: +UnrestrictedBuilderInference +// IGNORE_BACKEND_FIR: JVM_IR +// WITH_RUNTIME + +internal class TowerDataElementsForName() { + val reversedFilteredLocalScopes by lazy(LazyThreadSafetyMode.NONE) { + @OptIn(ExperimentalStdlibApi::class) + buildList { + for (i in lastIndex downTo 0) { + add("") + } + } + } +} + +//internal class TowerDataElementsForName2() { +// @OptIn(ExperimentalStdlibApi::class) +// val reversedFilteredLocalScopes = buildList { +// val reversedFilteredLocalScopes by lazy(LazyThreadSafetyMode.NONE) { +// @OptIn(ExperimentalStdlibApi::class) +// buildList { +// for (i in lastIndex downTo 0) { +// add("") +// } +// } +// } +// add(reversedFilteredLocalScopes) +// } +//} +// +//internal class TowerDataElementsForName3() { +// val reversedFilteredLocalScopes by lazy(LazyThreadSafetyMode.NONE) { +// @OptIn(ExperimentalStdlibApi::class) +// buildList l1@ { +// for (i in lastIndex downTo 0) { +// val reversedFilteredLocalScopes by lazy(LazyThreadSafetyMode.NONE) { +// @OptIn(ExperimentalStdlibApi::class) +// buildList { +// for (i in lastIndex downTo 0) { +// add("") +// this@l1.add("") +// } +// } +// } +// } +// } +// } +//} + +// mute due to KT-48633 +//internal class TowerDataElementsForName4() { +// @OptIn(ExperimentalStdlibApi::class) +// val reversedFilteredLocalScopes = buildList l1@ { +// class Foo { +// val reversedFilteredLocalScopes by lazy(LazyThreadSafetyMode.NONE) { +// @OptIn(ExperimentalStdlibApi::class) +// buildList { +// for (i in lastIndex downTo 0) { +// add("") +// this@l1.add("") +// } +// } +// } +// } +// } +//} + +fun box(): String { + val x1 = TowerDataElementsForName().reversedFilteredLocalScopes +// val x2 = TowerDataElementsForName2().reversedFilteredLocalScopes +// val x3 = TowerDataElementsForName3().reversedFilteredLocalScopes +// val x4 = TowerDataElementsForName4().reversedFilteredLocalScopes + return "OK" +} \ No newline at end of file diff --git a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/BlackBoxCodegenTestGenerated.java b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/BlackBoxCodegenTestGenerated.java index 38cfb7bfe01..542fda3d989 100644 --- a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/BlackBoxCodegenTestGenerated.java +++ b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/BlackBoxCodegenTestGenerated.java @@ -18037,6 +18037,12 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest { runTest("compiler/testData/codegen/box/inference/builderInference/kt47744.kt"); } + @Test + @TestMetadata("kt48445.kt") + public void testKt48445() throws Exception { + runTest("compiler/testData/codegen/box/inference/builderInference/kt48445.kt"); + } + @Test @TestMetadata("labaledCall.kt") public void testLabaledCall() throws Exception { diff --git a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBlackBoxCodegenTestGenerated.java b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBlackBoxCodegenTestGenerated.java index db783ffa08a..4713530e414 100644 --- a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBlackBoxCodegenTestGenerated.java +++ b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/codegen/IrBlackBoxCodegenTestGenerated.java @@ -18157,6 +18157,12 @@ public class IrBlackBoxCodegenTestGenerated extends AbstractIrBlackBoxCodegenTes runTest("compiler/testData/codegen/box/inference/builderInference/kt47744.kt"); } + @Test + @TestMetadata("kt48445.kt") + public void testKt48445() throws Exception { + runTest("compiler/testData/codegen/box/inference/builderInference/kt48445.kt"); + } + @Test @TestMetadata("labaledCall.kt") public void testLabaledCall() throws Exception { diff --git a/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java b/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java index b364f44b843..d0ddfd60f03 100644 --- a/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java +++ b/compiler/tests-gen/org/jetbrains/kotlin/codegen/LightAnalysisModeTestGenerated.java @@ -14945,6 +14945,11 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes runTest("compiler/testData/codegen/box/inference/builderInference/kt47744.kt"); } + @TestMetadata("kt48445.kt") + public void testKt48445() throws Exception { + runTest("compiler/testData/codegen/box/inference/builderInference/kt48445.kt"); + } + @TestMetadata("labaledCall.kt") public void testLabaledCall() throws Exception { runTest("compiler/testData/codegen/box/inference/builderInference/labaledCall.kt"); diff --git a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/es6/semantics/IrJsCodegenBoxES6TestGenerated.java b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/es6/semantics/IrJsCodegenBoxES6TestGenerated.java index e87196b9c53..6422b0fc9ba 100644 --- a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/es6/semantics/IrJsCodegenBoxES6TestGenerated.java +++ b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/es6/semantics/IrJsCodegenBoxES6TestGenerated.java @@ -13054,6 +13054,11 @@ public class IrJsCodegenBoxES6TestGenerated extends AbstractIrJsCodegenBoxES6Tes runTest("compiler/testData/codegen/box/inference/builderInference/kt47744.kt"); } + @TestMetadata("kt48445.kt") + public void testKt48445() throws Exception { + runTest("compiler/testData/codegen/box/inference/builderInference/kt48445.kt"); + } + @TestMetadata("labaledCall.kt") public void testLabaledCall() throws Exception { runTest("compiler/testData/codegen/box/inference/builderInference/labaledCall.kt"); diff --git a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/ir/semantics/IrJsCodegenBoxTestGenerated.java b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/ir/semantics/IrJsCodegenBoxTestGenerated.java index db83a13d72e..099e6ccd7a4 100644 --- a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/ir/semantics/IrJsCodegenBoxTestGenerated.java +++ b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/ir/semantics/IrJsCodegenBoxTestGenerated.java @@ -12460,6 +12460,11 @@ public class IrJsCodegenBoxTestGenerated extends AbstractIrJsCodegenBoxTest { runTest("compiler/testData/codegen/box/inference/builderInference/kt47744.kt"); } + @TestMetadata("kt48445.kt") + public void testKt48445() throws Exception { + runTest("compiler/testData/codegen/box/inference/builderInference/kt48445.kt"); + } + @TestMetadata("labaledCall.kt") public void testLabaledCall() throws Exception { runTest("compiler/testData/codegen/box/inference/builderInference/labaledCall.kt"); diff --git a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/semantics/JsCodegenBoxTestGenerated.java b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/semantics/JsCodegenBoxTestGenerated.java index 8d796efbccb..2003c11ee2a 100644 --- a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/semantics/JsCodegenBoxTestGenerated.java +++ b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/semantics/JsCodegenBoxTestGenerated.java @@ -12505,6 +12505,11 @@ public class JsCodegenBoxTestGenerated extends AbstractJsCodegenBoxTest { runTest("compiler/testData/codegen/box/inference/builderInference/kt47744.kt"); } + @TestMetadata("kt48445.kt") + public void testKt48445() throws Exception { + runTest("compiler/testData/codegen/box/inference/builderInference/kt48445.kt"); + } + @TestMetadata("labaledCall.kt") public void testLabaledCall() throws Exception { runTest("compiler/testData/codegen/box/inference/builderInference/labaledCall.kt");