From dc578b1c5f30c556e72e153492f4517ba94036c0 Mon Sep 17 00:00:00 2001 From: "Evgeniy.Zhelenskiy" Date: Thu, 18 Jan 2024 06:19:55 +0100 Subject: [PATCH] [FIR] Exclude class type arguments checks for type parameters from outer functions #KT-63577 --- ...nosticCompilerTestFE10TestdataTestGenerated.java | 6 ++++++ ...DiagnosticCompilerFE10TestDataTestGenerated.java | 6 ++++++ ...ightTreeOldFrontendDiagnosticsTestGenerated.java | 6 ++++++ .../FirPsiOldFrontendDiagnosticsTestGenerated.java | 6 ++++++ ...rgumentsOfQualifierOfCallableReferenceChecker.kt | 3 ++- .../diagnostics/tests/callableReference/bareType.kt | 3 +++ .../tests/callableReference/bareType.txt | 9 +++++++++ .../diagnostics/tests/inference/kt63577.fir.kt | 13 +++++++++++++ .../testData/diagnostics/tests/inference/kt63577.kt | 13 +++++++++++++ .../test/runners/DiagnosticTestGenerated.java | 6 ++++++ 10 files changed, 70 insertions(+), 1 deletion(-) create mode 100644 compiler/testData/diagnostics/tests/inference/kt63577.fir.kt create mode 100644 compiler/testData/diagnostics/tests/inference/kt63577.kt diff --git a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosticCompilerTestFE10TestdataTestGenerated.java b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosticCompilerTestFE10TestdataTestGenerated.java index 4284141bfa3..0f842988469 100644 --- a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosticCompilerTestFE10TestdataTestGenerated.java +++ b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/DiagnosticCompilerTestFE10TestdataTestGenerated.java @@ -16932,6 +16932,12 @@ public class DiagnosticCompilerTestFE10TestdataTestGenerated extends AbstractDia runTest("compiler/testData/diagnostics/tests/inference/kt62609.kt"); } + @Test + @TestMetadata("kt63577.kt") + public void testKt63577() throws Exception { + runTest("compiler/testData/diagnostics/tests/inference/kt63577.kt"); + } + @Test @TestMetadata("kt63982.kt") public void testKt63982() throws Exception { diff --git a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/LLFirPreresolvedReversedDiagnosticCompilerFE10TestDataTestGenerated.java b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/LLFirPreresolvedReversedDiagnosticCompilerFE10TestDataTestGenerated.java index f74cfec76a6..ba2878ace8a 100644 --- a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/LLFirPreresolvedReversedDiagnosticCompilerFE10TestDataTestGenerated.java +++ b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/LLFirPreresolvedReversedDiagnosticCompilerFE10TestDataTestGenerated.java @@ -16932,6 +16932,12 @@ public class LLFirPreresolvedReversedDiagnosticCompilerFE10TestDataTestGenerated runTest("compiler/testData/diagnostics/tests/inference/kt62609.kt"); } + @Test + @TestMetadata("kt63577.kt") + public void testKt63577() throws Exception { + runTest("compiler/testData/diagnostics/tests/inference/kt63577.kt"); + } + @Test @TestMetadata("kt63982.kt") public void testKt63982() throws Exception { diff --git a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirLightTreeOldFrontendDiagnosticsTestGenerated.java b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirLightTreeOldFrontendDiagnosticsTestGenerated.java index 2fbe6d6e981..f1144d860a6 100644 --- a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirLightTreeOldFrontendDiagnosticsTestGenerated.java +++ b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirLightTreeOldFrontendDiagnosticsTestGenerated.java @@ -16926,6 +16926,12 @@ public class FirLightTreeOldFrontendDiagnosticsTestGenerated extends AbstractFir runTest("compiler/testData/diagnostics/tests/inference/kt62609.kt"); } + @Test + @TestMetadata("kt63577.kt") + public void testKt63577() throws Exception { + runTest("compiler/testData/diagnostics/tests/inference/kt63577.kt"); + } + @Test @TestMetadata("kt63982.kt") public void testKt63982() throws Exception { diff --git a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirPsiOldFrontendDiagnosticsTestGenerated.java b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirPsiOldFrontendDiagnosticsTestGenerated.java index 9a142d19d4a..d9a8943dfa8 100644 --- a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirPsiOldFrontendDiagnosticsTestGenerated.java +++ b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirPsiOldFrontendDiagnosticsTestGenerated.java @@ -16932,6 +16932,12 @@ public class FirPsiOldFrontendDiagnosticsTestGenerated extends AbstractFirPsiDia runTest("compiler/testData/diagnostics/tests/inference/kt62609.kt"); } + @Test + @TestMetadata("kt63577.kt") + public void testKt63577() throws Exception { + runTest("compiler/testData/diagnostics/tests/inference/kt63577.kt"); + } + @Test @TestMetadata("kt63982.kt") public void testKt63982() throws Exception { diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/expression/FirTypeArgumentsOfQualifierOfCallableReferenceChecker.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/expression/FirTypeArgumentsOfQualifierOfCallableReferenceChecker.kt index 3c156a31abd..400fbf508a3 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/expression/FirTypeArgumentsOfQualifierOfCallableReferenceChecker.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/expression/FirTypeArgumentsOfQualifierOfCallableReferenceChecker.kt @@ -14,6 +14,7 @@ import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors import org.jetbrains.kotlin.fir.expressions.FirCallableReferenceAccess import org.jetbrains.kotlin.fir.expressions.FirResolvedQualifier import org.jetbrains.kotlin.fir.resolve.fullyExpandedType +import org.jetbrains.kotlin.fir.symbols.impl.FirClassLikeSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirTypeAliasSymbol import org.jetbrains.kotlin.fir.types.constructType @@ -23,7 +24,7 @@ object FirTypeArgumentsOfQualifierOfCallableReferenceChecker : FirCallableRefere val correspondingDeclaration = lhs.symbol ?: return var typeArgumentsWithSourceInfo = lhs.typeArguments.toTypeArgumentsWithSourceInfo() - var typeParameterSymbols = correspondingDeclaration.typeParameterSymbols + var typeParameterSymbols = correspondingDeclaration.typeParameterSymbols.filter { it.containingDeclarationSymbol is FirClassLikeSymbol } if (typeParameterSymbols.size != typeArgumentsWithSourceInfo.size) { reporter.reportOn( lhs.source, diff --git a/compiler/testData/diagnostics/tests/callableReference/bareType.kt b/compiler/testData/diagnostics/tests/callableReference/bareType.kt index b6847ada8aa..38d73f06f9a 100644 --- a/compiler/testData/diagnostics/tests/callableReference/bareType.kt +++ b/compiler/testData/diagnostics/tests/callableReference/bareType.kt @@ -10,6 +10,9 @@ fun f2() = Map.Entry::hashCode class Outer { inner class Inner + class NotInner } fun f3() = Outer.Inner::hashCode + +fun f4() = Outer.NotInner::hashCode diff --git a/compiler/testData/diagnostics/tests/callableReference/bareType.txt b/compiler/testData/diagnostics/tests/callableReference/bareType.txt index 2fd1493e181..548fbf4e254 100644 --- a/compiler/testData/diagnostics/tests/callableReference/bareType.txt +++ b/compiler/testData/diagnostics/tests/callableReference/bareType.txt @@ -3,6 +3,7 @@ package public fun f1(): kotlin.reflect.KFunction1, kotlin.Int> public fun f2(): kotlin.reflect.KFunction1, kotlin.Int> public fun f3(): kotlin.reflect.KFunction1.Inner, kotlin.Int> +public fun f4(): kotlin.reflect.KFunction1 public final class Outer { public constructor Outer() @@ -16,4 +17,12 @@ public final class Outer { public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String } + + public final class NotInner { + public constructor NotInner() + 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 open override /*1*/ /*fake_override*/ fun toString(): kotlin.String + } } + diff --git a/compiler/testData/diagnostics/tests/inference/kt63577.fir.kt b/compiler/testData/diagnostics/tests/inference/kt63577.fir.kt new file mode 100644 index 00000000000..8531f785863 --- /dev/null +++ b/compiler/testData/diagnostics/tests/inference/kt63577.fir.kt @@ -0,0 +1,13 @@ +// WITH_STDLIB +// FULL_JDK + +fun setupListSpeedSearch() { + class MatchedItem(val item: ItemType) + class MatchedItem1(val item: ItemType) + MatchedItem::class + MatchedItem::item + MatchedItem1::class + MatchedItem1::item + MatchedItem1::class + MatchedItem1::item +} diff --git a/compiler/testData/diagnostics/tests/inference/kt63577.kt b/compiler/testData/diagnostics/tests/inference/kt63577.kt new file mode 100644 index 00000000000..ccdeea9e1f7 --- /dev/null +++ b/compiler/testData/diagnostics/tests/inference/kt63577.kt @@ -0,0 +1,13 @@ +// WITH_STDLIB +// FULL_JDK + +fun setupListSpeedSearch() { + class MatchedItem(val item: ItemType) + class MatchedItem1(val item: ItemType) + MatchedItem::class + MatchedItem::item + MatchedItem1::class + MatchedItem1::item + MatchedItem1::class + MatchedItem1::item +} 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 f758128f8f1..575467b3717 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 @@ -16932,6 +16932,12 @@ public class DiagnosticTestGenerated extends AbstractDiagnosticTest { runTest("compiler/testData/diagnostics/tests/inference/kt62609.kt"); } + @Test + @TestMetadata("kt63577.kt") + public void testKt63577() throws Exception { + runTest("compiler/testData/diagnostics/tests/inference/kt63577.kt"); + } + @Test @TestMetadata("kt63982.kt") public void testKt63982() throws Exception {