From d486f7e188249383795110df61e914992b58cda0 Mon Sep 17 00:00:00 2001 From: Victor Petukhov Date: Fri, 21 May 2021 14:51:41 +0300 Subject: [PATCH] Don't report `TYPE_INFERENCE_POSTPONED_VARIABLE_IN_RECEIVER_TYPE` if unrestricted build inference was enabled --- .../kotlin/resolve/calls/tower/ResolvedAtomCompleter.kt | 5 ++++- .../types/expressions/DoubleColonExpressionResolver.kt | 4 +++- 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/tower/ResolvedAtomCompleter.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/tower/ResolvedAtomCompleter.kt index 0d9f5e8dfc2..bd7869d407d 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/tower/ResolvedAtomCompleter.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/tower/ResolvedAtomCompleter.kt @@ -415,7 +415,10 @@ class ResolvedAtomCompleter( val rawExtensionReceiver = callableCandidate.extensionReceiver - if (rawExtensionReceiver != null && rawExtensionReceiver.receiver.receiverValue.type.contains { it is StubTypeForBuilderInference }) { + val unrestrictedBuilderInferenceSupported = + topLevelCallContext.languageVersionSettings.supportsFeature(LanguageFeature.UnrestrictedBuilderInference) + + if (rawExtensionReceiver != null && !unrestrictedBuilderInferenceSupported && rawExtensionReceiver.receiver.receiverValue.type.contains { it is StubTypeForBuilderInference }) { topLevelTrace.reportDiagnosticOnce(Errors.TYPE_INFERENCE_POSTPONED_VARIABLE_IN_RECEIVER_TYPE.on(callableReferenceExpression)) return } diff --git a/compiler/frontend/src/org/jetbrains/kotlin/types/expressions/DoubleColonExpressionResolver.kt b/compiler/frontend/src/org/jetbrains/kotlin/types/expressions/DoubleColonExpressionResolver.kt index 764e799d441..2d54d0be8ee 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/types/expressions/DoubleColonExpressionResolver.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/types/expressions/DoubleColonExpressionResolver.kt @@ -551,7 +551,9 @@ class DoubleColonExpressionResolver( resolvedCall.extensionReceiver?.type?.contains { it is StubTypeForBuilderInference } == true } - if (doesSomeExtensionReceiverContainsStubType) { + val unrestrictedBuilderInferenceSupported = languageVersionSettings.supportsFeature(LanguageFeature.UnrestrictedBuilderInference) + + if (doesSomeExtensionReceiverContainsStubType && !unrestrictedBuilderInferenceSupported) { c.trace.reportDiagnosticOnce(TYPE_INFERENCE_POSTPONED_VARIABLE_IN_RECEIVER_TYPE.on(expression)) return noTypeInfo(c) }