From 16b72d3e54070fdddb8fa6be1856ef4709c5b023 Mon Sep 17 00:00:00 2001 From: Dmitriy Novozhilov Date: Mon, 3 Oct 2022 18:02:35 +0300 Subject: [PATCH] [AA] Unwrap type aliases in annotation arguments ^KT-55782 Fixed --- .../fir/evaluate/FirAnnotationValueConverter.kt | 8 +++++++- ...tClassesByFqNameForLibraryTestGenerated.java | 6 ------ ...ightClassesByPsiForLibraryTestGenerated.java | 12 ++++++++++++ ...ClassesParentingForLibraryTestGenerated.java | 6 ------ ...htClassesByFqNameForSourceTestGenerated.java | 6 ------ ...LightClassesByPsiForSourceTestGenerated.java | 12 ++++++++++++ ...tClassesParentingForSourceTestGenerated.java | 6 ------ .../lightClassByPsi/typealiasInAnnotation.java | 17 +++++++++++++++++ .../lightClassByPsi/typealiasInAnnotation.kt | 15 +++++++++++++++ .../typealiasInTypeArguments.java | 9 +++++++++ .../typealiasInTypeArguments.kt | 0 .../asJava/CompilerLightClassTestGenerated.java | 5 ----- 12 files changed, 72 insertions(+), 30 deletions(-) create mode 100644 compiler/testData/asJava/lightClasses/lightClassByPsi/typealiasInAnnotation.java create mode 100644 compiler/testData/asJava/lightClasses/lightClassByPsi/typealiasInAnnotation.kt rename compiler/testData/asJava/lightClasses/{ => lightClassByPsi}/typealiasInTypeArguments.java (71%) rename compiler/testData/asJava/lightClasses/{ => lightClassByPsi}/typealiasInTypeArguments.kt (100%) diff --git a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/evaluate/FirAnnotationValueConverter.kt b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/evaluate/FirAnnotationValueConverter.kt index 70e6a397f40..012fa719502 100644 --- a/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/evaluate/FirAnnotationValueConverter.kt +++ b/analysis/analysis-api-fir/src/org/jetbrains/kotlin/analysis/api/fir/evaluate/FirAnnotationValueConverter.kt @@ -11,7 +11,9 @@ import org.jetbrains.kotlin.analysis.api.components.KtConstantEvaluationMode import org.jetbrains.kotlin.descriptors.ClassKind import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.analysis.checkers.getContainingClassSymbol +import org.jetbrains.kotlin.fir.analysis.checkers.toClassLikeSymbol import org.jetbrains.kotlin.fir.declarations.FirClass +import org.jetbrains.kotlin.fir.declarations.fullyExpandedClass import org.jetbrains.kotlin.fir.declarations.utils.isLocal import org.jetbrains.kotlin.fir.expressions.* import org.jetbrains.kotlin.fir.psi @@ -22,6 +24,7 @@ import org.jetbrains.kotlin.fir.resolve.diagnostics.ConeUnresolvedTypeQualifierE import org.jetbrains.kotlin.fir.symbols.impl.FirConstructorSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirEnumEntrySymbol import org.jetbrains.kotlin.fir.symbols.impl.FirNamedFunctionSymbol +import org.jetbrains.kotlin.fir.symbols.impl.FirTypeAliasSymbol import org.jetbrains.kotlin.fir.types.ConeErrorType import org.jetbrains.kotlin.fir.types.coneType import org.jetbrains.kotlin.name.Name @@ -147,7 +150,10 @@ internal object FirAnnotationValueConverter { } is FirGetClassCall -> { - val symbol = (argument as? FirResolvedQualifier)?.symbol + var symbol = (argument as? FirResolvedQualifier)?.symbol + if (symbol is FirTypeAliasSymbol) { + symbol = symbol.fullyExpandedClass(session) ?: symbol + } when { symbol == null -> { val qualifierParts = mutableListOf() diff --git a/analysis/symbol-light-classes/tests/org/jetbrains/kotlin/light/classes/symbol/decompiled/SymbolLightClassesByFqNameForLibraryTestGenerated.java b/analysis/symbol-light-classes/tests/org/jetbrains/kotlin/light/classes/symbol/decompiled/SymbolLightClassesByFqNameForLibraryTestGenerated.java index a7aa7b93a2c..db74a793680 100644 --- a/analysis/symbol-light-classes/tests/org/jetbrains/kotlin/light/classes/symbol/decompiled/SymbolLightClassesByFqNameForLibraryTestGenerated.java +++ b/analysis/symbol-light-classes/tests/org/jetbrains/kotlin/light/classes/symbol/decompiled/SymbolLightClassesByFqNameForLibraryTestGenerated.java @@ -108,12 +108,6 @@ public class SymbolLightClassesByFqNameForLibraryTestGenerated extends AbstractS runTest("compiler/testData/asJava/lightClasses/lightClassByFqName/DelegatedNested.kt"); } - @Test - @TestMetadata("delegatedProperty.kt") - public void testDelegatedProperty() throws Exception { - runTest("compiler/testData/asJava/lightClasses/delegatedProperty.kt"); - } - @Test @TestMetadata("Delegation.kt") public void testDelegation() throws Exception { diff --git a/analysis/symbol-light-classes/tests/org/jetbrains/kotlin/light/classes/symbol/decompiled/SymbolLightClassesByPsiForLibraryTestGenerated.java b/analysis/symbol-light-classes/tests/org/jetbrains/kotlin/light/classes/symbol/decompiled/SymbolLightClassesByPsiForLibraryTestGenerated.java index 639c1d24dc8..67218108fb9 100644 --- a/analysis/symbol-light-classes/tests/org/jetbrains/kotlin/light/classes/symbol/decompiled/SymbolLightClassesByPsiForLibraryTestGenerated.java +++ b/analysis/symbol-light-classes/tests/org/jetbrains/kotlin/light/classes/symbol/decompiled/SymbolLightClassesByPsiForLibraryTestGenerated.java @@ -264,6 +264,18 @@ public class SymbolLightClassesByPsiForLibraryTestGenerated extends AbstractSymb runTest("compiler/testData/asJava/lightClasses/lightClassByPsi/typeAnnotations.kt"); } + @Test + @TestMetadata("typealiasInAnnotation.kt") + public void testTypealiasInAnnotation() throws Exception { + runTest("compiler/testData/asJava/lightClasses/lightClassByPsi/typealiasInAnnotation.kt"); + } + + @Test + @TestMetadata("typealiasInTypeArguments.kt") + public void testTypealiasInTypeArguments() throws Exception { + runTest("compiler/testData/asJava/lightClasses/lightClassByPsi/typealiasInTypeArguments.kt"); + } + @Test @TestMetadata("unresolvedWithAliasedImport.kt") public void testUnresolvedWithAliasedImport() throws Exception { diff --git a/analysis/symbol-light-classes/tests/org/jetbrains/kotlin/light/classes/symbol/decompiled/SymbolLightClassesParentingForLibraryTestGenerated.java b/analysis/symbol-light-classes/tests/org/jetbrains/kotlin/light/classes/symbol/decompiled/SymbolLightClassesParentingForLibraryTestGenerated.java index 78f8d17809e..2826388c442 100644 --- a/analysis/symbol-light-classes/tests/org/jetbrains/kotlin/light/classes/symbol/decompiled/SymbolLightClassesParentingForLibraryTestGenerated.java +++ b/analysis/symbol-light-classes/tests/org/jetbrains/kotlin/light/classes/symbol/decompiled/SymbolLightClassesParentingForLibraryTestGenerated.java @@ -108,12 +108,6 @@ public class SymbolLightClassesParentingForLibraryTestGenerated extends Abstract runTest("compiler/testData/asJava/lightClasses/lightClassByFqName/DelegatedNested.kt"); } - @Test - @TestMetadata("delegatedProperty.kt") - public void testDelegatedProperty() throws Exception { - runTest("compiler/testData/asJava/lightClasses/delegatedProperty.kt"); - } - @Test @TestMetadata("Delegation.kt") public void testDelegation() throws Exception { diff --git a/analysis/symbol-light-classes/tests/org/jetbrains/kotlin/light/classes/symbol/source/SymbolLightClassesByFqNameForSourceTestGenerated.java b/analysis/symbol-light-classes/tests/org/jetbrains/kotlin/light/classes/symbol/source/SymbolLightClassesByFqNameForSourceTestGenerated.java index a820ef14e06..2ab6c1bf842 100644 --- a/analysis/symbol-light-classes/tests/org/jetbrains/kotlin/light/classes/symbol/source/SymbolLightClassesByFqNameForSourceTestGenerated.java +++ b/analysis/symbol-light-classes/tests/org/jetbrains/kotlin/light/classes/symbol/source/SymbolLightClassesByFqNameForSourceTestGenerated.java @@ -108,12 +108,6 @@ public class SymbolLightClassesByFqNameForSourceTestGenerated extends AbstractSy runTest("compiler/testData/asJava/lightClasses/lightClassByFqName/DelegatedNested.kt"); } - @Test - @TestMetadata("delegatedProperty.kt") - public void testDelegatedProperty() throws Exception { - runTest("compiler/testData/asJava/lightClasses/delegatedProperty.kt"); - } - @Test @TestMetadata("Delegation.kt") public void testDelegation() throws Exception { diff --git a/analysis/symbol-light-classes/tests/org/jetbrains/kotlin/light/classes/symbol/source/SymbolLightClassesByPsiForSourceTestGenerated.java b/analysis/symbol-light-classes/tests/org/jetbrains/kotlin/light/classes/symbol/source/SymbolLightClassesByPsiForSourceTestGenerated.java index fdbbfac6f4f..1df9160625a 100644 --- a/analysis/symbol-light-classes/tests/org/jetbrains/kotlin/light/classes/symbol/source/SymbolLightClassesByPsiForSourceTestGenerated.java +++ b/analysis/symbol-light-classes/tests/org/jetbrains/kotlin/light/classes/symbol/source/SymbolLightClassesByPsiForSourceTestGenerated.java @@ -264,6 +264,18 @@ public class SymbolLightClassesByPsiForSourceTestGenerated extends AbstractSymbo runTest("compiler/testData/asJava/lightClasses/lightClassByPsi/typeAnnotations.kt"); } + @Test + @TestMetadata("typealiasInAnnotation.kt") + public void testTypealiasInAnnotation() throws Exception { + runTest("compiler/testData/asJava/lightClasses/lightClassByPsi/typealiasInAnnotation.kt"); + } + + @Test + @TestMetadata("typealiasInTypeArguments.kt") + public void testTypealiasInTypeArguments() throws Exception { + runTest("compiler/testData/asJava/lightClasses/lightClassByPsi/typealiasInTypeArguments.kt"); + } + @Test @TestMetadata("unresolvedWithAliasedImport.kt") public void testUnresolvedWithAliasedImport() throws Exception { diff --git a/analysis/symbol-light-classes/tests/org/jetbrains/kotlin/light/classes/symbol/source/SymbolLightClassesParentingForSourceTestGenerated.java b/analysis/symbol-light-classes/tests/org/jetbrains/kotlin/light/classes/symbol/source/SymbolLightClassesParentingForSourceTestGenerated.java index af0cbc088d3..15c34afe439 100644 --- a/analysis/symbol-light-classes/tests/org/jetbrains/kotlin/light/classes/symbol/source/SymbolLightClassesParentingForSourceTestGenerated.java +++ b/analysis/symbol-light-classes/tests/org/jetbrains/kotlin/light/classes/symbol/source/SymbolLightClassesParentingForSourceTestGenerated.java @@ -108,12 +108,6 @@ public class SymbolLightClassesParentingForSourceTestGenerated extends AbstractS runTest("compiler/testData/asJava/lightClasses/lightClassByFqName/DelegatedNested.kt"); } - @Test - @TestMetadata("delegatedProperty.kt") - public void testDelegatedProperty() throws Exception { - runTest("compiler/testData/asJava/lightClasses/delegatedProperty.kt"); - } - @Test @TestMetadata("Delegation.kt") public void testDelegation() throws Exception { diff --git a/compiler/testData/asJava/lightClasses/lightClassByPsi/typealiasInAnnotation.java b/compiler/testData/asJava/lightClasses/lightClassByPsi/typealiasInAnnotation.java new file mode 100644 index 00000000000..8aeae24aa6f --- /dev/null +++ b/compiler/testData/asJava/lightClasses/lightClassByPsi/typealiasInAnnotation.java @@ -0,0 +1,17 @@ +public abstract interface A /* A*/ { +} + +@java.lang.annotation.Retention(value = java.lang.annotation.RetentionPolicy.RUNTIME) +public abstract @interface Ann /* Ann*/ { + public abstract java.lang.Class[] kClass();// kClass() +} + +public abstract interface B /* B*/ { +} + +@Ann(kClass = {A.class, A.class, A.class, B.class, B.class}) +public abstract interface Test /* Test*/ { +} + +public final class TypealiasInAnnotationKt /* TypealiasInAnnotationKt*/ { +} diff --git a/compiler/testData/asJava/lightClasses/lightClassByPsi/typealiasInAnnotation.kt b/compiler/testData/asJava/lightClasses/lightClassByPsi/typealiasInAnnotation.kt new file mode 100644 index 00000000000..1b95c766e91 --- /dev/null +++ b/compiler/testData/asJava/lightClasses/lightClassByPsi/typealiasInAnnotation.kt @@ -0,0 +1,15 @@ +// Test + +import kotlin.reflect.KClass + +interface A +interface B + +typealias OtherA = A +typealias OtherOtherA = OtherA +typealias OtherB = B + +annotation class Ann(vararg val kClass: KClass<*>) + +@Ann(A::class, OtherA::class, OtherOtherA::class, B::class, OtherB::class) +interface Test diff --git a/compiler/testData/asJava/lightClasses/typealiasInTypeArguments.java b/compiler/testData/asJava/lightClasses/lightClassByPsi/typealiasInTypeArguments.java similarity index 71% rename from compiler/testData/asJava/lightClasses/typealiasInTypeArguments.java rename to compiler/testData/asJava/lightClasses/lightClassByPsi/typealiasInTypeArguments.java index e56af175430..7f6faebfee5 100644 --- a/compiler/testData/asJava/lightClasses/typealiasInTypeArguments.java +++ b/compiler/testData/asJava/lightClasses/lightClassByPsi/typealiasInTypeArguments.java @@ -1,3 +1,9 @@ +public abstract interface A /* A*/ { +} + +public abstract interface B /* B*/ { +} + public abstract interface Test /* Test*/ { @org.jetbrains.annotations.NotNull() public abstract A foo();// foo() @@ -11,3 +17,6 @@ public abstract interface Test /* Test*/ { @org.jetbrains.annotations.NotNull() public abstract B> barAliased();// barAliased() } + +public final class TypealiasInTypeArgumentsKt /* TypealiasInTypeArgumentsKt*/ { +} diff --git a/compiler/testData/asJava/lightClasses/typealiasInTypeArguments.kt b/compiler/testData/asJava/lightClasses/lightClassByPsi/typealiasInTypeArguments.kt similarity index 100% rename from compiler/testData/asJava/lightClasses/typealiasInTypeArguments.kt rename to compiler/testData/asJava/lightClasses/lightClassByPsi/typealiasInTypeArguments.kt diff --git a/compiler/tests-gen/org/jetbrains/kotlin/asJava/CompilerLightClassTestGenerated.java b/compiler/tests-gen/org/jetbrains/kotlin/asJava/CompilerLightClassTestGenerated.java index 3b772399959..3e4618dafc4 100644 --- a/compiler/tests-gen/org/jetbrains/kotlin/asJava/CompilerLightClassTestGenerated.java +++ b/compiler/tests-gen/org/jetbrains/kotlin/asJava/CompilerLightClassTestGenerated.java @@ -99,11 +99,6 @@ public class CompilerLightClassTestGenerated extends AbstractCompilerLightClassT runTest("compiler/testData/asJava/lightClasses/lightClassByFqName/DelegatedNested.kt"); } - @TestMetadata("delegatedProperty.kt") - public void testDelegatedProperty() throws Exception { - runTest("compiler/testData/asJava/lightClasses/delegatedProperty.kt"); - } - @TestMetadata("Delegation.kt") public void testDelegation() throws Exception { runTest("compiler/testData/asJava/lightClasses/lightClassByFqName/Delegation.kt");