From e02fd8f4a8c9b6dc544c64bc23dd1468777606bf Mon Sep 17 00:00:00 2001 From: Mikhail Glukhikh Date: Mon, 5 Sep 2022 19:25:27 +0200 Subject: [PATCH] FE: don't run builder inference in UNTIL_FIRST_LAMBDA mode #KT-52927 Fixed --- ...iagnosisCompilerTestFE10TestdataTestGenerated.java | 6 ++++++ .../FirOldFrontendDiagnosticsTestGenerated.java | 6 ++++++ ...FrontendDiagnosticsWithLightTreeTestGenerated.java | 6 ++++++ .../resolve/inference/ConstraintSystemCompleter.kt | 2 +- .../components/KotlinConstraintSystemCompleter.kt | 2 +- .../inference/builderInference/invalidateKeys.fir.kt | 11 +++++++++++ .../inference/builderInference/invalidateKeys.kt | 11 +++++++++++ .../inference/builderInference/invalidateKeys.txt | 11 +++++++++++ .../kotlin/test/runners/DiagnosticTestGenerated.java | 6 ++++++ 9 files changed, 59 insertions(+), 2 deletions(-) create mode 100644 compiler/testData/diagnostics/tests/inference/builderInference/invalidateKeys.fir.kt create mode 100644 compiler/testData/diagnostics/tests/inference/builderInference/invalidateKeys.kt create mode 100644 compiler/testData/diagnostics/tests/inference/builderInference/invalidateKeys.txt diff --git a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosisCompilerTestFE10TestdataTestGenerated.java b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosisCompilerTestFE10TestdataTestGenerated.java index 369d5f7d020..42820f27a04 100644 --- a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosisCompilerTestFE10TestdataTestGenerated.java +++ b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosisCompilerTestFE10TestdataTestGenerated.java @@ -14339,6 +14339,12 @@ public class DiagnosisCompilerTestFE10TestdataTestGenerated extends AbstractDiag runTest("compiler/testData/diagnostics/tests/inference/builderInference/errorOnStubReceiver.kt"); } + @Test + @TestMetadata("invalidateKeys.kt") + public void testInvalidateKeys() throws Exception { + runTest("compiler/testData/diagnostics/tests/inference/builderInference/invalidateKeys.kt"); + } + @Test @TestMetadata("kt47744.kt") public void testKt47744() throws Exception { diff --git a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendDiagnosticsTestGenerated.java b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendDiagnosticsTestGenerated.java index de2906dd9f3..ea1a1f62321 100644 --- a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendDiagnosticsTestGenerated.java +++ b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendDiagnosticsTestGenerated.java @@ -14339,6 +14339,12 @@ public class FirOldFrontendDiagnosticsTestGenerated extends AbstractFirDiagnosti runTest("compiler/testData/diagnostics/tests/inference/builderInference/errorOnStubReceiver.kt"); } + @Test + @TestMetadata("invalidateKeys.kt") + public void testInvalidateKeys() throws Exception { + runTest("compiler/testData/diagnostics/tests/inference/builderInference/invalidateKeys.kt"); + } + @Test @TestMetadata("kt47744.kt") public void testKt47744() throws Exception { diff --git a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendDiagnosticsWithLightTreeTestGenerated.java b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendDiagnosticsWithLightTreeTestGenerated.java index f9b8ae5237c..3b1c66287f1 100644 --- a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendDiagnosticsWithLightTreeTestGenerated.java +++ b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendDiagnosticsWithLightTreeTestGenerated.java @@ -14339,6 +14339,12 @@ public class FirOldFrontendDiagnosticsWithLightTreeTestGenerated extends Abstrac runTest("compiler/testData/diagnostics/tests/inference/builderInference/errorOnStubReceiver.kt"); } + @Test + @TestMetadata("invalidateKeys.kt") + public void testInvalidateKeys() throws Exception { + runTest("compiler/testData/diagnostics/tests/inference/builderInference/invalidateKeys.kt"); + } + @Test @TestMetadata("kt47744.kt") public void testKt47744() throws Exception { diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/inference/ConstraintSystemCompleter.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/inference/ConstraintSystemCompleter.kt index 330e55a1b28..ce660063731 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/inference/ConstraintSystemCompleter.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/inference/ConstraintSystemCompleter.kt @@ -183,7 +183,7 @@ class ConstraintSystemCompleter(components: BodyResolveComponents, private val c allTypeVariables: List, analyze: (PostponedResolvedAtom) -> Unit ): Boolean { - if (completionMode == ConstraintSystemCompletionMode.PARTIAL) return false + if (completionMode != ConstraintSystemCompletionMode.FULL) return false // If we use the builder inference anyway (if the annotation is presented), then we are already analysed builder inference lambdas if (!languageVersionSettings.supportsFeature(LanguageFeature.UseBuilderInferenceOnlyIfNeeded)) return false diff --git a/compiler/resolution/src/org/jetbrains/kotlin/resolve/calls/inference/components/KotlinConstraintSystemCompleter.kt b/compiler/resolution/src/org/jetbrains/kotlin/resolve/calls/inference/components/KotlinConstraintSystemCompleter.kt index c69df4f5db8..4be0a04fc1c 100644 --- a/compiler/resolution/src/org/jetbrains/kotlin/resolve/calls/inference/components/KotlinConstraintSystemCompleter.kt +++ b/compiler/resolution/src/org/jetbrains/kotlin/resolve/calls/inference/components/KotlinConstraintSystemCompleter.kt @@ -212,7 +212,7 @@ class KotlinConstraintSystemCompleter( diagnosticsHolder: KotlinDiagnosticsHolder, analyze: (PostponedResolvedAtom) -> Unit ): Boolean { - if (completionMode == ConstraintSystemCompletionMode.PARTIAL) return false + if (completionMode != ConstraintSystemCompletionMode.FULL) return false val useBuilderInferenceOnlyIfNeeded = languageVersionSettings.supportsFeature(LanguageFeature.UseBuilderInferenceOnlyIfNeeded) diff --git a/compiler/testData/diagnostics/tests/inference/builderInference/invalidateKeys.fir.kt b/compiler/testData/diagnostics/tests/inference/builderInference/invalidateKeys.fir.kt new file mode 100644 index 00000000000..9a141c99a7f --- /dev/null +++ b/compiler/testData/diagnostics/tests/inference/builderInference/invalidateKeys.fir.kt @@ -0,0 +1,11 @@ +// WITH_STDLIB +fun foo(libraryInfoCache: LibraryInfoCache, outdated: List) { + val droppedLibraryInfos = libraryInfoCache.invalidateKeys(outdated).flatMapTo(hashSetOf()) { it } +} + +class LibraryInfoCache { + fun invalidateKeys( + keys: Collection, + validityCondition: ((Key, Value) -> Boolean)? = null + ) {} +} diff --git a/compiler/testData/diagnostics/tests/inference/builderInference/invalidateKeys.kt b/compiler/testData/diagnostics/tests/inference/builderInference/invalidateKeys.kt new file mode 100644 index 00000000000..852ebac5218 --- /dev/null +++ b/compiler/testData/diagnostics/tests/inference/builderInference/invalidateKeys.kt @@ -0,0 +1,11 @@ +// WITH_STDLIB +fun foo(libraryInfoCache: LibraryInfoCache, outdated: List) { + val droppedLibraryInfos = libraryInfoCache.invalidateKeys(outdated).flatMapTo(hashSetOf()) { it } +} + +class LibraryInfoCache { + fun invalidateKeys( + keys: Collection, + validityCondition: ((Key, Value) -> Boolean)? = null + ) {} +} diff --git a/compiler/testData/diagnostics/tests/inference/builderInference/invalidateKeys.txt b/compiler/testData/diagnostics/tests/inference/builderInference/invalidateKeys.txt new file mode 100644 index 00000000000..40a0e367e88 --- /dev/null +++ b/compiler/testData/diagnostics/tests/inference/builderInference/invalidateKeys.txt @@ -0,0 +1,11 @@ +package + +public fun foo(/*0*/ libraryInfoCache: LibraryInfoCache, /*1*/ outdated: kotlin.collections.List): kotlin.Unit + +public final class LibraryInfoCache { + public constructor LibraryInfoCache() + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public final fun invalidateKeys(/*0*/ keys: kotlin.collections.Collection, /*1*/ validityCondition: ((Key, Value) -> kotlin.Boolean)? = ...): kotlin.Unit + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String +} diff --git a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/DiagnosticTestGenerated.java b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/DiagnosticTestGenerated.java index 0c4c47902c1..5666e9504c8 100644 --- a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/DiagnosticTestGenerated.java +++ b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/DiagnosticTestGenerated.java @@ -14345,6 +14345,12 @@ public class DiagnosticTestGenerated extends AbstractDiagnosticTest { runTest("compiler/testData/diagnostics/tests/inference/builderInference/errorOnStubReceiver.kt"); } + @Test + @TestMetadata("invalidateKeys.kt") + public void testInvalidateKeys() throws Exception { + runTest("compiler/testData/diagnostics/tests/inference/builderInference/invalidateKeys.kt"); + } + @Test @TestMetadata("kt47744.kt") public void testKt47744() throws Exception {