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 4766b5b1aa8..43ba6785e88 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 @@ -2136,6 +2136,12 @@ public class DiagnosticCompilerTestFE10TestdataTestGenerated extends AbstractDia runTest("compiler/testData/diagnostics/tests/annotations/typeParameterAsAnnotation.kt"); } + @Test + @TestMetadata("typealiasWithAnnotatedAbstractClass.kt") + public void testTypealiasWithAnnotatedAbstractClass() throws Exception { + runTest("compiler/testData/diagnostics/tests/annotations/typealiasWithAnnotatedAbstractClass.kt"); + } + @Test @TestMetadata("UnresolvedAnnotationOnObject.kt") public void testUnresolvedAnnotationOnObject() 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 25efd81454c..7efa64395ad 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 @@ -2136,6 +2136,12 @@ public class LLFirPreresolvedReversedDiagnosticCompilerFE10TestDataTestGenerated runTest("compiler/testData/diagnostics/tests/annotations/typeParameterAsAnnotation.kt"); } + @Test + @TestMetadata("typealiasWithAnnotatedAbstractClass.kt") + public void testTypealiasWithAnnotatedAbstractClass() throws Exception { + runTest("compiler/testData/diagnostics/tests/annotations/typealiasWithAnnotatedAbstractClass.kt"); + } + @Test @TestMetadata("UnresolvedAnnotationOnObject.kt") public void testUnresolvedAnnotationOnObject() 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 dadf134757a..2692e96fc6f 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 @@ -2136,6 +2136,12 @@ public class FirLightTreeOldFrontendDiagnosticsTestGenerated extends AbstractFir runTest("compiler/testData/diagnostics/tests/annotations/typeParameterAsAnnotation.kt"); } + @Test + @TestMetadata("typealiasWithAnnotatedAbstractClass.kt") + public void testTypealiasWithAnnotatedAbstractClass() throws Exception { + runTest("compiler/testData/diagnostics/tests/annotations/typealiasWithAnnotatedAbstractClass.kt"); + } + @Test @TestMetadata("UnresolvedAnnotationOnObject.kt") public void testUnresolvedAnnotationOnObject() 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 721e9fea8f5..a483e42185a 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 @@ -2142,6 +2142,12 @@ public class FirPsiOldFrontendDiagnosticsTestGenerated extends AbstractFirPsiDia runTest("compiler/testData/diagnostics/tests/annotations/typeParameterAsAnnotation.kt"); } + @Test + @TestMetadata("typealiasWithAnnotatedAbstractClass.kt") + public void testTypealiasWithAnnotatedAbstractClass() throws Exception { + runTest("compiler/testData/diagnostics/tests/annotations/typealiasWithAnnotatedAbstractClass.kt"); + } + @Test @TestMetadata("UnresolvedAnnotationOnObject.kt") public void testUnresolvedAnnotationOnObject() throws Exception { diff --git a/compiler/fir/providers/src/org/jetbrains/kotlin/fir/types/TypeUtils.kt b/compiler/fir/providers/src/org/jetbrains/kotlin/fir/types/TypeUtils.kt index e99e958c533..c1c965ecb54 100644 --- a/compiler/fir/providers/src/org/jetbrains/kotlin/fir/types/TypeUtils.kt +++ b/compiler/fir/providers/src/org/jetbrains/kotlin/fir/types/TypeUtils.kt @@ -98,8 +98,13 @@ fun ConeDefinitelyNotNullType.Companion.create( } @OptIn(DynamicTypeConstructor::class) -fun ConeDynamicType.Companion.create(session: FirSession): ConeDynamicType = - ConeDynamicType(session.builtinTypes.nothingType.type, session.builtinTypes.nullableAnyType.type) +fun ConeDynamicType.Companion.create( + session: FirSession, + attributes: ConeAttributes = ConeAttributes.Empty, +) = ConeDynamicType( + session.builtinTypes.nothingType.type.withAttributes(attributes), + session.builtinTypes.nullableAnyType.type.withAttributes(attributes), +) /** * This call is required if you want to use a type with annotations that are linked to a declaration from this declaration inside another diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/providers/impl/FirTypeResolverImpl.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/providers/impl/FirTypeResolverImpl.kt index e76a074b2d0..976989a0934 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/providers/impl/FirTypeResolverImpl.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/providers/impl/FirTypeResolverImpl.kt @@ -417,7 +417,14 @@ class FirTypeResolverImpl(private val session: FirSession) : FirTypeResolver() { FirTypeResolutionResult(resolvedType, (result as? TypeResolutionResult.Resolved)?.typeCandidate?.diagnostic) } is FirFunctionTypeRef -> createFunctionType(typeRef, scopeClassDeclaration.containerDeclaration) - is FirDynamicTypeRef -> FirTypeResolutionResult(ConeDynamicType.create(session), diagnostic = null) + is FirDynamicTypeRef -> { + val attributes = typeRef.annotations.computeTypeAttributes( + session, + containerDeclaration = scopeClassDeclaration.containerDeclaration, + shouldExpandTypeAliases = true + ) + FirTypeResolutionResult(ConeDynamicType.create(session, attributes), diagnostic = null) + } is FirIntersectionTypeRef -> { val leftType = typeRef.leftType.coneType if (leftType is ConeTypeParameterType) { diff --git a/compiler/testData/diagnostics/tests/annotations/typealiasWithAnnotatedAbstractClass.kt b/compiler/testData/diagnostics/tests/annotations/typealiasWithAnnotatedAbstractClass.kt new file mode 100644 index 00000000000..f82ea66fc3f --- /dev/null +++ b/compiler/testData/diagnostics/tests/annotations/typealiasWithAnnotatedAbstractClass.kt @@ -0,0 +1,14 @@ +// FIR_IDENTICAL +@Target(AnnotationTarget.TYPE) +annotation class Ann1 + +@Target(AnnotationTarget.TYPE) +annotation class Ann2 + +abstract class AnnGenList : List<@Ann1 T> {} +typealias TestAnnGen1 = AnnGenList +typealias TestAnnGen2 = AnnGenList<@Ann2 String> +typealias TestAnnGen3 = AnnGenList<@Ann1 String> // KT-62602: should REPEATED_ANNOTATION diagnostic be raised here? + +fun useAnnGen1(x: TestAnnGen1) = x +fun useAnnGen2(x: TestAnnGen2) = x diff --git a/compiler/testData/diagnostics/testsWithJsStdLib/dynamicTypes/typealiasWithAnnotatedDynamic.kt b/compiler/testData/diagnostics/testsWithJsStdLib/dynamicTypes/typealiasWithAnnotatedDynamic.kt index ec903aa9d3f..e379b73dd4d 100644 --- a/compiler/testData/diagnostics/testsWithJsStdLib/dynamicTypes/typealiasWithAnnotatedDynamic.kt +++ b/compiler/testData/diagnostics/testsWithJsStdLib/dynamicTypes/typealiasWithAnnotatedDynamic.kt @@ -1,3 +1,4 @@ +// FIR_IDENTICAL @Target(AnnotationTarget.TYPE) annotation class Ann1 diff --git a/compiler/testData/diagnostics/testsWithJsStdLib/dynamicTypes/typealiasWithAnnotatedDynamic.fir.kt b/compiler/testData/diagnostics/testsWithJsStdLib/dynamicTypes/typealiasWithAnnotatedDynamicInAbstractClass.kt similarity index 58% rename from compiler/testData/diagnostics/testsWithJsStdLib/dynamicTypes/typealiasWithAnnotatedDynamic.fir.kt rename to compiler/testData/diagnostics/testsWithJsStdLib/dynamicTypes/typealiasWithAnnotatedDynamicInAbstractClass.kt index b68ceadab24..71d93d8478b 100644 --- a/compiler/testData/diagnostics/testsWithJsStdLib/dynamicTypes/typealiasWithAnnotatedDynamic.fir.kt +++ b/compiler/testData/diagnostics/testsWithJsStdLib/dynamicTypes/typealiasWithAnnotatedDynamicInAbstractClass.kt @@ -1,16 +1,14 @@ +// FIR_IDENTICAL @Target(AnnotationTarget.TYPE) annotation class Ann1 @Target(AnnotationTarget.TYPE) annotation class Ann2 -typealias AnnGenList = List<@Ann1 T> +abstract class AnnGenList : List<@Ann1 T> {} typealias TestAnnGen1 = AnnGenList typealias TestAnnGen2 = AnnGenList<@Ann2 dynamic> -typealias TestAnnGen3 = AnnGenList<@Ann1 dynamic> +typealias TestAnnGen3 = AnnGenList<@Ann1 dynamic> // KT-62602: should REPEATED_ANNOTATION diagnostic be raised here? fun useAnnGen1(x: TestAnnGen1) = x fun useAnnGen2(x: TestAnnGen2) = x - -fun testUseAnnGen1(x: List) = useAnnGen1(x) -fun testUseAnnGen2(x: List) = useAnnGen2(x) 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 bdea7cf4cd9..fac4aa49966 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 @@ -2142,6 +2142,12 @@ public class DiagnosticTestGenerated extends AbstractDiagnosticTest { runTest("compiler/testData/diagnostics/tests/annotations/typeParameterAsAnnotation.kt"); } + @Test + @TestMetadata("typealiasWithAnnotatedAbstractClass.kt") + public void testTypealiasWithAnnotatedAbstractClass() throws Exception { + runTest("compiler/testData/diagnostics/tests/annotations/typealiasWithAnnotatedAbstractClass.kt"); + } + @Test @TestMetadata("UnresolvedAnnotationOnObject.kt") public void testUnresolvedAnnotationOnObject() throws Exception { diff --git a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/fir/FirPsiJsOldFrontendDiagnosticsTestGenerated.java b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/fir/FirPsiJsOldFrontendDiagnosticsTestGenerated.java index 4692054a0f6..e8b99696315 100644 --- a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/fir/FirPsiJsOldFrontendDiagnosticsTestGenerated.java +++ b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/fir/FirPsiJsOldFrontendDiagnosticsTestGenerated.java @@ -428,6 +428,12 @@ public class FirPsiJsOldFrontendDiagnosticsTestGenerated extends AbstractFirPsiJ runTest("compiler/testData/diagnostics/testsWithJsStdLib/dynamicTypes/typealiasWithAnnotatedDynamic.kt"); } + @Test + @TestMetadata("typealiasWithAnnotatedDynamicInAbstractClass.kt") + public void testTypealiasWithAnnotatedDynamicInAbstractClass() throws Exception { + runTest("compiler/testData/diagnostics/testsWithJsStdLib/dynamicTypes/typealiasWithAnnotatedDynamicInAbstractClass.kt"); + } + @Test @TestMetadata("typealiasWithDynamic.kt") public void testTypealiasWithDynamic() throws Exception { diff --git a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/ir/DiagnosticsWithJsStdLibTestGenerated.java b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/ir/DiagnosticsWithJsStdLibTestGenerated.java index 8e349e27336..6d0de8a16c2 100644 --- a/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/ir/DiagnosticsWithJsStdLibTestGenerated.java +++ b/js/js.tests/tests-gen/org/jetbrains/kotlin/js/test/ir/DiagnosticsWithJsStdLibTestGenerated.java @@ -428,6 +428,12 @@ public class DiagnosticsWithJsStdLibTestGenerated extends AbstractDiagnosticsTes runTest("compiler/testData/diagnostics/testsWithJsStdLib/dynamicTypes/typealiasWithAnnotatedDynamic.kt"); } + @Test + @TestMetadata("typealiasWithAnnotatedDynamicInAbstractClass.kt") + public void testTypealiasWithAnnotatedDynamicInAbstractClass() throws Exception { + runTest("compiler/testData/diagnostics/testsWithJsStdLib/dynamicTypes/typealiasWithAnnotatedDynamicInAbstractClass.kt"); + } + @Test @TestMetadata("typealiasWithDynamic.kt") public void testTypealiasWithDynamic() throws Exception {