[AA] Unwrap type aliases in annotation arguments

^KT-55782 Fixed
This commit is contained in:
Dmitriy Novozhilov
2022-10-03 18:02:35 +03:00
committed by Space Team
parent 34af013913
commit 16b72d3e54
12 changed files with 72 additions and 30 deletions
@@ -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<String?>()
@@ -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 {
@@ -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 {
@@ -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 {
@@ -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 {
@@ -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 {
@@ -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 {
@@ -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*/<T, R> {
}
@Ann(kClass = {A.class, A.class, A.class, B.class, B.class})
public abstract interface Test /* Test*/ {
}
public final class TypealiasInAnnotationKt /* TypealiasInAnnotationKt*/ {
}
@@ -0,0 +1,15 @@
// Test
import kotlin.reflect.KClass
interface A
interface B<T, R>
typealias OtherA = A
typealias OtherOtherA = OtherA
typealias OtherB<X, Y> = B<Y, X>
annotation class Ann(vararg val kClass: KClass<*>)
@Ann(A::class, OtherA::class, OtherOtherA::class, B::class, OtherB::class)
interface Test
@@ -1,3 +1,9 @@
public abstract interface A /* A*/ {
}
public abstract interface B /* B*/<T, R> {
}
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<A, B<A, java.lang.String>> barAliased();// barAliased()
}
public final class TypealiasInTypeArgumentsKt /* TypealiasInTypeArgumentsKt*/ {
}
@@ -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");