From cc4dac5becde4be6085e2806179454f3e1c79339 Mon Sep 17 00:00:00 2001 From: Ivan Kochurkin Date: Mon, 4 Oct 2021 18:31:13 +0300 Subject: [PATCH] [FIR] Fix false positive TYPE_VARIANCE_CONFLICT in nested class ^KT-49078 Fixed --- ...CompilerTestFE10TestdataTestGenerated.java | 6 ++++++ ...irOldFrontendDiagnosticsTestGenerated.java | 6 ++++++ ...DiagnosticsWithLightTreeTestGenerated.java | 6 ++++++ .../declaration/FirClassVarianceChecker.kt | 2 +- .../noTypeVarianceConflictInNestedClass.kt | 7 +++++++ .../noTypeVarianceConflictInNestedClass.txt | 21 +++++++++++++++++++ .../noTypeVarianceInNestedClass.txt | 21 +++++++++++++++++++ .../test/runners/DiagnosticTestGenerated.java | 6 ++++++ 8 files changed, 74 insertions(+), 1 deletion(-) create mode 100644 compiler/testData/diagnostics/tests/generics/innerClasses/noTypeVarianceConflictInNestedClass.kt create mode 100644 compiler/testData/diagnostics/tests/generics/innerClasses/noTypeVarianceConflictInNestedClass.txt create mode 100644 compiler/testData/diagnostics/tests/generics/innerClasses/noTypeVarianceInNestedClass.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 47face8396d..e6477f7cd1b 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 @@ -11544,6 +11544,12 @@ public class DiagnosisCompilerTestFE10TestdataTestGenerated extends AbstractDiag runTest("compiler/testData/diagnostics/tests/generics/innerClasses/kt6325.kt"); } + @Test + @TestMetadata("noTypeVarianceConflictInNestedClass.kt") + public void testNoTypeVarianceConflictInNestedClass() throws Exception { + runTest("compiler/testData/diagnostics/tests/generics/innerClasses/noTypeVarianceConflictInNestedClass.kt"); + } + @Test @TestMetadata("outerArgumentsRequired.kt") public void testOuterArgumentsRequired() 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 b910d1ab1b7..42a99332b5d 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 @@ -11544,6 +11544,12 @@ public class FirOldFrontendDiagnosticsTestGenerated extends AbstractFirDiagnosti runTest("compiler/testData/diagnostics/tests/generics/innerClasses/kt6325.kt"); } + @Test + @TestMetadata("noTypeVarianceConflictInNestedClass.kt") + public void testNoTypeVarianceConflictInNestedClass() throws Exception { + runTest("compiler/testData/diagnostics/tests/generics/innerClasses/noTypeVarianceConflictInNestedClass.kt"); + } + @Test @TestMetadata("outerArgumentsRequired.kt") public void testOuterArgumentsRequired() 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 bf7be3c4707..f939e3f976f 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 @@ -11544,6 +11544,12 @@ public class FirOldFrontendDiagnosticsWithLightTreeTestGenerated extends Abstrac runTest("compiler/testData/diagnostics/tests/generics/innerClasses/kt6325.kt"); } + @Test + @TestMetadata("noTypeVarianceConflictInNestedClass.kt") + public void testNoTypeVarianceConflictInNestedClass() throws Exception { + runTest("compiler/testData/diagnostics/tests/generics/innerClasses/noTypeVarianceConflictInNestedClass.kt"); + } + @Test @TestMetadata("outerArgumentsRequired.kt") public void testOuterArgumentsRequired() throws Exception { diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirClassVarianceChecker.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirClassVarianceChecker.kt index a1b843ea8ae..81446d6d1cd 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirClassVarianceChecker.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirClassVarianceChecker.kt @@ -36,7 +36,7 @@ object FirClassVarianceChecker : FirClassChecker() { } } - if (member is FirTypeParameterRefsOwner) { + if (member is FirTypeParameterRefsOwner && member !is FirClass) { checkTypeParameters(member.typeParameters, Variance.IN_VARIANCE, context, reporter) } diff --git a/compiler/testData/diagnostics/tests/generics/innerClasses/noTypeVarianceConflictInNestedClass.kt b/compiler/testData/diagnostics/tests/generics/innerClasses/noTypeVarianceConflictInNestedClass.kt new file mode 100644 index 00000000000..b016f8de5f2 --- /dev/null +++ b/compiler/testData/diagnostics/tests/generics/innerClasses/noTypeVarianceConflictInNestedClass.kt @@ -0,0 +1,7 @@ +// FIR_IDENTICAL +// KT-49078 + +class CidrMemoryData { + interface Data + abstract class AbstractData> +} \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/generics/innerClasses/noTypeVarianceConflictInNestedClass.txt b/compiler/testData/diagnostics/tests/generics/innerClasses/noTypeVarianceConflictInNestedClass.txt new file mode 100644 index 00000000000..8f70cbee75c --- /dev/null +++ b/compiler/testData/diagnostics/tests/generics/innerClasses/noTypeVarianceConflictInNestedClass.txt @@ -0,0 +1,21 @@ +package + +public final class CidrMemoryData { + public constructor CidrMemoryData() + 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 + + public abstract class AbstractData> { + public constructor AbstractData>() + 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 + } + + public interface Data { + 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/generics/innerClasses/noTypeVarianceInNestedClass.txt b/compiler/testData/diagnostics/tests/generics/innerClasses/noTypeVarianceInNestedClass.txt new file mode 100644 index 00000000000..8f70cbee75c --- /dev/null +++ b/compiler/testData/diagnostics/tests/generics/innerClasses/noTypeVarianceInNestedClass.txt @@ -0,0 +1,21 @@ +package + +public final class CidrMemoryData { + public constructor CidrMemoryData() + 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 + + public abstract class AbstractData> { + public constructor AbstractData>() + 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 + } + + public interface Data { + 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/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 dcddeed5242..fdabc9b993e 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 @@ -11550,6 +11550,12 @@ public class DiagnosticTestGenerated extends AbstractDiagnosticTest { runTest("compiler/testData/diagnostics/tests/generics/innerClasses/kt6325.kt"); } + @Test + @TestMetadata("noTypeVarianceConflictInNestedClass.kt") + public void testNoTypeVarianceConflictInNestedClass() throws Exception { + runTest("compiler/testData/diagnostics/tests/generics/innerClasses/noTypeVarianceConflictInNestedClass.kt"); + } + @Test @TestMetadata("outerArgumentsRequired.kt") public void testOuterArgumentsRequired() throws Exception {