From 0ed6256bcc994f80770dbb53efc52812b48196ac Mon Sep 17 00:00:00 2001 From: Mikhail Glukhikh Date: Tue, 28 Nov 2023 23:30:11 +0100 Subject: [PATCH] K2: implement BUILDER_INFERENCE_STUB_RECEIVER #KT-59369 Fixed --- .../diagnostics/KtFirDataClassConverters.kt | 8 +++ .../api/fir/diagnostics/KtFirDiagnostics.kt | 6 ++ .../fir/diagnostics/KtFirDiagnosticsImpl.kt | 7 +++ .../diagnostics/FirDiagnosticsList.kt | 7 +++ .../fir/analysis/diagnostics/FirErrors.kt | 3 + .../FirNonSuppressibleErrorNames.kt | 1 + .../diagnostics/FirErrorsDefaultMessages.kt | 8 +++ .../coneDiagnosticToFirDiagnostic.kt | 12 ++++ .../fir/resolve/calls/ResolutionStages.kt | 16 ++++++ .../fir/resolve/calls/ResolutionDiagnostic.kt | 6 ++ .../errorOnStubReceiver.fir.kt | 2 +- .../errorOnStubReceiver.fir.txt | 2 +- .../inference/builderInference/kt49828.fir.kt | 16 +++--- .../inference/builderInference/kt53422.fir.kt | 2 +- .../stubTypes/memberScope.fir.kt | 56 +++++++++---------- .../stubTypes/nullability.fir.kt | 12 ++-- .../stubTypeReceiverRestriction.fir.kt | 40 ++++++------- .../builderInference/unsafeAssignment.fir.kt | 2 +- .../unsafeAssignmentExtra.fir.kt | 6 +- .../coroutines/inference/kt36220.fir.kt | 19 +++++++ .../coroutines/inference/kt36220.kt | 1 - 21 files changed, 162 insertions(+), 70 deletions(-) create mode 100644 compiler/testData/diagnostics/testsWithStdLib/coroutines/inference/kt36220.fir.kt diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KtFirDataClassConverters.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KtFirDataClassConverters.kt index e47f137284d..7d13edb8518 100644 --- a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KtFirDataClassConverters.kt +++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KtFirDataClassConverters.kt @@ -4968,6 +4968,14 @@ internal val KT_DIAGNOSTIC_CONVERTER = KtDiagnosticConverterBuilder.buildConvert token, ) } + add(FirErrors.BUILDER_INFERENCE_STUB_RECEIVER) { firDiagnostic -> + BuilderInferenceStubReceiverImpl( + firDiagnostic.a, + firDiagnostic.b, + firDiagnostic as KtPsiDiagnostic, + token, + ) + } add(FirJvmErrors.OVERRIDE_CANNOT_BE_STATIC) { firDiagnostic -> OverrideCannotBeStaticImpl( firDiagnostic as KtPsiDiagnostic, diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KtFirDiagnostics.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KtFirDiagnostics.kt index 65ba73d6801..351f22cbd67 100644 --- a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KtFirDiagnostics.kt +++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KtFirDiagnostics.kt @@ -3457,6 +3457,12 @@ sealed interface KtFirDiagnostic : KtDiagnosticWithPsi { val presentableString: String } + interface BuilderInferenceStubReceiver : KtFirDiagnostic { + override val diagnosticClass get() = BuilderInferenceStubReceiver::class + val typeParameterName: Name + val containingDeclarationName: Name + } + interface OverrideCannotBeStatic : KtFirDiagnostic { override val diagnosticClass get() = OverrideCannotBeStatic::class } diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KtFirDiagnosticsImpl.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KtFirDiagnosticsImpl.kt index 720632e4f3a..31905efcfa5 100644 --- a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KtFirDiagnosticsImpl.kt +++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/diagnostics/KtFirDiagnosticsImpl.kt @@ -4169,6 +4169,13 @@ internal class IrWithUnstableAbiCompiledClassImpl( token: KtLifetimeToken, ) : KtAbstractFirDiagnostic(firDiagnostic, token), KtFirDiagnostic.IrWithUnstableAbiCompiledClass +internal class BuilderInferenceStubReceiverImpl( + override val typeParameterName: Name, + override val containingDeclarationName: Name, + firDiagnostic: KtPsiDiagnostic, + token: KtLifetimeToken, +) : KtAbstractFirDiagnostic(firDiagnostic, token), KtFirDiagnostic.BuilderInferenceStubReceiver + internal class OverrideCannotBeStaticImpl( firDiagnostic: KtPsiDiagnostic, token: KtLifetimeToken, diff --git a/compiler/fir/checkers/checkers-component-generator/src/org/jetbrains/kotlin/fir/checkers/generator/diagnostics/FirDiagnosticsList.kt b/compiler/fir/checkers/checkers-component-generator/src/org/jetbrains/kotlin/fir/checkers/generator/diagnostics/FirDiagnosticsList.kt index 4c7c216ddd4..f715438c4b2 100644 --- a/compiler/fir/checkers/checkers-component-generator/src/org/jetbrains/kotlin/fir/checkers/generator/diagnostics/FirDiagnosticsList.kt +++ b/compiler/fir/checkers/checkers-component-generator/src/org/jetbrains/kotlin/fir/checkers/generator/diagnostics/FirDiagnosticsList.kt @@ -1764,6 +1764,13 @@ object DIAGNOSTICS_LIST : DiagnosticList("FirErrors") { parameter("presentableString") } } + + val BUILDER_INFERENCE by object : DiagnosticGroup("Builder inference") { + val BUILDER_INFERENCE_STUB_RECEIVER by error { + parameter("typeParameterName") + parameter("containingDeclarationName") + } + } } private val exposedVisibilityDiagnosticInit: DiagnosticBuilder.() -> Unit = { diff --git a/compiler/fir/checkers/gen/org/jetbrains/kotlin/fir/analysis/diagnostics/FirErrors.kt b/compiler/fir/checkers/gen/org/jetbrains/kotlin/fir/analysis/diagnostics/FirErrors.kt index 36830ec0b6a..7164e27d7f3 100644 --- a/compiler/fir/checkers/gen/org/jetbrains/kotlin/fir/analysis/diagnostics/FirErrors.kt +++ b/compiler/fir/checkers/gen/org/jetbrains/kotlin/fir/analysis/diagnostics/FirErrors.kt @@ -869,6 +869,9 @@ object FirErrors { val PRE_RELEASE_CLASS by error1() val IR_WITH_UNSTABLE_ABI_COMPILED_CLASS by error1() + // Builder inference + val BUILDER_INFERENCE_STUB_RECEIVER by error2() + init { RootDiagnosticRendererFactory.registerFactory(FirErrorsDefaultMessages) } diff --git a/compiler/fir/checkers/gen/org/jetbrains/kotlin/fir/analysis/diagnostics/FirNonSuppressibleErrorNames.kt b/compiler/fir/checkers/gen/org/jetbrains/kotlin/fir/analysis/diagnostics/FirNonSuppressibleErrorNames.kt index aaaa253611a..3a32901c866 100644 --- a/compiler/fir/checkers/gen/org/jetbrains/kotlin/fir/analysis/diagnostics/FirNonSuppressibleErrorNames.kt +++ b/compiler/fir/checkers/gen/org/jetbrains/kotlin/fir/analysis/diagnostics/FirNonSuppressibleErrorNames.kt @@ -571,6 +571,7 @@ val FIR_NON_SUPPRESSIBLE_ERROR_NAMES: Set = setOf( "INCOMPATIBLE_CLASS", "PRE_RELEASE_CLASS", "IR_WITH_UNSTABLE_ABI_COMPILED_CLASS", + "BUILDER_INFERENCE_STUB_RECEIVER", "OVERRIDE_CANNOT_BE_STATIC", "JVM_STATIC_NOT_IN_OBJECT_OR_CLASS_COMPANION", "JVM_STATIC_NOT_IN_OBJECT_OR_COMPANION", diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/diagnostics/FirErrorsDefaultMessages.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/diagnostics/FirErrorsDefaultMessages.kt index 633ebc0bb52..47f3a7fd0de 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/diagnostics/FirErrorsDefaultMessages.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/diagnostics/FirErrorsDefaultMessages.kt @@ -112,6 +112,7 @@ import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.BOUNDS_NOT_ALLOWE import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.BOUND_ON_TYPE_ALIAS_PARAMETER_NOT_ALLOWED import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.BREAK_OR_CONTINUE_JUMPS_ACROSS_FUNCTION_BOUNDARY import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.BREAK_OR_CONTINUE_OUTSIDE_A_LOOP +import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.BUILDER_INFERENCE_STUB_RECEIVER import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.CALLABLE_REFERENCE_LHS_NOT_A_CLASS import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.CALLABLE_REFERENCE_TO_ANNOTATION_CONSTRUCTOR import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors.CANNOT_ALL_UNDER_IMPORT_FROM_SINGLETON @@ -2570,5 +2571,12 @@ object FirErrorsDefaultMessages : BaseDiagnosticRendererFactory() { "{0} is compiled by an unstable version of the Kotlin compiler and cannot be loaded by this compiler.", STRING ) + + map.put( + BUILDER_INFERENCE_STUB_RECEIVER, + "The type of a receiver hasn''t been inferred yet. Please specify type argument for generic parameter `{0}` of `{1}` explicitly", + TO_STRING, + TO_STRING + ); } } diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/diagnostics/coneDiagnosticToFirDiagnostic.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/diagnostics/coneDiagnosticToFirDiagnostic.kt index 5731d3b8952..04f2463b07f 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/diagnostics/coneDiagnosticToFirDiagnostic.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/diagnostics/coneDiagnosticToFirDiagnostic.kt @@ -16,6 +16,7 @@ import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.analysis.checkers.declaration.isLocalMember import org.jetbrains.kotlin.fir.analysis.getChild import org.jetbrains.kotlin.fir.builder.FirSyntaxErrors +import org.jetbrains.kotlin.fir.declarations.FirMemberDeclaration import org.jetbrains.kotlin.fir.declarations.utils.* import org.jetbrains.kotlin.fir.diagnostics.* import org.jetbrains.kotlin.fir.expressions.FirQualifiedAccessExpression @@ -29,6 +30,7 @@ import org.jetbrains.kotlin.fir.resolve.inference.model.ConeExpectedTypeConstrai import org.jetbrains.kotlin.fir.resolve.inference.model.ConeLambdaArgumentConstraintPosition import org.jetbrains.kotlin.fir.symbols.ConeTypeParameterLookupTag import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol +import org.jetbrains.kotlin.fir.symbols.SymbolInternals import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirClassLikeSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirNamedFunctionSymbol @@ -307,6 +309,16 @@ private fun mapInapplicableCandidateError( rootCause.expectedContextReceiverType.removeTypeVariableTypes(typeContext) ) + is StubBuilderInferenceReceiver -> { + val typeParameterSymbol = rootCause.typeParameterSymbol + @OptIn(SymbolInternals::class) + FirErrors.BUILDER_INFERENCE_STUB_RECEIVER.createOn( + qualifiedAccessSource ?: source, + typeParameterSymbol.name, + (typeParameterSymbol.containingDeclarationSymbol.fir as FirMemberDeclaration).nameOrSpecialName + ) + } + is NullForNotNullType -> FirErrors.NULL_FOR_NONNULL_TYPE.createOn( rootCause.argument.source ?: source, rootCause.expectedType.removeTypeVariableTypes(typeContext) ) diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/ResolutionStages.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/ResolutionStages.kt index 233866e966c..44ba991c95e 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/ResolutionStages.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/calls/ResolutionStages.kt @@ -31,6 +31,7 @@ import org.jetbrains.kotlin.fir.scopes.FirUnstableSmartcastTypeScope import org.jetbrains.kotlin.fir.scopes.ProcessorAction import org.jetbrains.kotlin.fir.scopes.impl.typeAliasForConstructor import org.jetbrains.kotlin.fir.scopes.processOverriddenFunctions +import org.jetbrains.kotlin.fir.symbols.ConeTypeParameterLookupTag import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol import org.jetbrains.kotlin.fir.symbols.SyntheticSymbol import org.jetbrains.kotlin.fir.symbols.impl.* @@ -129,6 +130,21 @@ object CheckExtensionReceiver : ResolutionStage() { candidate.chosenExtensionReceiver = receiver.expression + val checkBuilderInferenceRestriction = + !context.session.languageVersionSettings + .supportsFeature(LanguageFeature.NoBuilderInferenceWithoutAnnotationRestriction) + if (checkBuilderInferenceRestriction) { + val resolvedType = receiver.expression.resolvedType + if (resolvedType is ConeStubTypeForChainInference) { + val typeVariable = resolvedType.constructor.variable + sink.yieldDiagnostic( + StubBuilderInferenceReceiver( + (typeVariable.typeConstructor.originalTypeParameter as ConeTypeParameterLookupTag).typeParameterSymbol + ) + ) + } + } + sink.yieldIfNeed() } diff --git a/compiler/fir/semantics/src/org/jetbrains/kotlin/fir/resolve/calls/ResolutionDiagnostic.kt b/compiler/fir/semantics/src/org/jetbrains/kotlin/fir/resolve/calls/ResolutionDiagnostic.kt index 0817b6c378c..4852cfd43c6 100644 --- a/compiler/fir/semantics/src/org/jetbrains/kotlin/fir/resolve/calls/ResolutionDiagnostic.kt +++ b/compiler/fir/semantics/src/org/jetbrains/kotlin/fir/resolve/calls/ResolutionDiagnostic.kt @@ -7,6 +7,7 @@ package org.jetbrains.kotlin.fir.resolve.calls import org.jetbrains.kotlin.KtSourceElement import org.jetbrains.kotlin.fir.declarations.FirFunction +import org.jetbrains.kotlin.fir.declarations.FirReceiverParameter import org.jetbrains.kotlin.fir.declarations.FirValueParameter import org.jetbrains.kotlin.fir.expressions.FirExpression import org.jetbrains.kotlin.fir.expressions.FirNamedArgumentExpression @@ -14,6 +15,7 @@ import org.jetbrains.kotlin.fir.expressions.FirSmartCastExpression import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirConstructorSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirNamedFunctionSymbol +import org.jetbrains.kotlin.fir.symbols.impl.FirTypeParameterSymbol import org.jetbrains.kotlin.fir.types.ConeKotlinType import org.jetbrains.kotlin.fir.types.ConeTypeVariable import org.jetbrains.kotlin.resolve.ForbiddenNamedArgumentsTarget @@ -153,3 +155,7 @@ object ResolutionResultOverridesOtherToPreserveCompatibility : ResolutionDiagnos object AdaptedCallableReferenceIsUsedWithReflection : ResolutionDiagnostic(RESOLVED_WITH_ERROR) object TypeParameterAsExpression : ResolutionDiagnostic(INAPPLICABLE) + +class StubBuilderInferenceReceiver( + val typeParameterSymbol: FirTypeParameterSymbol +) : ResolutionDiagnostic(RESOLVED_WITH_ERROR) \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/inference/builderInference/errorOnStubReceiver.fir.kt b/compiler/testData/diagnostics/tests/inference/builderInference/errorOnStubReceiver.fir.kt index 655a98ec345..9be037847f2 100644 --- a/compiler/testData/diagnostics/tests/inference/builderInference/errorOnStubReceiver.fir.kt +++ b/compiler/testData/diagnostics/tests/inference/builderInference/errorOnStubReceiver.fir.kt @@ -12,7 +12,7 @@ fun main() { buildList { add(Bar()) - this.get(0).test() // resolved to Any?.test + this.get(0).test() // resolved to Any?.test } buildList { add(Bar()) diff --git a/compiler/testData/diagnostics/tests/inference/builderInference/errorOnStubReceiver.fir.txt b/compiler/testData/diagnostics/tests/inference/builderInference/errorOnStubReceiver.fir.txt index d52da222f5c..12059f13c5b 100644 --- a/compiler/testData/diagnostics/tests/inference/builderInference/errorOnStubReceiver.fir.txt +++ b/compiler/testData/diagnostics/tests/inference/builderInference/errorOnStubReceiver.fir.txt @@ -13,7 +13,7 @@ FILE: errorOnStubReceiver.fir.kt public final fun main(): R|kotlin/Unit| { R|kotlin/collections/buildList|( = buildList@fun R|kotlin/collections/MutableList|.(): R|kotlin/Unit| { this@R|special/anonymous|.R|SubstitutionOverride|(R|/Bar.Bar|()) - this@R|special/anonymous|.R|SubstitutionOverride|(Int(0)).R|/test|() + this@R|special/anonymous|.R|SubstitutionOverride|(Int(0)).R|/test#|() } ) R|kotlin/collections/buildList|( = buildList@fun R|kotlin/collections/MutableList|.(): R|kotlin/Unit| { diff --git a/compiler/testData/diagnostics/tests/inference/builderInference/kt49828.fir.kt b/compiler/testData/diagnostics/tests/inference/builderInference/kt49828.fir.kt index 6be1d5e312f..599fa84d2de 100644 --- a/compiler/testData/diagnostics/tests/inference/builderInference/kt49828.fir.kt +++ b/compiler/testData/diagnostics/tests/inference/builderInference/kt49828.fir.kt @@ -76,13 +76,13 @@ fun main() { val list6 = buildList { add("one") - get(0).bar() + get(0).bar() } val list7 = buildList { add("one") with (get(0)) { - bar() + bar() } } val list71 = buildList { @@ -90,7 +90,7 @@ fun main() { with (get(0)) l1@ { with (listOf(1)) { - bar() + bar() } } } @@ -99,7 +99,7 @@ fun main() { with (get(0)) { with (listOf(1)) { - bar() + bar() } } } @@ -122,7 +122,7 @@ fun main() { with (get(0)) { with (Inv(this)) { - bar() + bar() } } } @@ -161,14 +161,14 @@ fun main() { add("one") with (get(0)) { - foo0003(0f, this@l1.get(0)) + foo0003(0f, this@l1.get(0)) } } val list18 = buildList { add("one") - get(0).foo0003(0f, get(0)) + get(0).foo0003(0f, get(0)) } val map1 = buildMap { @@ -211,7 +211,7 @@ fun test() { add("") with (get()) { with (listOf(1)) { - bar() + bar() } } }, diff --git a/compiler/testData/diagnostics/tests/inference/builderInference/kt53422.fir.kt b/compiler/testData/diagnostics/tests/inference/builderInference/kt53422.fir.kt index 8a84de782e4..d17a07d289f 100644 --- a/compiler/testData/diagnostics/tests/inference/builderInference/kt53422.fir.kt +++ b/compiler/testData/diagnostics/tests/inference/builderInference/kt53422.fir.kt @@ -3,7 +3,7 @@ fun test() { foo( flow { emit(0) } - ) { it.collect {} } + ) { it.collect {} } // 0. Initial // W <: Any / declared upper bound diff --git a/compiler/testData/diagnostics/tests/inference/builderInference/stubTypes/memberScope.fir.kt b/compiler/testData/diagnostics/tests/inference/builderInference/stubTypes/memberScope.fir.kt index b7a9a950253..642ed838b47 100644 --- a/compiler/testData/diagnostics/tests/inference/builderInference/stubTypes/memberScope.fir.kt +++ b/compiler/testData/diagnostics/tests/inference/builderInference/stubTypes/memberScope.fir.kt @@ -20,37 +20,37 @@ fun test() { val ret1 = build { emit(1) emit(null) - get()?.test() - get()?.test2() - get().test2() - get()?.hashCode() + get()?.test() + get()?.test2() + get().test2() + get()?.hashCode() get()?.equals(1) // there is `String?.equals` extension - get().equals("") + get().equals("") } val ret2 = build { emit(1) emit(null) - get()?.test() - get()?.test2() - get().test2() - get()?.hashCode() + get()?.test() + get()?.test2() + get().test2() + get()?.hashCode() get()?.equals(1) val x = get() - x?.hashCode() + x?.hashCode() x?.equals(1) - x.equals("") + x.equals("") } val ret3 = build { emit(1) emit(null) - get()?.test() - get()?.test2() - get().test2() - get()?.hashCode() + get()?.test() + get()?.test2() + get().test2() + get()?.hashCode() get()?.equals(1) val x = get() - x?.hashCode() + x?.hashCode() x?.equals(1) if (get() == null) {} @@ -153,20 +153,20 @@ fun test() { emit(1) emit(null) val x = get() - x.test() + x.test() "" } val ret41 = build { emit(1) emit(null) - get()?.test() - get()?.test2() - get().test2() - get()?.hashCode() + get()?.test() + get()?.test2() + get().test2() + get()?.hashCode() get()?.equals(1) val x = get() - x?.hashCode() + x?.hashCode() x?.equals(1) if (get() == null) {} @@ -284,19 +284,19 @@ fun test() { emit(1) emit(null) val x = get() - x.test() + x.test() "" } val ret51 = build { emit(1) emit(null) - get()?.test() - get()?.test2() - get().test2() - get()?.hashCode() + get()?.test() + get()?.test2() + get().test2() + get()?.hashCode() get()?.equals(1) val x = get() - x?.hashCode() + x?.hashCode() x?.equals(1) if (get() == null) {} diff --git a/compiler/testData/diagnostics/tests/inference/builderInference/stubTypes/nullability.fir.kt b/compiler/testData/diagnostics/tests/inference/builderInference/stubTypes/nullability.fir.kt index 133ad7932b0..e9aafbd897e 100644 --- a/compiler/testData/diagnostics/tests/inference/builderInference/stubTypes/nullability.fir.kt +++ b/compiler/testData/diagnostics/tests/inference/builderInference/stubTypes/nullability.fir.kt @@ -25,27 +25,27 @@ fun build4(x: R2, block: TestInterface.() -> Unit): R1 = TODO( fun test(a: String?) { val ret1 = build { emit(1) - get()?.equals("") + get()?.equals("") val x = get() - x?.equals("") + x?.equals("") x ?: 1 x!! "" } val ret2 = build2 { emit(1) - get()?.equals("") + get()?.equals("") val x = get() - x?.equals("") + x?.equals("") x ?: 1 x!! "" } val ret3 = build3 { emit(1) - get()?.equals("") + get()?.equals("") val x = get() - x?.equals("") + x?.equals("") x ?: 1 x!! "" diff --git a/compiler/testData/diagnostics/tests/inference/builderInference/stubTypes/stubTypeReceiverRestriction.fir.kt b/compiler/testData/diagnostics/tests/inference/builderInference/stubTypes/stubTypeReceiverRestriction.fir.kt index 25f2a336b00..d32e0210022 100644 --- a/compiler/testData/diagnostics/tests/inference/builderInference/stubTypes/stubTypeReceiverRestriction.fir.kt +++ b/compiler/testData/diagnostics/tests/inference/builderInference/stubTypes/stubTypeReceiverRestriction.fir.kt @@ -9,9 +9,9 @@ fun use(p: Any?) {} fun test1() { a { - this.get(0).extension() - use(this.get(0)::extension) - use(it::extension) + this.get(0).extension() + use(this.get(0)::extension) + use(it::extension) } } @@ -19,9 +19,9 @@ fun test1() { fun test2() { a { val v = this.get(0) - v.extension() - use(v::extension) - use(it::extension) + v.extension() + use(v::extension) + use(it::extension) } } @@ -29,9 +29,9 @@ fun test3() { operator fun T.getValue(thisRef: Any?, prop: Any?): T = this a { val v by this.get(0) - v.extension() - use(v::extension) - use(it::extension) + v.extension() + use(v::extension) + use(it::extension) } } @@ -42,9 +42,9 @@ fun test4() { operator fun Box.getValue(thisRef: Any?, prop: Any?): T = this.t a { val v by this.get(0) - v.extension() + v.extension() use(v::extension) - use(it::extension) + use(it::extension) } } @@ -53,20 +53,20 @@ fun b(lambda: R.(List) -> Unit) {} fun test5() { operator fun T.invoke(): T = this - b { - extension() - this().extension() - use(::extension) + b { + extension() + this().extension() + use(::extension) } } val T.genericLambda: T.((T) -> Unit) -> Unit get() = {} fun test6() { - b { - extension() - genericLambda { } - genericLambda { it.extension() } - use(::extension) + b { + extension() + genericLambda { } + genericLambda { it.extension() } + use(::extension) } } diff --git a/compiler/testData/diagnostics/testsWithStdLib/builderInference/unsafeAssignment.fir.kt b/compiler/testData/diagnostics/testsWithStdLib/builderInference/unsafeAssignment.fir.kt index 50c554a0aeb..37881c5d718 100644 --- a/compiler/testData/diagnostics/testsWithStdLib/builderInference/unsafeAssignment.fir.kt +++ b/compiler/testData/diagnostics/testsWithStdLib/builderInference/unsafeAssignment.fir.kt @@ -10,7 +10,7 @@ fun main(arg: Any) { val value = myBuilder { doSmthng("one ") run { a; this }.a = 10 - a += 1 + a += 1 this.a = 57 this.(a) = 57 a = x diff --git a/compiler/testData/diagnostics/testsWithStdLib/builderInference/unsafeAssignmentExtra.fir.kt b/compiler/testData/diagnostics/testsWithStdLib/builderInference/unsafeAssignmentExtra.fir.kt index 8fad6167aa6..5473410b04a 100644 --- a/compiler/testData/diagnostics/testsWithStdLib/builderInference/unsafeAssignmentExtra.fir.kt +++ b/compiler/testData/diagnostics/testsWithStdLib/builderInference/unsafeAssignmentExtra.fir.kt @@ -26,18 +26,18 @@ fun main(arg: Any, condition: Boolean) { val value = myBuilder { b[0] = 123 a = 45 - a++ + a++ bar(::a) if (a is Int) { a = 67 - a-- + a-- bar(::a) } when (condition) { true -> a = 87 false -> a = 65 } - val x by a + val x by a change { a = 99 diff --git a/compiler/testData/diagnostics/testsWithStdLib/coroutines/inference/kt36220.fir.kt b/compiler/testData/diagnostics/testsWithStdLib/coroutines/inference/kt36220.fir.kt new file mode 100644 index 00000000000..9a2164295e4 --- /dev/null +++ b/compiler/testData/diagnostics/testsWithStdLib/coroutines/inference/kt36220.fir.kt @@ -0,0 +1,19 @@ +// !OPT_IN: kotlin.RequiresOptIn +// !DIAGNOSTICS: -UNUSED_PARAMETER + +import kotlin.experimental.ExperimentalTypeInference + +class TypeDefinition { + fun parse(parser: (serializedValue: String) -> KotlinType?): Unit = TODO() + fun serialize(parser: (value: KotlinType) -> Any?): Unit = TODO() +} + +@OptIn(ExperimentalTypeInference::class) +fun defineType(definition: TypeDefinition.() -> Unit): Unit = TODO() + +fun main() { + defineType { + parse { it.toInt() } + serialize { it.toString() } + } +} diff --git a/compiler/testData/diagnostics/testsWithStdLib/coroutines/inference/kt36220.kt b/compiler/testData/diagnostics/testsWithStdLib/coroutines/inference/kt36220.kt index d73e674faea..0231124efeb 100644 --- a/compiler/testData/diagnostics/testsWithStdLib/coroutines/inference/kt36220.kt +++ b/compiler/testData/diagnostics/testsWithStdLib/coroutines/inference/kt36220.kt @@ -1,4 +1,3 @@ -// FIR_IDENTICAL // !OPT_IN: kotlin.RequiresOptIn // !DIAGNOSTICS: -UNUSED_PARAMETER