[AA] Add implementation for annotationApplicableTargets.

Adds implementation and tests for the new
KtClassOrObjectSymbol.annotationApplicableTargets property on
KtSymbolInfoProvider. This implementation delegates to the canonical
implementation in AnnotationChecker for FE1.0, and to the implementation
in FirAnnotationHelpers for FIR.

This change also includes direct tests for annotationApplicableTargets,
and a fix for FirClassLikeSymbol.getAllowedAnnotationTargets in
FirAnnotationHelpers.
This commit is contained in:
Justin Paupore
2023-01-17 20:39:24 -08:00
committed by Ilya Kirillov
parent 3e80433356
commit eccbc66581
26 changed files with 470 additions and 15 deletions
@@ -22,6 +22,8 @@ public abstract class KtSymbolInfoProvider : KtAnalysisSessionComponent() {
public abstract fun getJavaGetterName(symbol: KtPropertySymbol): Name
public abstract fun getJavaSetterName(symbol: KtPropertySymbol): Name?
public abstract fun getAnnotationApplicableTargets(symbol: KtClassOrObjectSymbol): Set<KotlinTarget>?
}
public interface KtSymbolInfoProviderMixIn : KtAnalysisSessionMixIn {
@@ -66,5 +68,5 @@ public interface KtSymbolInfoProviderMixIn : KtAnalysisSessionMixIn {
/** Gets the set of applicable targets for an annotation class symbol. Returns `null` if the symbol is not an annotation class. */
public val KtClassOrObjectSymbol.annotationApplicableTargets: Set<KotlinTarget>?
get() = withValidityAssertion { null /* TODO */ }
get() = withValidityAssertion { analysisSession.symbolInfoProvider.getAnnotationApplicableTargets(this) }
}
@@ -0,0 +1,3 @@
annotation class A()
@<caret>A object Foo
@@ -0,0 +1,6 @@
KtAnnotationEntry: @A
Resolved annotation symbol:
annotation class A
Applicable targets: [ANNOTATION_CLASS, BACKING_FIELD, CLASS, CONSTRUCTOR, FIELD, FUNCTION, LOCAL_VARIABLE, PROPERTY, PROPERTY_GETTER, PROPERTY_SETTER, VALUE_PARAMETER]
@@ -0,0 +1,7 @@
KtAnnotationEntry: @A
Resolved annotation symbol:
@kotlin.annotation.Target(allowedTargets = [])
annotation class A
Applicable targets: []
@@ -0,0 +1,4 @@
@Target()
annotation class A
@<caret>A object Foo
@@ -0,0 +1,7 @@
KtAnnotationEntry: @A
Resolved annotation symbol:
@kotlin.annotation.Target
annotation class A
Applicable targets: []
@@ -0,0 +1,7 @@
KtAnnotationEntry: @A
Resolved annotation symbol:
@kotlin.annotation.Target(allowedTargets = [kotlin.annotation.AnnotationTarget.CLASS, kotlin.annotation.AnnotationTarget.FILE, kotlin.annotation.AnnotationTarget.FUNCTION, kotlin.annotation.AnnotationTarget.PROPERTY_GETTER, kotlin.annotation.AnnotationTarget.PROPERTY_SETTER])
annotation class A
Applicable targets: [CLASS, FILE, FUNCTION, PROPERTY_GETTER, PROPERTY_SETTER]
@@ -0,0 +1,10 @@
// FILE: A.java
import java.lang.annotation.ElementType;
import java.lang.annotation.Target;
@Target({ElementType.TYPE, ElementType.METHOD})
public @interface A {}
// FILE: Foo.kt
@<caret>A object Foo
@@ -0,0 +1,7 @@
KtAnnotationEntry: @A
Resolved annotation symbol:
@kotlin.annotation.Target(allowedTargets = [kotlin.annotation.AnnotationTarget.CLASS, kotlin.annotation.AnnotationTarget.FUNCTION, kotlin.annotation.AnnotationTarget.PROPERTY_GETTER, kotlin.annotation.AnnotationTarget.PROPERTY_SETTER, kotlin.annotation.AnnotationTarget.FILE])
annotation class A
Applicable targets: [CLASS, FILE, FUNCTION, PROPERTY_GETTER, PROPERTY_SETTER]
@@ -0,0 +1,7 @@
import kotlin.annotation.AnnotationTarget
import kotlin.annotation.Target
@Target(AnnotationTarget.CLASS, AnnotationTarget.PROPERTY)
annotation class A
@<caret>A object Foo
@@ -0,0 +1,7 @@
KtAnnotationEntry: @A
Resolved annotation symbol:
@kotlin.annotation.Target(allowedTargets = [kotlin.annotation.AnnotationTarget.CLASS, kotlin.annotation.AnnotationTarget.PROPERTY])
annotation class A
Applicable targets: [CLASS, PROPERTY]
@@ -0,0 +1,3 @@
class A()
@<caret>A object Foo
@@ -0,0 +1,6 @@
KtAnnotationEntry: @A
Resolved annotation symbol:
class A
Applicable targets: <null>
@@ -180,7 +180,7 @@ KtNamedClassOrObjectSymbol:
typeParameters: []
visibility: Public
getContainingModule: KtSourceModule "Sources of main"
annotationApplicableTargets: null
annotationApplicableTargets: [CLASS, ANNOTATION_CLASS, PROPERTY, FIELD, LOCAL_VARIABLE, VALUE_PARAMETER, CONSTRUCTOR, FUNCTION, PROPERTY_GETTER, PROPERTY_SETTER, BACKING_FIELD]
deprecationStatus: null
KtFunctionSymbol:
@@ -180,7 +180,7 @@ KtNamedClassOrObjectSymbol:
typeParameters: []
visibility: Public
getContainingModule: KtSourceModule "Sources of main"
annotationApplicableTargets: null
annotationApplicableTargets: [CLASS, ANNOTATION_CLASS, PROPERTY, FIELD, LOCAL_VARIABLE, VALUE_PARAMETER, CONSTRUCTOR, FUNCTION, PROPERTY_GETTER, PROPERTY_SETTER, BACKING_FIELD]
deprecationStatus: null
KtFunctionSymbol:
@@ -22,7 +22,7 @@ KtNamedClassOrObjectSymbol:
typeParameters: []
visibility: Public
getContainingModule: KtSourceModule "Sources of main"
annotationApplicableTargets: null
annotationApplicableTargets: [TYPE]
deprecationStatus: null
KtNamedClassOrObjectSymbol:
@@ -49,7 +49,7 @@ KtNamedClassOrObjectSymbol:
typeParameters: []
visibility: Public
getContainingModule: KtSourceModule "Sources of main"
annotationApplicableTargets: null
annotationApplicableTargets: [TYPE]
deprecationStatus: null
KtNamedClassOrObjectSymbol:
@@ -76,7 +76,7 @@ KtNamedClassOrObjectSymbol:
typeParameters: []
visibility: Public
getContainingModule: KtSourceModule "Sources of main"
annotationApplicableTargets: null
annotationApplicableTargets: [TYPE]
deprecationStatus: null
KtNamedClassOrObjectSymbol:
@@ -103,7 +103,7 @@ KtNamedClassOrObjectSymbol:
typeParameters: []
visibility: Public
getContainingModule: KtSourceModule "Sources of main"
annotationApplicableTargets: null
annotationApplicableTargets: [TYPE]
deprecationStatus: null
KtNamedClassOrObjectSymbol:
@@ -22,7 +22,7 @@ KtNamedClassOrObjectSymbol:
typeParameters: []
visibility: Public
getContainingModule: KtSourceModule "Sources of main"
annotationApplicableTargets: null
annotationApplicableTargets: [TYPE]
deprecationStatus: null
KtNamedClassOrObjectSymbol:
@@ -49,7 +49,7 @@ KtNamedClassOrObjectSymbol:
typeParameters: []
visibility: Public
getContainingModule: KtSourceModule "Sources of main"
annotationApplicableTargets: null
annotationApplicableTargets: [TYPE]
deprecationStatus: null
KtNamedClassOrObjectSymbol:
@@ -76,7 +76,7 @@ KtNamedClassOrObjectSymbol:
typeParameters: []
visibility: Public
getContainingModule: KtSourceModule "Sources of main"
annotationApplicableTargets: null
annotationApplicableTargets: [TYPE]
deprecationStatus: null
KtNamedClassOrObjectSymbol:
@@ -103,7 +103,7 @@ KtNamedClassOrObjectSymbol:
typeParameters: []
visibility: Public
getContainingModule: KtSourceModule "Sources of main"
annotationApplicableTargets: null
annotationApplicableTargets: [TYPE]
deprecationStatus: null
KtNamedClassOrObjectSymbol: