[AA] introduce AnnotationUseSiteTargetFilter to simplify API
^KT-56046
This commit is contained in:
committed by
Space Team
parent
6e25b45f7d
commit
93232a23df
+10
-9
@@ -5,6 +5,7 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.analysis.api.descriptors.annotations
|
package org.jetbrains.kotlin.analysis.api.descriptors.annotations
|
||||||
|
|
||||||
|
import org.jetbrains.kotlin.analysis.api.annotations.AnnotationUseSiteTargetFilter
|
||||||
import org.jetbrains.kotlin.analysis.api.annotations.KtAnnotationApplicationInfo
|
import org.jetbrains.kotlin.analysis.api.annotations.KtAnnotationApplicationInfo
|
||||||
import org.jetbrains.kotlin.analysis.api.annotations.KtAnnotationApplicationWithArgumentsInfo
|
import org.jetbrains.kotlin.analysis.api.annotations.KtAnnotationApplicationWithArgumentsInfo
|
||||||
import org.jetbrains.kotlin.analysis.api.annotations.KtAnnotationsList
|
import org.jetbrains.kotlin.analysis.api.annotations.KtAnnotationsList
|
||||||
@@ -12,10 +13,10 @@ import org.jetbrains.kotlin.analysis.api.descriptors.Fe10AnalysisContext
|
|||||||
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.base.maybeLocalClassId
|
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.base.maybeLocalClassId
|
||||||
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.base.toKtAnnotationApplication
|
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.base.toKtAnnotationApplication
|
||||||
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.base.toKtAnnotationInfo
|
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.base.toKtAnnotationInfo
|
||||||
|
import org.jetbrains.kotlin.analysis.api.descriptors.symbols.descriptorBased.base.useSiteTarget
|
||||||
import org.jetbrains.kotlin.analysis.api.impl.base.annotations.KtEmptyAnnotationsList
|
import org.jetbrains.kotlin.analysis.api.impl.base.annotations.KtEmptyAnnotationsList
|
||||||
import org.jetbrains.kotlin.analysis.api.lifetime.KtLifetimeToken
|
import org.jetbrains.kotlin.analysis.api.lifetime.KtLifetimeToken
|
||||||
import org.jetbrains.kotlin.analysis.api.lifetime.withValidityAssertion
|
import org.jetbrains.kotlin.analysis.api.lifetime.withValidityAssertion
|
||||||
import org.jetbrains.kotlin.descriptors.annotations.AnnotationUseSiteTarget
|
|
||||||
import org.jetbrains.kotlin.descriptors.annotations.Annotations
|
import org.jetbrains.kotlin.descriptors.annotations.Annotations
|
||||||
import org.jetbrains.kotlin.name.ClassId
|
import org.jetbrains.kotlin.name.ClassId
|
||||||
import org.jetbrains.kotlin.resolve.descriptorUtil.annotationClass
|
import org.jetbrains.kotlin.resolve.descriptorUtil.annotationClass
|
||||||
@@ -63,21 +64,21 @@ internal class KtFe10AnnotationsList private constructor(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun hasAnnotation(classId: ClassId): Boolean = withValidityAssertion {
|
override fun hasAnnotation(classId: ClassId, useSiteTargetFilter: AnnotationUseSiteTargetFilter): Boolean = withValidityAssertion {
|
||||||
fe10Annotations.hasAnnotation(classId.asSingleFqName())
|
fe10Annotations.hasAnnotation(classId.asSingleFqName())
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun hasAnnotation(
|
override fun annotationsByClassId(
|
||||||
classId: ClassId,
|
classId: ClassId,
|
||||||
useSiteTarget: AnnotationUseSiteTarget?,
|
useSiteTargetFilter: AnnotationUseSiteTargetFilter,
|
||||||
acceptAnnotationsWithoutUseSite: Boolean,
|
): List<KtAnnotationApplicationWithArgumentsInfo> = withValidityAssertion {
|
||||||
): Boolean = hasAnnotation(classId)
|
|
||||||
|
|
||||||
override fun annotationsByClassId(classId: ClassId): List<KtAnnotationApplicationWithArgumentsInfo> = withValidityAssertion {
|
|
||||||
if (classId in annotationsToIgnore) return@withValidityAssertion emptyList()
|
if (classId in annotationsToIgnore) return@withValidityAssertion emptyList()
|
||||||
|
|
||||||
fe10Annotations.mapIndexedNotNull { index, annotation ->
|
fe10Annotations.mapIndexedNotNull { index, annotation ->
|
||||||
if (annotation.annotationClass?.maybeLocalClassId != classId) return@mapIndexedNotNull null
|
if (!useSiteTargetFilter.isAllowed(annotation.useSiteTarget) || annotation.annotationClass?.maybeLocalClassId != classId) {
|
||||||
|
return@mapIndexedNotNull null
|
||||||
|
}
|
||||||
|
|
||||||
annotation.toKtAnnotationApplication(analysisContext, index)
|
annotation.toKtAnnotationApplication(analysisContext, index)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-1
@@ -630,7 +630,7 @@ internal fun AnnotationDescriptor.toKtAnnotationInfo(index: Int): KtAnnotationAp
|
|||||||
|
|
||||||
private val AnnotationDescriptor.psi: KtCallElement? get() = (source as? PsiSourceElement)?.psi as? KtCallElement
|
private val AnnotationDescriptor.psi: KtCallElement? get() = (source as? PsiSourceElement)?.psi as? KtCallElement
|
||||||
private val AnnotationDescriptor.classIdIfNonLocal: ClassId? get() = annotationClass?.maybeLocalClassId
|
private val AnnotationDescriptor.classIdIfNonLocal: ClassId? get() = annotationClass?.maybeLocalClassId
|
||||||
private val AnnotationDescriptor.useSiteTarget: AnnotationUseSiteTarget?
|
internal val AnnotationDescriptor.useSiteTarget: AnnotationUseSiteTarget?
|
||||||
get() = (this as? LazyAnnotationDescriptor)?.annotationEntry?.useSiteTarget?.getAnnotationUseSiteTarget()
|
get() = (this as? LazyAnnotationDescriptor)?.annotationEntry?.useSiteTarget?.getAnnotationUseSiteTarget()
|
||||||
|
|
||||||
internal fun AnnotationDescriptor.getKtNamedAnnotationArguments(analysisContext: Fe10AnalysisContext): List<KtNamedAnnotationValue> =
|
internal fun AnnotationDescriptor.getKtNamedAnnotationArguments(analysisContext: Fe10AnalysisContext): List<KtNamedAnnotationValue> =
|
||||||
|
|||||||
+9
-14
@@ -5,13 +5,13 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.analysis.api.fir.annotations
|
package org.jetbrains.kotlin.analysis.api.fir.annotations
|
||||||
|
|
||||||
|
import org.jetbrains.kotlin.analysis.api.annotations.AnnotationUseSiteTargetFilter
|
||||||
import org.jetbrains.kotlin.analysis.api.annotations.KtAnnotationApplicationInfo
|
import org.jetbrains.kotlin.analysis.api.annotations.KtAnnotationApplicationInfo
|
||||||
import org.jetbrains.kotlin.analysis.api.annotations.KtAnnotationApplicationWithArgumentsInfo
|
import org.jetbrains.kotlin.analysis.api.annotations.KtAnnotationApplicationWithArgumentsInfo
|
||||||
import org.jetbrains.kotlin.analysis.api.annotations.KtAnnotationsList
|
import org.jetbrains.kotlin.analysis.api.annotations.KtAnnotationsList
|
||||||
import org.jetbrains.kotlin.analysis.api.impl.base.annotations.KtEmptyAnnotationsList
|
import org.jetbrains.kotlin.analysis.api.impl.base.annotations.KtEmptyAnnotationsList
|
||||||
import org.jetbrains.kotlin.analysis.api.lifetime.KtLifetimeToken
|
import org.jetbrains.kotlin.analysis.api.lifetime.KtLifetimeToken
|
||||||
import org.jetbrains.kotlin.analysis.api.lifetime.withValidityAssertion
|
import org.jetbrains.kotlin.analysis.api.lifetime.withValidityAssertion
|
||||||
import org.jetbrains.kotlin.descriptors.annotations.AnnotationUseSiteTarget
|
|
||||||
import org.jetbrains.kotlin.fir.FirSession
|
import org.jetbrains.kotlin.fir.FirSession
|
||||||
import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
|
import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
|
||||||
import org.jetbrains.kotlin.name.ClassId
|
import org.jetbrains.kotlin.name.ClassId
|
||||||
@@ -31,20 +31,15 @@ internal class KtFirAnnotationListForDeclaration private constructor(
|
|||||||
annotationInfos(firSymbol, useSiteSession)
|
annotationInfos(firSymbol, useSiteSession)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun hasAnnotation(
|
override fun hasAnnotation(classId: ClassId, useSiteTargetFilter: AnnotationUseSiteTargetFilter): Boolean = withValidityAssertion {
|
||||||
|
hasAnnotation(firSymbol, classId, useSiteTargetFilter, useSiteSession)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun annotationsByClassId(
|
||||||
classId: ClassId,
|
classId: ClassId,
|
||||||
useSiteTarget: AnnotationUseSiteTarget?,
|
useSiteTargetFilter: AnnotationUseSiteTargetFilter,
|
||||||
acceptAnnotationsWithoutUseSite: Boolean,
|
): List<KtAnnotationApplicationWithArgumentsInfo> = withValidityAssertion {
|
||||||
): Boolean = withValidityAssertion {
|
annotationsByClassId(firSymbol, classId, useSiteTargetFilter, useSiteSession)
|
||||||
hasAnnotation(firSymbol, classId, useSiteSession, useSiteTarget, acceptAnnotationsWithoutUseSite)
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun hasAnnotation(classId: ClassId): Boolean = withValidityAssertion {
|
|
||||||
hasAnnotation(firSymbol, classId, useSiteSession)
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun annotationsByClassId(classId: ClassId): List<KtAnnotationApplicationWithArgumentsInfo> = withValidityAssertion {
|
|
||||||
annotationsByClassId(firSymbol, classId, useSiteSession)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override val annotationClassIds: Collection<ClassId>
|
override val annotationClassIds: Collection<ClassId>
|
||||||
|
|||||||
+9
-14
@@ -5,13 +5,13 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.analysis.api.fir.annotations
|
package org.jetbrains.kotlin.analysis.api.fir.annotations
|
||||||
|
|
||||||
|
import org.jetbrains.kotlin.analysis.api.annotations.AnnotationUseSiteTargetFilter
|
||||||
import org.jetbrains.kotlin.analysis.api.annotations.KtAnnotationApplicationInfo
|
import org.jetbrains.kotlin.analysis.api.annotations.KtAnnotationApplicationInfo
|
||||||
import org.jetbrains.kotlin.analysis.api.annotations.KtAnnotationApplicationWithArgumentsInfo
|
import org.jetbrains.kotlin.analysis.api.annotations.KtAnnotationApplicationWithArgumentsInfo
|
||||||
import org.jetbrains.kotlin.analysis.api.annotations.KtAnnotationsList
|
import org.jetbrains.kotlin.analysis.api.annotations.KtAnnotationsList
|
||||||
import org.jetbrains.kotlin.analysis.api.impl.base.annotations.KtEmptyAnnotationsList
|
import org.jetbrains.kotlin.analysis.api.impl.base.annotations.KtEmptyAnnotationsList
|
||||||
import org.jetbrains.kotlin.analysis.api.lifetime.KtLifetimeToken
|
import org.jetbrains.kotlin.analysis.api.lifetime.KtLifetimeToken
|
||||||
import org.jetbrains.kotlin.analysis.api.lifetime.withValidityAssertion
|
import org.jetbrains.kotlin.analysis.api.lifetime.withValidityAssertion
|
||||||
import org.jetbrains.kotlin.descriptors.annotations.AnnotationUseSiteTarget
|
|
||||||
import org.jetbrains.kotlin.fir.FirAnnotationContainer
|
import org.jetbrains.kotlin.fir.FirAnnotationContainer
|
||||||
import org.jetbrains.kotlin.fir.FirSession
|
import org.jetbrains.kotlin.fir.FirSession
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol
|
||||||
@@ -33,20 +33,15 @@ internal class KtFirAnnotationListForReceiverParameter private constructor(
|
|||||||
annotationInfos(firCallableSymbol, useSiteSession, receiverParameter)
|
annotationInfos(firCallableSymbol, useSiteSession, receiverParameter)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun hasAnnotation(
|
override fun hasAnnotation(classId: ClassId, useSiteTargetFilter: AnnotationUseSiteTargetFilter): Boolean = withValidityAssertion {
|
||||||
|
hasAnnotation(firCallableSymbol, classId, useSiteTargetFilter, useSiteSession, receiverParameter)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun annotationsByClassId(
|
||||||
classId: ClassId,
|
classId: ClassId,
|
||||||
useSiteTarget: AnnotationUseSiteTarget?,
|
useSiteTargetFilter: AnnotationUseSiteTargetFilter,
|
||||||
acceptAnnotationsWithoutUseSite: Boolean,
|
): List<KtAnnotationApplicationWithArgumentsInfo> = withValidityAssertion {
|
||||||
): Boolean = withValidityAssertion {
|
annotationsByClassId(firCallableSymbol, classId, useSiteTargetFilter, useSiteSession, receiverParameter)
|
||||||
hasAnnotation(firCallableSymbol, classId, useSiteSession, useSiteTarget, acceptAnnotationsWithoutUseSite, receiverParameter)
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun hasAnnotation(classId: ClassId): Boolean = withValidityAssertion {
|
|
||||||
hasAnnotation(firCallableSymbol, classId, useSiteSession, receiverParameter)
|
|
||||||
}
|
|
||||||
|
|
||||||
override fun annotationsByClassId(classId: ClassId): List<KtAnnotationApplicationWithArgumentsInfo> = withValidityAssertion {
|
|
||||||
annotationsByClassId(firCallableSymbol, classId, useSiteSession, receiverParameter)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override val annotationClassIds: Collection<ClassId>
|
override val annotationClassIds: Collection<ClassId>
|
||||||
|
|||||||
+11
-15
@@ -5,6 +5,7 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.analysis.api.fir.annotations
|
package org.jetbrains.kotlin.analysis.api.fir.annotations
|
||||||
|
|
||||||
|
import org.jetbrains.kotlin.analysis.api.annotations.AnnotationUseSiteTargetFilter
|
||||||
import org.jetbrains.kotlin.analysis.api.annotations.KtAnnotationApplicationInfo
|
import org.jetbrains.kotlin.analysis.api.annotations.KtAnnotationApplicationInfo
|
||||||
import org.jetbrains.kotlin.analysis.api.annotations.KtAnnotationApplicationWithArgumentsInfo
|
import org.jetbrains.kotlin.analysis.api.annotations.KtAnnotationApplicationWithArgumentsInfo
|
||||||
import org.jetbrains.kotlin.analysis.api.annotations.KtAnnotationsList
|
import org.jetbrains.kotlin.analysis.api.annotations.KtAnnotationsList
|
||||||
@@ -13,10 +14,8 @@ import org.jetbrains.kotlin.analysis.api.fir.toKtAnnotationInfo
|
|||||||
import org.jetbrains.kotlin.analysis.api.impl.base.annotations.KtEmptyAnnotationsList
|
import org.jetbrains.kotlin.analysis.api.impl.base.annotations.KtEmptyAnnotationsList
|
||||||
import org.jetbrains.kotlin.analysis.api.lifetime.KtLifetimeToken
|
import org.jetbrains.kotlin.analysis.api.lifetime.KtLifetimeToken
|
||||||
import org.jetbrains.kotlin.analysis.api.lifetime.withValidityAssertion
|
import org.jetbrains.kotlin.analysis.api.lifetime.withValidityAssertion
|
||||||
import org.jetbrains.kotlin.descriptors.annotations.AnnotationUseSiteTarget
|
|
||||||
import org.jetbrains.kotlin.fir.FirSession
|
import org.jetbrains.kotlin.fir.FirSession
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirResolvePhase
|
import org.jetbrains.kotlin.fir.declarations.FirResolvePhase
|
||||||
import org.jetbrains.kotlin.fir.declarations.hasAnnotation
|
|
||||||
import org.jetbrains.kotlin.fir.declarations.toAnnotationClassId
|
import org.jetbrains.kotlin.fir.declarations.toAnnotationClassId
|
||||||
import org.jetbrains.kotlin.fir.expressions.FirAnnotation
|
import org.jetbrains.kotlin.fir.expressions.FirAnnotation
|
||||||
import org.jetbrains.kotlin.fir.symbols.resolvedAnnotationsWithArguments
|
import org.jetbrains.kotlin.fir.symbols.resolvedAnnotationsWithArguments
|
||||||
@@ -45,24 +44,21 @@ internal class KtFirAnnotationListForType private constructor(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun hasAnnotation(
|
override fun hasAnnotation(classId: ClassId, useSiteTargetFilter: AnnotationUseSiteTargetFilter): Boolean = withValidityAssertion {
|
||||||
classId: ClassId,
|
|
||||||
useSiteTarget: AnnotationUseSiteTarget?,
|
|
||||||
acceptAnnotationsWithoutUseSite: Boolean,
|
|
||||||
): Boolean = withValidityAssertion {
|
|
||||||
coneType.customAnnotationsWithLazyResolve(FirResolvePhase.TYPES).any {
|
coneType.customAnnotationsWithLazyResolve(FirResolvePhase.TYPES).any {
|
||||||
(it.useSiteTarget == useSiteTarget || acceptAnnotationsWithoutUseSite && it.useSiteTarget == null) &&
|
useSiteTargetFilter.isAllowed(it.useSiteTarget) && it.toAnnotationClassId(useSiteSession) == classId
|
||||||
it.toAnnotationClassId(useSiteSession) == classId
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun hasAnnotation(classId: ClassId): Boolean = withValidityAssertion {
|
override fun annotationsByClassId(
|
||||||
coneType.customAnnotationsWithLazyResolve(FirResolvePhase.TYPES).hasAnnotation(classId, useSiteSession)
|
classId: ClassId,
|
||||||
}
|
useSiteTargetFilter: AnnotationUseSiteTargetFilter,
|
||||||
|
): List<KtAnnotationApplicationWithArgumentsInfo> = withValidityAssertion {
|
||||||
override fun annotationsByClassId(classId: ClassId): List<KtAnnotationApplicationWithArgumentsInfo> = withValidityAssertion {
|
|
||||||
coneType.customAnnotationsWithLazyResolve(FirResolvePhase.ANNOTATIONS_ARGUMENTS_MAPPING).mapIndexedNotNull { index, annotation ->
|
coneType.customAnnotationsWithLazyResolve(FirResolvePhase.ANNOTATIONS_ARGUMENTS_MAPPING).mapIndexedNotNull { index, annotation ->
|
||||||
if (annotation.toAnnotationClassId(useSiteSession) != classId) return@mapIndexedNotNull null
|
if (!useSiteTargetFilter.isAllowed(annotation.useSiteTarget) || annotation.toAnnotationClassId(useSiteSession) != classId) {
|
||||||
|
return@mapIndexedNotNull null
|
||||||
|
}
|
||||||
|
|
||||||
annotation.toKtAnnotationApplication(useSiteSession, index)
|
annotation.toKtAnnotationApplication(useSiteSession, index)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+17
-22
@@ -5,6 +5,7 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.analysis.api.fir.annotations
|
package org.jetbrains.kotlin.analysis.api.fir.annotations
|
||||||
|
|
||||||
|
import org.jetbrains.kotlin.analysis.api.annotations.AnnotationUseSiteTargetFilter
|
||||||
import org.jetbrains.kotlin.analysis.api.annotations.KtAnnotationApplicationInfo
|
import org.jetbrains.kotlin.analysis.api.annotations.KtAnnotationApplicationInfo
|
||||||
import org.jetbrains.kotlin.analysis.api.annotations.KtAnnotationApplicationWithArgumentsInfo
|
import org.jetbrains.kotlin.analysis.api.annotations.KtAnnotationApplicationWithArgumentsInfo
|
||||||
import org.jetbrains.kotlin.analysis.api.fir.toKtAnnotationApplication
|
import org.jetbrains.kotlin.analysis.api.fir.toKtAnnotationApplication
|
||||||
@@ -12,10 +13,12 @@ import org.jetbrains.kotlin.analysis.api.fir.toKtAnnotationInfo
|
|||||||
import org.jetbrains.kotlin.analysis.low.level.api.fir.util.withFirEntry
|
import org.jetbrains.kotlin.analysis.low.level.api.fir.util.withFirEntry
|
||||||
import org.jetbrains.kotlin.analysis.utils.errors.checkWithAttachmentBuilder
|
import org.jetbrains.kotlin.analysis.utils.errors.checkWithAttachmentBuilder
|
||||||
import org.jetbrains.kotlin.analysis.utils.errors.withClassEntry
|
import org.jetbrains.kotlin.analysis.utils.errors.withClassEntry
|
||||||
import org.jetbrains.kotlin.descriptors.annotations.AnnotationUseSiteTarget
|
|
||||||
import org.jetbrains.kotlin.fir.FirAnnotationContainer
|
import org.jetbrains.kotlin.fir.FirAnnotationContainer
|
||||||
import org.jetbrains.kotlin.fir.FirSession
|
import org.jetbrains.kotlin.fir.FirSession
|
||||||
import org.jetbrains.kotlin.fir.declarations.*
|
import org.jetbrains.kotlin.fir.declarations.FirResolvePhase
|
||||||
|
import org.jetbrains.kotlin.fir.declarations.resolved
|
||||||
|
import org.jetbrains.kotlin.fir.declarations.toAnnotationClassId
|
||||||
|
import org.jetbrains.kotlin.fir.declarations.toAnnotationClassIdSafe
|
||||||
import org.jetbrains.kotlin.fir.expressions.FirAnnotation
|
import org.jetbrains.kotlin.fir.expressions.FirAnnotation
|
||||||
import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
|
import org.jetbrains.kotlin.fir.expressions.FirAnnotationCall
|
||||||
import org.jetbrains.kotlin.fir.expressions.FirExpression
|
import org.jetbrains.kotlin.fir.expressions.FirExpression
|
||||||
@@ -43,17 +46,24 @@ internal fun mapAnnotationParameters(annotation: FirAnnotation): Map<Name, FirEx
|
|||||||
internal fun annotationsByClassId(
|
internal fun annotationsByClassId(
|
||||||
firSymbol: FirBasedSymbol<*>,
|
firSymbol: FirBasedSymbol<*>,
|
||||||
classId: ClassId,
|
classId: ClassId,
|
||||||
|
useSiteTargetFilter: AnnotationUseSiteTargetFilter,
|
||||||
useSiteSession: FirSession,
|
useSiteSession: FirSession,
|
||||||
annotationContainer: FirAnnotationContainer = firSymbol.fir,
|
annotationContainer: FirAnnotationContainer = firSymbol.fir,
|
||||||
): List<KtAnnotationApplicationWithArgumentsInfo> =
|
): List<KtAnnotationApplicationWithArgumentsInfo> =
|
||||||
if (firSymbol.isFromCompilerRequiredAnnotationsPhase(classId)) {
|
if (firSymbol.isFromCompilerRequiredAnnotationsPhase(classId)) {
|
||||||
annotationContainer.resolvedCompilerRequiredAnnotations(firSymbol).mapIndexedNotNull { index, annotation ->
|
annotationContainer.resolvedCompilerRequiredAnnotations(firSymbol).mapIndexedNotNull { index, annotation ->
|
||||||
if (annotation.toAnnotationClassIdSafe(useSiteSession) != classId) return@mapIndexedNotNull null
|
if (!useSiteTargetFilter.isAllowed(annotation.useSiteTarget) || annotation.toAnnotationClassIdSafe(useSiteSession) != classId) {
|
||||||
|
return@mapIndexedNotNull null
|
||||||
|
}
|
||||||
|
|
||||||
annotation.toKtAnnotationApplication(useSiteSession, index)
|
annotation.toKtAnnotationApplication(useSiteSession, index)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
annotationContainer.resolvedAnnotationsWithArguments(firSymbol).mapIndexedNotNull { index, annotation ->
|
annotationContainer.resolvedAnnotationsWithArguments(firSymbol).mapIndexedNotNull { index, annotation ->
|
||||||
if (annotation.toAnnotationClassId(useSiteSession) != classId) return@mapIndexedNotNull null
|
if (!useSiteTargetFilter.isAllowed(annotation.useSiteTarget) || annotation.toAnnotationClassId(useSiteSession) != classId) {
|
||||||
|
return@mapIndexedNotNull null
|
||||||
|
}
|
||||||
|
|
||||||
annotation.toKtAnnotationApplication(useSiteSession, index)
|
annotation.toKtAnnotationApplication(useSiteSession, index)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -86,34 +96,19 @@ internal fun annotationClassIds(
|
|||||||
internal fun hasAnnotation(
|
internal fun hasAnnotation(
|
||||||
firSymbol: FirBasedSymbol<*>,
|
firSymbol: FirBasedSymbol<*>,
|
||||||
classId: ClassId,
|
classId: ClassId,
|
||||||
|
useSiteTargetFilter: AnnotationUseSiteTargetFilter,
|
||||||
useSiteSession: FirSession,
|
useSiteSession: FirSession,
|
||||||
useSiteTarget: AnnotationUseSiteTarget?,
|
|
||||||
acceptAnnotationsWithoutUseSite: Boolean,
|
|
||||||
annotationContainer: FirAnnotationContainer = firSymbol.fir,
|
annotationContainer: FirAnnotationContainer = firSymbol.fir,
|
||||||
): Boolean =
|
): Boolean =
|
||||||
if (firSymbol.isFromCompilerRequiredAnnotationsPhase(classId)) {
|
if (firSymbol.isFromCompilerRequiredAnnotationsPhase(classId)) {
|
||||||
annotationContainer.resolvedCompilerRequiredAnnotations(firSymbol).any {
|
annotationContainer.resolvedCompilerRequiredAnnotations(firSymbol).any {
|
||||||
(it.useSiteTarget == useSiteTarget || acceptAnnotationsWithoutUseSite && it.useSiteTarget == null) &&
|
useSiteTargetFilter.isAllowed(it.useSiteTarget) && it.toAnnotationClassIdSafe(useSiteSession) == classId
|
||||||
it.toAnnotationClassIdSafe(useSiteSession) == classId
|
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
annotationContainer.resolvedAnnotationsWithClassIds(firSymbol).any {
|
annotationContainer.resolvedAnnotationsWithClassIds(firSymbol).any {
|
||||||
(it.useSiteTarget == useSiteTarget || acceptAnnotationsWithoutUseSite && it.useSiteTarget == null) &&
|
useSiteTargetFilter.isAllowed(it.useSiteTarget) && it.toAnnotationClassId(useSiteSession) == classId
|
||||||
it.toAnnotationClassId(useSiteSession) == classId
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
internal fun hasAnnotation(
|
|
||||||
firSymbol: FirBasedSymbol<*>,
|
|
||||||
classId: ClassId,
|
|
||||||
useSiteSession: FirSession,
|
|
||||||
annotationContainer: FirAnnotationContainer = firSymbol.fir,
|
|
||||||
): Boolean =
|
|
||||||
if (firSymbol.isFromCompilerRequiredAnnotationsPhase(classId)) {
|
|
||||||
annotationContainer.resolvedCompilerRequiredAnnotations(firSymbol).hasAnnotationSafe(classId, useSiteSession)
|
|
||||||
} else {
|
|
||||||
annotationContainer.resolvedAnnotationsWithClassIds(firSymbol).hasAnnotation(classId, useSiteSession)
|
|
||||||
}
|
|
||||||
|
|
||||||
private fun FirBasedSymbol<*>.isFromCompilerRequiredAnnotationsPhase(classId: ClassId): Boolean =
|
private fun FirBasedSymbol<*>.isFromCompilerRequiredAnnotationsPhase(classId: ClassId): Boolean =
|
||||||
fir.resolvePhase < FirResolvePhase.TYPES && classId in CompilerRequiredAnnotationsHelper.REQUIRED_ANNOTATIONS
|
fir.resolvePhase < FirResolvePhase.TYPES && classId in CompilerRequiredAnnotationsHelper.REQUIRED_ANNOTATIONS
|
||||||
+6
-8
@@ -5,12 +5,12 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.analysis.api.impl.base.annotations
|
package org.jetbrains.kotlin.analysis.api.impl.base.annotations
|
||||||
|
|
||||||
|
import org.jetbrains.kotlin.analysis.api.annotations.AnnotationUseSiteTargetFilter
|
||||||
import org.jetbrains.kotlin.analysis.api.annotations.KtAnnotationApplicationInfo
|
import org.jetbrains.kotlin.analysis.api.annotations.KtAnnotationApplicationInfo
|
||||||
import org.jetbrains.kotlin.analysis.api.annotations.KtAnnotationApplicationWithArgumentsInfo
|
import org.jetbrains.kotlin.analysis.api.annotations.KtAnnotationApplicationWithArgumentsInfo
|
||||||
import org.jetbrains.kotlin.analysis.api.annotations.KtAnnotationsList
|
import org.jetbrains.kotlin.analysis.api.annotations.KtAnnotationsList
|
||||||
import org.jetbrains.kotlin.analysis.api.lifetime.KtLifetimeToken
|
import org.jetbrains.kotlin.analysis.api.lifetime.KtLifetimeToken
|
||||||
import org.jetbrains.kotlin.analysis.api.lifetime.withValidityAssertion
|
import org.jetbrains.kotlin.analysis.api.lifetime.withValidityAssertion
|
||||||
import org.jetbrains.kotlin.descriptors.annotations.AnnotationUseSiteTarget
|
|
||||||
import org.jetbrains.kotlin.name.ClassId
|
import org.jetbrains.kotlin.name.ClassId
|
||||||
|
|
||||||
class KtEmptyAnnotationsList(override val token: KtLifetimeToken) : KtAnnotationsList() {
|
class KtEmptyAnnotationsList(override val token: KtLifetimeToken) : KtAnnotationsList() {
|
||||||
@@ -20,15 +20,13 @@ class KtEmptyAnnotationsList(override val token: KtLifetimeToken) : KtAnnotation
|
|||||||
|
|
||||||
override fun hasAnnotation(
|
override fun hasAnnotation(
|
||||||
classId: ClassId,
|
classId: ClassId,
|
||||||
useSiteTarget: AnnotationUseSiteTarget?,
|
useSiteTargetFilter: AnnotationUseSiteTargetFilter,
|
||||||
acceptAnnotationsWithoutUseSite: Boolean,
|
|
||||||
): Boolean = withValidityAssertion { false }
|
): Boolean = withValidityAssertion { false }
|
||||||
|
|
||||||
override fun hasAnnotation(classId: ClassId): Boolean = withValidityAssertion { false }
|
override fun annotationsByClassId(
|
||||||
|
classId: ClassId,
|
||||||
override fun annotationsByClassId(classId: ClassId): List<KtAnnotationApplicationWithArgumentsInfo> = withValidityAssertion {
|
useSiteTargetFilter: AnnotationUseSiteTargetFilter,
|
||||||
emptyList()
|
): List<KtAnnotationApplicationWithArgumentsInfo> = withValidityAssertion { emptyList() }
|
||||||
}
|
|
||||||
|
|
||||||
override val annotationClassIds: Collection<ClassId> get() = withValidityAssertion { emptyList() }
|
override val annotationClassIds: Collection<ClassId> get() = withValidityAssertion { emptyList() }
|
||||||
}
|
}
|
||||||
|
|||||||
+71
@@ -0,0 +1,71 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2010-2023 JetBrains s.r.o. and Kotlin Programming Language contributors.
|
||||||
|
* Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.jetbrains.kotlin.analysis.api.annotations
|
||||||
|
|
||||||
|
import org.jetbrains.kotlin.descriptors.annotations.AnnotationUseSiteTarget
|
||||||
|
|
||||||
|
public fun interface AnnotationUseSiteTargetFilter {
|
||||||
|
public fun isAllowed(useSiteTarget: AnnotationUseSiteTarget?): Boolean
|
||||||
|
}
|
||||||
|
|
||||||
|
public fun AnnotationUseSiteTarget?.toFilter(): AnnotationUseSiteTargetFilter = when (this) {
|
||||||
|
null -> NullAnnotationUseSiteTargetFilter
|
||||||
|
AnnotationUseSiteTarget.FIELD -> FieldAnnotationUseSiteTargetFilter
|
||||||
|
AnnotationUseSiteTarget.FILE -> FileAnnotationUseSiteTargetFilter
|
||||||
|
AnnotationUseSiteTarget.PROPERTY -> PropertyAnnotationUseSiteTargetFilter
|
||||||
|
AnnotationUseSiteTarget.PROPERTY_GETTER -> PropertyGetterAnnotationUseSiteTargetFilter
|
||||||
|
AnnotationUseSiteTarget.PROPERTY_SETTER -> PropertySetterAnnotationUseSiteTargetFilter
|
||||||
|
AnnotationUseSiteTarget.RECEIVER -> ReceiverAnnotationUseSiteTargetFilter
|
||||||
|
AnnotationUseSiteTarget.CONSTRUCTOR_PARAMETER -> ConstructorParameterAnnotationUseSiteTargetFilter
|
||||||
|
AnnotationUseSiteTarget.SETTER_PARAMETER -> SetterParameterAnnotationUseSiteTargetFilter
|
||||||
|
AnnotationUseSiteTarget.PROPERTY_DELEGATE_FIELD -> PropertyDelegateFieldAnnotationUseSiteTargetFilter
|
||||||
|
}
|
||||||
|
|
||||||
|
public object AnyAnnotationUseSiteTargetFilter : AnnotationUseSiteTargetFilter {
|
||||||
|
override fun isAllowed(useSiteTarget: AnnotationUseSiteTarget?): Boolean = true
|
||||||
|
}
|
||||||
|
|
||||||
|
public object NullAnnotationUseSiteTargetFilter : AnnotationUseSiteTargetFilter {
|
||||||
|
override fun isAllowed(useSiteTarget: AnnotationUseSiteTarget?): Boolean = useSiteTarget == null
|
||||||
|
}
|
||||||
|
|
||||||
|
public object FieldAnnotationUseSiteTargetFilter : AnnotationUseSiteTargetFilter {
|
||||||
|
override fun isAllowed(useSiteTarget: AnnotationUseSiteTarget?): Boolean = useSiteTarget == AnnotationUseSiteTarget.FIELD
|
||||||
|
}
|
||||||
|
|
||||||
|
public object FileAnnotationUseSiteTargetFilter : AnnotationUseSiteTargetFilter {
|
||||||
|
override fun isAllowed(useSiteTarget: AnnotationUseSiteTarget?): Boolean = useSiteTarget == AnnotationUseSiteTarget.FILE
|
||||||
|
}
|
||||||
|
|
||||||
|
public object PropertyAnnotationUseSiteTargetFilter : AnnotationUseSiteTargetFilter {
|
||||||
|
override fun isAllowed(useSiteTarget: AnnotationUseSiteTarget?): Boolean = useSiteTarget == AnnotationUseSiteTarget.PROPERTY
|
||||||
|
}
|
||||||
|
|
||||||
|
public object PropertyGetterAnnotationUseSiteTargetFilter : AnnotationUseSiteTargetFilter {
|
||||||
|
override fun isAllowed(useSiteTarget: AnnotationUseSiteTarget?): Boolean = useSiteTarget == AnnotationUseSiteTarget.PROPERTY_GETTER
|
||||||
|
}
|
||||||
|
|
||||||
|
public object PropertySetterAnnotationUseSiteTargetFilter : AnnotationUseSiteTargetFilter {
|
||||||
|
override fun isAllowed(useSiteTarget: AnnotationUseSiteTarget?): Boolean = useSiteTarget == AnnotationUseSiteTarget.PROPERTY_SETTER
|
||||||
|
}
|
||||||
|
|
||||||
|
public object ReceiverAnnotationUseSiteTargetFilter : AnnotationUseSiteTargetFilter {
|
||||||
|
override fun isAllowed(useSiteTarget: AnnotationUseSiteTarget?): Boolean = useSiteTarget == AnnotationUseSiteTarget.RECEIVER
|
||||||
|
}
|
||||||
|
|
||||||
|
public object ConstructorParameterAnnotationUseSiteTargetFilter : AnnotationUseSiteTargetFilter {
|
||||||
|
override fun isAllowed(useSiteTarget: AnnotationUseSiteTarget?): Boolean =
|
||||||
|
useSiteTarget == AnnotationUseSiteTarget.CONSTRUCTOR_PARAMETER
|
||||||
|
}
|
||||||
|
|
||||||
|
public object SetterParameterAnnotationUseSiteTargetFilter : AnnotationUseSiteTargetFilter {
|
||||||
|
override fun isAllowed(useSiteTarget: AnnotationUseSiteTarget?): Boolean = useSiteTarget == AnnotationUseSiteTarget.SETTER_PARAMETER
|
||||||
|
}
|
||||||
|
|
||||||
|
public object PropertyDelegateFieldAnnotationUseSiteTargetFilter : AnnotationUseSiteTargetFilter {
|
||||||
|
override fun isAllowed(useSiteTarget: AnnotationUseSiteTarget?): Boolean =
|
||||||
|
useSiteTarget == AnnotationUseSiteTarget.PROPERTY_DELEGATE_FIELD
|
||||||
|
}
|
||||||
+8
-15
@@ -5,7 +5,6 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.analysis.api.annotations
|
package org.jetbrains.kotlin.analysis.api.annotations
|
||||||
|
|
||||||
import org.jetbrains.kotlin.descriptors.annotations.AnnotationUseSiteTarget
|
|
||||||
import org.jetbrains.kotlin.name.ClassId
|
import org.jetbrains.kotlin.name.ClassId
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -32,30 +31,24 @@ public val KtAnnotated.annotationInfos: List<KtAnnotationApplicationInfo>
|
|||||||
get() = annotationsList.annotationInfos
|
get() = annotationsList.annotationInfos
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Checks if entity has annotation with specified [classId].
|
* Checks if entity has annotation with specified [classId] and filtered by [useSiteTargetFilter].
|
||||||
*
|
|
||||||
* @see [KtAnnotationsList.hasAnnotation]
|
|
||||||
*/
|
|
||||||
public fun KtAnnotated.hasAnnotation(classId: ClassId): Boolean = annotationsList.hasAnnotation(classId)
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Checks if entity has annotation with specified [classId] and [useSiteTarget].
|
|
||||||
*
|
*
|
||||||
* @see [KtAnnotationsList.hasAnnotation]
|
* @see [KtAnnotationsList.hasAnnotation]
|
||||||
*/
|
*/
|
||||||
public fun KtAnnotated.hasAnnotation(
|
public fun KtAnnotated.hasAnnotation(
|
||||||
classId: ClassId,
|
classId: ClassId,
|
||||||
useSiteTarget: AnnotationUseSiteTarget?,
|
useSiteTargetFilter: AnnotationUseSiteTargetFilter = AnyAnnotationUseSiteTargetFilter,
|
||||||
acceptAnnotationsWithoutUseSite: Boolean = false,
|
): Boolean = annotationsList.hasAnnotation(classId, useSiteTargetFilter)
|
||||||
): Boolean = annotationsList.hasAnnotation(classId, useSiteTarget, acceptAnnotationsWithoutUseSite)
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A list of annotations applied with specified [classId].
|
* A list of annotations applied with specified [classId] and filtered by [useSiteTargetFilter].
|
||||||
*
|
*
|
||||||
* @see [KtAnnotationsList.annotationClassIds]
|
* @see [KtAnnotationsList.annotationClassIds]
|
||||||
*/
|
*/
|
||||||
public fun KtAnnotated.annotationsByClassId(classId: ClassId): List<KtAnnotationApplicationWithArgumentsInfo> =
|
public fun KtAnnotated.annotationsByClassId(
|
||||||
annotationsList.annotationsByClassId(classId)
|
classId: ClassId,
|
||||||
|
useSiteTargetFilter: AnnotationUseSiteTargetFilter = AnyAnnotationUseSiteTargetFilter,
|
||||||
|
): List<KtAnnotationApplicationWithArgumentsInfo> = annotationsList.annotationsByClassId(classId, useSiteTargetFilter)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A list of annotations applied.
|
* A list of annotations applied.
|
||||||
|
|||||||
+13
-23
@@ -6,7 +6,6 @@
|
|||||||
package org.jetbrains.kotlin.analysis.api.annotations
|
package org.jetbrains.kotlin.analysis.api.annotations
|
||||||
|
|
||||||
import org.jetbrains.kotlin.analysis.api.lifetime.KtLifetimeOwner
|
import org.jetbrains.kotlin.analysis.api.lifetime.KtLifetimeOwner
|
||||||
import org.jetbrains.kotlin.descriptors.annotations.AnnotationUseSiteTarget
|
|
||||||
import org.jetbrains.kotlin.name.ClassId
|
import org.jetbrains.kotlin.name.ClassId
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -34,49 +33,40 @@ public abstract class KtAnnotationsList : KtLifetimeOwner {
|
|||||||
public abstract val annotationInfos: List<KtAnnotationApplicationInfo>
|
public abstract val annotationInfos: List<KtAnnotationApplicationInfo>
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Checks if entity contains annotation with specified [classId].
|
* Checks if entity contains annotation with specified [classId] and filtered by [useSiteTargetFilter].
|
||||||
*
|
*
|
||||||
* The semantic is equivalent to
|
* The semantic is equivalent to
|
||||||
* ```
|
* ```
|
||||||
* annotationsList.hasAnnotation(classId) == annotationsList.annotations.any { it.classId == classId }
|
* annotationsList.hasAnnotation(classId, useSiteTargetFilter) == annotationsList.annotations.any {
|
||||||
* ```
|
* it.classId == classId && useSiteTargetFilter.isAllowed(it.useSiteTarget)
|
||||||
*/
|
|
||||||
public abstract fun hasAnnotation(classId: ClassId): Boolean
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Checks if entity contains annotation with specified [classId] and [useSiteTarget].
|
|
||||||
* If [useSiteTarget] is **null** [acceptAnnotationsWithoutUseSite] effectively unused.
|
|
||||||
*
|
|
||||||
* The semantic is equivalent to
|
|
||||||
* ```
|
|
||||||
* annotationsList.hasAnnotation(classId, useSiteTarget, strictUseSite) == annotationsList.annotations.any {
|
|
||||||
* (it.useSiteTarget == useSiteTarget || acceptAnnotationsWithoutUseSite && it.useSiteTarget == null) && it.classId == classId
|
|
||||||
* }
|
* }
|
||||||
* ```
|
* ```
|
||||||
*
|
|
||||||
* @param classId [ClassId] to search
|
* @param classId [ClassId] to search
|
||||||
* @param useSiteTarget specific [AnnotationUseSiteTarget]
|
* @param useSiteTargetFilter specific [AnnotationUseSiteTargetFilter]
|
||||||
* @param acceptAnnotationsWithoutUseSite add [ClassId] without specified [AnnotationUseSiteTarget] to search
|
|
||||||
*/
|
*/
|
||||||
public abstract fun hasAnnotation(
|
public abstract fun hasAnnotation(
|
||||||
classId: ClassId,
|
classId: ClassId,
|
||||||
useSiteTarget: AnnotationUseSiteTarget?,
|
useSiteTargetFilter: AnnotationUseSiteTargetFilter = AnyAnnotationUseSiteTargetFilter,
|
||||||
acceptAnnotationsWithoutUseSite: Boolean = false,
|
|
||||||
): Boolean
|
): Boolean
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A list of annotations applied with specified [classId].
|
* A list of annotations applied with specified [classId] and filtered by [useSiteTargetFilter].
|
||||||
*
|
*
|
||||||
* To check if annotation is present, please use [hasAnnotation].
|
* To check if annotation is present, please use [hasAnnotation].
|
||||||
*
|
*
|
||||||
* The semantic is equivalent to
|
* The semantic is equivalent to
|
||||||
* ```
|
* ```
|
||||||
* annotationsList.annotationsByClassId(classId) == annotationsList.annotations.filter { it.classId == classId }
|
* annotationsList.annotationsByClassId(classId) == annotationsList.annotations.filter {
|
||||||
|
* it.classId == classId && useSiteTargetFilter.isAllowed(it.useSiteTarget)
|
||||||
|
* }
|
||||||
* ```
|
* ```
|
||||||
*
|
*
|
||||||
* @see KtAnnotationApplicationWithArgumentsInfo
|
* @see KtAnnotationApplicationWithArgumentsInfo
|
||||||
*/
|
*/
|
||||||
public abstract fun annotationsByClassId(classId: ClassId): List<KtAnnotationApplicationWithArgumentsInfo>
|
public abstract fun annotationsByClassId(
|
||||||
|
classId: ClassId,
|
||||||
|
useSiteTargetFilter: AnnotationUseSiteTargetFilter = AnyAnnotationUseSiteTargetFilter,
|
||||||
|
): List<KtAnnotationApplicationWithArgumentsInfo>
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A list of annotations [ClassId].
|
* A list of annotations [ClassId].
|
||||||
|
|||||||
+5
-10
@@ -11,40 +11,35 @@ import org.jetbrains.kotlin.analysis.api.symbols.KtClassLikeSymbol
|
|||||||
import org.jetbrains.kotlin.analysis.api.symbols.markers.KtAnnotatedSymbol
|
import org.jetbrains.kotlin.analysis.api.symbols.markers.KtAnnotatedSymbol
|
||||||
import org.jetbrains.kotlin.analysis.api.symbols.pointers.KtSymbolPointer
|
import org.jetbrains.kotlin.analysis.api.symbols.pointers.KtSymbolPointer
|
||||||
import org.jetbrains.kotlin.analysis.project.structure.KtModule
|
import org.jetbrains.kotlin.analysis.project.structure.KtModule
|
||||||
import org.jetbrains.kotlin.descriptors.annotations.AnnotationUseSiteTarget
|
|
||||||
import org.jetbrains.kotlin.light.classes.symbol.withSymbol
|
import org.jetbrains.kotlin.light.classes.symbol.withSymbol
|
||||||
import org.jetbrains.kotlin.name.ClassId
|
import org.jetbrains.kotlin.name.ClassId
|
||||||
|
|
||||||
internal class SymbolAnnotationsProvider<T : KtAnnotatedSymbol>(
|
internal class SymbolAnnotationsProvider<T : KtAnnotatedSymbol>(
|
||||||
private val ktModule: KtModule,
|
private val ktModule: KtModule,
|
||||||
private val annotatedSymbolPointer: KtSymbolPointer<T>,
|
private val annotatedSymbolPointer: KtSymbolPointer<T>,
|
||||||
private val annotationUseSiteTarget: AnnotationUseSiteTarget? = null,
|
private val annotationUseSiteTargetFilter: AnnotationUseSiteTargetFilter = AnyAnnotationUseSiteTargetFilter,
|
||||||
private val acceptAnnotationsWithoutSite: Boolean = false,
|
|
||||||
) : AnnotationsProvider {
|
) : AnnotationsProvider {
|
||||||
private inline fun <T> withAnnotatedSymbol(crossinline action: context(KtAnalysisSession) (KtAnnotatedSymbol) -> T): T =
|
private inline fun <T> withAnnotatedSymbol(crossinline action: context(KtAnalysisSession) (KtAnnotatedSymbol) -> T): T =
|
||||||
annotatedSymbolPointer.withSymbol(ktModule, action)
|
annotatedSymbolPointer.withSymbol(ktModule, action)
|
||||||
|
|
||||||
override fun annotationInfos(): List<KtAnnotationApplicationInfo> = withAnnotatedSymbol { annotatedSymbol ->
|
override fun annotationInfos(): List<KtAnnotationApplicationInfo> = withAnnotatedSymbol { annotatedSymbol ->
|
||||||
annotatedSymbol.annotationInfos.filter {
|
annotatedSymbol.annotationInfos.filter {
|
||||||
it.useSiteTarget == annotationUseSiteTarget || acceptAnnotationsWithoutSite && it.useSiteTarget == null
|
annotationUseSiteTargetFilter.isAllowed(it.useSiteTarget)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun get(classId: ClassId): Collection<KtAnnotationApplicationWithArgumentsInfo> = withAnnotatedSymbol { annotatedSymbol ->
|
override fun get(classId: ClassId): Collection<KtAnnotationApplicationWithArgumentsInfo> = withAnnotatedSymbol { annotatedSymbol ->
|
||||||
annotatedSymbol.annotationsByClassId(classId).filter {
|
annotatedSymbol.annotationsByClassId(classId, annotationUseSiteTargetFilter)
|
||||||
it.useSiteTarget == annotationUseSiteTarget || acceptAnnotationsWithoutSite && it.useSiteTarget == null
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun contains(classId: ClassId): Boolean = withAnnotatedSymbol { annotatedSymbol ->
|
override fun contains(classId: ClassId): Boolean = withAnnotatedSymbol { annotatedSymbol ->
|
||||||
annotatedSymbol.hasAnnotation(classId, annotationUseSiteTarget, acceptAnnotationsWithoutSite)
|
annotatedSymbol.hasAnnotation(classId, annotationUseSiteTargetFilter)
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun isTheSameAs(other: Any?): Boolean = other === this ||
|
override fun isTheSameAs(other: Any?): Boolean = other === this ||
|
||||||
other is SymbolAnnotationsProvider<*> &&
|
other is SymbolAnnotationsProvider<*> &&
|
||||||
other.ktModule == ktModule &&
|
other.ktModule == ktModule &&
|
||||||
other.annotationUseSiteTarget == annotationUseSiteTarget &&
|
other.annotationUseSiteTargetFilter == annotationUseSiteTargetFilter &&
|
||||||
other.acceptAnnotationsWithoutSite == acceptAnnotationsWithoutSite &&
|
|
||||||
annotatedSymbolPointer.pointsToTheSameSymbolAs(other.annotatedSymbolPointer)
|
annotatedSymbolPointer.pointsToTheSameSymbolAs(other.annotatedSymbolPointer)
|
||||||
|
|
||||||
override fun ownerClassId(): ClassId? = withAnnotatedSymbol { annotatedSymbol ->
|
override fun ownerClassId(): ClassId? = withAnnotatedSymbol { annotatedSymbol ->
|
||||||
|
|||||||
+33
-27
@@ -24,13 +24,26 @@ import org.jetbrains.kotlin.name.JvmNames.JVM_SYNTHETIC_ANNOTATION_CLASS_ID
|
|||||||
import org.jetbrains.kotlin.name.StandardClassIds
|
import org.jetbrains.kotlin.name.StandardClassIds
|
||||||
import org.jetbrains.kotlin.resolve.deprecation.DeprecationLevelValue
|
import org.jetbrains.kotlin.resolve.deprecation.DeprecationLevelValue
|
||||||
|
|
||||||
internal fun KtAnnotatedSymbol.hasJvmSyntheticAnnotation(
|
internal fun AnnotationUseSiteTarget?.toFilterWithAdditionalNull(): AnnotationUseSiteTargetFilter {
|
||||||
annotationUseSiteTarget: AnnotationUseSiteTarget? = null,
|
if (this == null) return NullAnnotationUseSiteTargetFilter
|
||||||
acceptAnnotationsWithoutUseSite: Boolean = false,
|
|
||||||
): Boolean = hasAnnotation(JVM_SYNTHETIC_ANNOTATION_CLASS_ID, annotationUseSiteTarget, acceptAnnotationsWithoutUseSite)
|
|
||||||
|
|
||||||
internal fun KtAnnotatedSymbol.getJvmNameFromAnnotation(annotationUseSiteTarget: AnnotationUseSiteTarget? = null): String? {
|
return annotationUseSiteTargetFilterOf(NullAnnotationUseSiteTargetFilter, toFilter())
|
||||||
val annotation = findAnnotation(StandardClassIds.Annotations.JvmName, annotationUseSiteTarget, acceptAnnotationsWithoutUseSite = true)
|
}
|
||||||
|
|
||||||
|
internal fun annotationUseSiteTargetFilterOf(
|
||||||
|
vararg filters: AnnotationUseSiteTargetFilter,
|
||||||
|
): AnnotationUseSiteTargetFilter = AnnotationUseSiteTargetFilter { useSiteTarget ->
|
||||||
|
filters.any { filter -> filter.isAllowed(useSiteTarget) }
|
||||||
|
}
|
||||||
|
|
||||||
|
internal fun KtAnnotatedSymbol.hasJvmSyntheticAnnotation(
|
||||||
|
useSiteTargetFilter: AnnotationUseSiteTargetFilter = AnyAnnotationUseSiteTargetFilter,
|
||||||
|
): Boolean = hasAnnotation(JVM_SYNTHETIC_ANNOTATION_CLASS_ID, useSiteTargetFilter)
|
||||||
|
|
||||||
|
internal fun KtAnnotatedSymbol.getJvmNameFromAnnotation(
|
||||||
|
useSiteTargetFilter: AnnotationUseSiteTargetFilter = AnyAnnotationUseSiteTargetFilter,
|
||||||
|
): String? {
|
||||||
|
val annotation = findAnnotation(StandardClassIds.Annotations.JvmName, useSiteTargetFilter)
|
||||||
return annotation?.let {
|
return annotation?.let {
|
||||||
(it.arguments.firstOrNull()?.expression as? KtConstantAnnotationValue)?.constantValue?.value as? String
|
(it.arguments.firstOrNull()?.expression as? KtConstantAnnotationValue)?.constantValue?.value as? String
|
||||||
}
|
}
|
||||||
@@ -45,56 +58,49 @@ internal fun isHiddenByDeprecation(
|
|||||||
context(KtAnalysisSession)
|
context(KtAnalysisSession)
|
||||||
internal fun KtAnnotatedSymbol.isHiddenOrSynthetic(
|
internal fun KtAnnotatedSymbol.isHiddenOrSynthetic(
|
||||||
annotationUseSiteTarget: AnnotationUseSiteTarget? = null,
|
annotationUseSiteTarget: AnnotationUseSiteTarget? = null,
|
||||||
acceptAnnotationsWithoutUseSite: Boolean = false,
|
useSiteTargetFilter: AnnotationUseSiteTargetFilter = annotationUseSiteTarget.toFilter(),
|
||||||
) = isHiddenByDeprecation(this, annotationUseSiteTarget) ||
|
) = isHiddenByDeprecation(this, annotationUseSiteTarget) || hasJvmSyntheticAnnotation(useSiteTargetFilter)
|
||||||
hasJvmSyntheticAnnotation(annotationUseSiteTarget, acceptAnnotationsWithoutUseSite)
|
|
||||||
|
|
||||||
internal fun KtAnnotatedSymbol.hasJvmFieldAnnotation(): Boolean = hasAnnotation(StandardClassIds.Annotations.JvmField)
|
internal fun KtAnnotatedSymbol.hasJvmFieldAnnotation(): Boolean = hasAnnotation(StandardClassIds.Annotations.JvmField)
|
||||||
|
|
||||||
internal fun KtAnnotatedSymbol.hasPublishedApiAnnotation(annotationUseSiteTarget: AnnotationUseSiteTarget? = null): Boolean =
|
internal fun KtAnnotatedSymbol.hasPublishedApiAnnotation(
|
||||||
hasAnnotation(StandardClassIds.Annotations.PublishedApi, annotationUseSiteTarget)
|
useSiteTargetFilter: AnnotationUseSiteTargetFilter = AnyAnnotationUseSiteTargetFilter,
|
||||||
|
): Boolean = hasAnnotation(StandardClassIds.Annotations.PublishedApi, useSiteTargetFilter)
|
||||||
|
|
||||||
internal fun KtAnnotatedSymbol.hasDeprecatedAnnotation(
|
internal fun KtAnnotatedSymbol.hasDeprecatedAnnotation(
|
||||||
annotationUseSiteTarget: AnnotationUseSiteTarget? = null,
|
useSiteTargetFilter: AnnotationUseSiteTargetFilter = AnyAnnotationUseSiteTargetFilter,
|
||||||
acceptAnnotationsWithoutUseSite: Boolean = false,
|
): Boolean = hasAnnotation(StandardClassIds.Annotations.Deprecated, useSiteTargetFilter)
|
||||||
): Boolean = hasAnnotation(StandardClassIds.Annotations.Deprecated, annotationUseSiteTarget, acceptAnnotationsWithoutUseSite)
|
|
||||||
|
|
||||||
internal fun KtAnnotatedSymbol.hasJvmOverloadsAnnotation(): Boolean = hasAnnotation(JVM_OVERLOADS_CLASS_ID)
|
internal fun KtAnnotatedSymbol.hasJvmOverloadsAnnotation(): Boolean = hasAnnotation(JVM_OVERLOADS_CLASS_ID)
|
||||||
|
|
||||||
internal fun KtAnnotatedSymbol.hasJvmStaticAnnotation(
|
internal fun KtAnnotatedSymbol.hasJvmStaticAnnotation(
|
||||||
annotationUseSiteTarget: AnnotationUseSiteTarget? = null,
|
useSiteTargetFilter: AnnotationUseSiteTargetFilter = AnyAnnotationUseSiteTargetFilter,
|
||||||
acceptAnnotationsWithoutUseSite: Boolean = false,
|
): Boolean = hasAnnotation(StandardClassIds.Annotations.JvmStatic, useSiteTargetFilter)
|
||||||
): Boolean = hasAnnotation(StandardClassIds.Annotations.JvmStatic, annotationUseSiteTarget, acceptAnnotationsWithoutUseSite)
|
|
||||||
|
|
||||||
internal fun KtAnnotatedSymbol.hasInlineOnlyAnnotation(): Boolean = hasAnnotation(StandardClassIds.Annotations.InlineOnly)
|
internal fun KtAnnotatedSymbol.hasInlineOnlyAnnotation(): Boolean = hasAnnotation(StandardClassIds.Annotations.InlineOnly)
|
||||||
|
|
||||||
internal fun KtAnnotatedSymbol.findAnnotation(
|
internal fun KtAnnotatedSymbol.findAnnotation(
|
||||||
classId: ClassId,
|
classId: ClassId,
|
||||||
annotationUseSiteTarget: AnnotationUseSiteTarget?,
|
useSiteTargetFilter: AnnotationUseSiteTargetFilter = AnyAnnotationUseSiteTargetFilter,
|
||||||
acceptAnnotationsWithoutUseSite: Boolean = false,
|
|
||||||
): KtAnnotationApplicationWithArgumentsInfo? {
|
): KtAnnotationApplicationWithArgumentsInfo? {
|
||||||
if (!hasAnnotation(classId, annotationUseSiteTarget, acceptAnnotationsWithoutUseSite)) return null
|
if (!hasAnnotation(classId, useSiteTargetFilter)) return null
|
||||||
|
|
||||||
return annotations.find {
|
return annotationsByClassId(classId, useSiteTargetFilter).firstOrNull()
|
||||||
val useSiteTarget = it.useSiteTarget
|
|
||||||
(useSiteTarget == annotationUseSiteTarget || acceptAnnotationsWithoutUseSite && useSiteTarget == null) && it.classId == classId
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
context(KtAnalysisSession)
|
context(KtAnalysisSession)
|
||||||
internal fun KtAnnotatedSymbol.computeThrowsList(
|
internal fun KtAnnotatedSymbol.computeThrowsList(
|
||||||
builder: LightReferenceListBuilder,
|
builder: LightReferenceListBuilder,
|
||||||
annotationUseSiteTarget: AnnotationUseSiteTarget?,
|
|
||||||
useSitePosition: PsiElement,
|
useSitePosition: PsiElement,
|
||||||
containingClass: SymbolLightClassBase,
|
containingClass: SymbolLightClassBase,
|
||||||
acceptAnnotationsWithoutUseSite: Boolean = false,
|
useSiteTargetFilter: AnnotationUseSiteTargetFilter = AnyAnnotationUseSiteTargetFilter,
|
||||||
) {
|
) {
|
||||||
if (containingClass.isEnum && this is KtFunctionSymbol && name == StandardNames.ENUM_VALUE_OF && isStatic) {
|
if (containingClass.isEnum && this is KtFunctionSymbol && name == StandardNames.ENUM_VALUE_OF && isStatic) {
|
||||||
builder.addReference(java.lang.IllegalArgumentException::class.qualifiedName)
|
builder.addReference(java.lang.IllegalArgumentException::class.qualifiedName)
|
||||||
builder.addReference(java.lang.NullPointerException::class.qualifiedName)
|
builder.addReference(java.lang.NullPointerException::class.qualifiedName)
|
||||||
}
|
}
|
||||||
|
|
||||||
val annoApp = findAnnotation(StandardClassIds.Annotations.Throws, annotationUseSiteTarget, acceptAnnotationsWithoutUseSite) ?: return
|
val annoApp = findAnnotation(StandardClassIds.Annotations.Throws, useSiteTargetFilter) ?: return
|
||||||
|
|
||||||
fun handleAnnotationValue(annotationValue: KtAnnotationValue) = when (annotationValue) {
|
fun handleAnnotationValue(annotationValue: KtAnnotationValue) = when (annotationValue) {
|
||||||
is KtArrayAnnotationValue -> {
|
is KtArrayAnnotationValue -> {
|
||||||
|
|||||||
+1
-2
@@ -71,8 +71,7 @@ class SymbolLightClassForFacade(
|
|||||||
annotationsProvider = SymbolAnnotationsProvider(
|
annotationsProvider = SymbolAnnotationsProvider(
|
||||||
ktModule = this.ktModule,
|
ktModule = this.ktModule,
|
||||||
annotatedSymbolPointer = firstFileInFacade.symbolPointerOfType<KtFileSymbol>(),
|
annotatedSymbolPointer = firstFileInFacade.symbolPointerOfType<KtFileSymbol>(),
|
||||||
annotationUseSiteTarget = AnnotationUseSiteTarget.FILE,
|
annotationUseSiteTargetFilter = AnnotationUseSiteTarget.FILE.toFilterWithAdditionalNull(),
|
||||||
acceptAnnotationsWithoutSite = true,
|
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
},
|
},
|
||||||
|
|||||||
+7
-8
@@ -34,10 +34,7 @@ import org.jetbrains.kotlin.config.JvmDefaultMode
|
|||||||
import org.jetbrains.kotlin.descriptors.Modality
|
import org.jetbrains.kotlin.descriptors.Modality
|
||||||
import org.jetbrains.kotlin.descriptors.annotations.AnnotationUseSiteTarget
|
import org.jetbrains.kotlin.descriptors.annotations.AnnotationUseSiteTarget
|
||||||
import org.jetbrains.kotlin.lexer.KtTokens.*
|
import org.jetbrains.kotlin.lexer.KtTokens.*
|
||||||
import org.jetbrains.kotlin.light.classes.symbol.annotations.hasJvmFieldAnnotation
|
import org.jetbrains.kotlin.light.classes.symbol.annotations.*
|
||||||
import org.jetbrains.kotlin.light.classes.symbol.annotations.hasJvmOverloadsAnnotation
|
|
||||||
import org.jetbrains.kotlin.light.classes.symbol.annotations.hasJvmStaticAnnotation
|
|
||||||
import org.jetbrains.kotlin.light.classes.symbol.annotations.isHiddenOrSynthetic
|
|
||||||
import org.jetbrains.kotlin.light.classes.symbol.copy
|
import org.jetbrains.kotlin.light.classes.symbol.copy
|
||||||
import org.jetbrains.kotlin.light.classes.symbol.fields.SymbolLightField
|
import org.jetbrains.kotlin.light.classes.symbol.fields.SymbolLightField
|
||||||
import org.jetbrains.kotlin.light.classes.symbol.fields.SymbolLightFieldForEnumEntry
|
import org.jetbrains.kotlin.light.classes.symbol.fields.SymbolLightFieldForEnumEntry
|
||||||
@@ -311,15 +308,16 @@ internal fun SymbolLightClassBase.createPropertyAccessors(
|
|||||||
if (this !is SymbolLightClassForFacade && propertyTypeIsValueClass) return
|
if (this !is SymbolLightClassForFacade && propertyTypeIsValueClass) return
|
||||||
|
|
||||||
fun KtPropertyAccessorSymbol.needToCreateAccessor(siteTarget: AnnotationUseSiteTarget): Boolean {
|
fun KtPropertyAccessorSymbol.needToCreateAccessor(siteTarget: AnnotationUseSiteTarget): Boolean {
|
||||||
|
val useSiteTargetFilterForPropertyAccessor = siteTarget.toFilterWithAdditionalNull()
|
||||||
if (onlyJvmStatic &&
|
if (onlyJvmStatic &&
|
||||||
!hasJvmStaticAnnotation(siteTarget, acceptAnnotationsWithoutUseSite = true) &&
|
!hasJvmStaticAnnotation(useSiteTargetFilterForPropertyAccessor) &&
|
||||||
!declaration.hasJvmStaticAnnotation(siteTarget, acceptAnnotationsWithoutUseSite = true)
|
!declaration.hasJvmStaticAnnotation(useSiteTargetFilterForPropertyAccessor)
|
||||||
) return false
|
) return false
|
||||||
|
|
||||||
if (declaration.hasReifiedParameters) return false
|
if (declaration.hasReifiedParameters) return false
|
||||||
if (!hasBody && visibility.isPrivateOrPrivateToThis()) return false
|
if (!hasBody && visibility.isPrivateOrPrivateToThis()) return false
|
||||||
if (declaration.isHiddenOrSynthetic(siteTarget)) return false
|
if (declaration.isHiddenOrSynthetic(siteTarget)) return false
|
||||||
return !isHiddenOrSynthetic(siteTarget, acceptAnnotationsWithoutUseSite = true)
|
return !isHiddenOrSynthetic(siteTarget, useSiteTargetFilterForPropertyAccessor)
|
||||||
}
|
}
|
||||||
|
|
||||||
val originalElement = declaration.sourcePsiSafe<KtDeclaration>()
|
val originalElement = declaration.sourcePsiSafe<KtDeclaration>()
|
||||||
@@ -403,8 +401,9 @@ private fun hasBackingField(property: KtPropertySymbol): Boolean {
|
|||||||
return hasBackingFieldByPsi
|
return hasBackingFieldByPsi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
val fieldUseSite = AnnotationUseSiteTarget.FIELD
|
||||||
if (property.modality == Modality.ABSTRACT ||
|
if (property.modality == Modality.ABSTRACT ||
|
||||||
property.isHiddenOrSynthetic(AnnotationUseSiteTarget.FIELD, acceptAnnotationsWithoutUseSite = true)
|
property.isHiddenOrSynthetic(fieldUseSite, fieldUseSite.toFilterWithAdditionalNull())
|
||||||
) return false
|
) return false
|
||||||
|
|
||||||
return hasBackingFieldByPsi ?: property.hasBackingField
|
return hasBackingFieldByPsi ?: property.hasBackingField
|
||||||
|
|||||||
+9
-3
@@ -7,14 +7,17 @@ package org.jetbrains.kotlin.light.classes.symbol.fields
|
|||||||
|
|
||||||
import com.intellij.psi.*
|
import com.intellij.psi.*
|
||||||
import org.jetbrains.kotlin.analysis.api.KtAnalysisSession
|
import org.jetbrains.kotlin.analysis.api.KtAnalysisSession
|
||||||
|
import org.jetbrains.kotlin.analysis.api.annotations.FieldAnnotationUseSiteTargetFilter
|
||||||
|
import org.jetbrains.kotlin.analysis.api.annotations.NullAnnotationUseSiteTargetFilter
|
||||||
|
import org.jetbrains.kotlin.analysis.api.annotations.PropertyAnnotationUseSiteTargetFilter
|
||||||
import org.jetbrains.kotlin.analysis.api.symbols.KtEnumEntrySymbol
|
import org.jetbrains.kotlin.analysis.api.symbols.KtEnumEntrySymbol
|
||||||
import org.jetbrains.kotlin.analysis.api.symbols.pointers.symbolPointerOfType
|
import org.jetbrains.kotlin.analysis.api.symbols.pointers.symbolPointerOfType
|
||||||
import org.jetbrains.kotlin.asJava.classes.cannotModify
|
import org.jetbrains.kotlin.asJava.classes.cannotModify
|
||||||
import org.jetbrains.kotlin.asJava.classes.lazyPub
|
import org.jetbrains.kotlin.asJava.classes.lazyPub
|
||||||
import org.jetbrains.kotlin.descriptors.annotations.AnnotationUseSiteTarget
|
|
||||||
import org.jetbrains.kotlin.light.classes.symbol.analyzeForLightClasses
|
import org.jetbrains.kotlin.light.classes.symbol.analyzeForLightClasses
|
||||||
import org.jetbrains.kotlin.light.classes.symbol.annotations.LazyAnnotationsBox
|
import org.jetbrains.kotlin.light.classes.symbol.annotations.LazyAnnotationsBox
|
||||||
import org.jetbrains.kotlin.light.classes.symbol.annotations.SymbolAnnotationsProvider
|
import org.jetbrains.kotlin.light.classes.symbol.annotations.SymbolAnnotationsProvider
|
||||||
|
import org.jetbrains.kotlin.light.classes.symbol.annotations.annotationUseSiteTargetFilterOf
|
||||||
import org.jetbrains.kotlin.light.classes.symbol.classes.SymbolLightClassForClassOrObject
|
import org.jetbrains.kotlin.light.classes.symbol.classes.SymbolLightClassForClassOrObject
|
||||||
import org.jetbrains.kotlin.light.classes.symbol.classes.SymbolLightClassForEnumEntry
|
import org.jetbrains.kotlin.light.classes.symbol.classes.SymbolLightClassForEnumEntry
|
||||||
import org.jetbrains.kotlin.light.classes.symbol.isOriginEquivalentTo
|
import org.jetbrains.kotlin.light.classes.symbol.isOriginEquivalentTo
|
||||||
@@ -42,8 +45,11 @@ internal class SymbolLightFieldForEnumEntry(
|
|||||||
annotationsProvider = SymbolAnnotationsProvider(
|
annotationsProvider = SymbolAnnotationsProvider(
|
||||||
ktModule = ktModule,
|
ktModule = ktModule,
|
||||||
annotatedSymbolPointer = enumEntry.symbolPointerOfType<KtEnumEntrySymbol>(),
|
annotatedSymbolPointer = enumEntry.symbolPointerOfType<KtEnumEntrySymbol>(),
|
||||||
annotationUseSiteTarget = AnnotationUseSiteTarget.FIELD,
|
annotationUseSiteTargetFilter = annotationUseSiteTargetFilterOf(
|
||||||
acceptAnnotationsWithoutSite = true,
|
NullAnnotationUseSiteTargetFilter,
|
||||||
|
FieldAnnotationUseSiteTargetFilter,
|
||||||
|
PropertyAnnotationUseSiteTargetFilter,
|
||||||
|
),
|
||||||
)
|
)
|
||||||
),
|
),
|
||||||
)
|
)
|
||||||
|
|||||||
+13
-9
@@ -19,10 +19,7 @@ import org.jetbrains.kotlin.asJava.builder.LightMemberOrigin
|
|||||||
import org.jetbrains.kotlin.asJava.classes.lazyPub
|
import org.jetbrains.kotlin.asJava.classes.lazyPub
|
||||||
import org.jetbrains.kotlin.descriptors.annotations.AnnotationUseSiteTarget
|
import org.jetbrains.kotlin.descriptors.annotations.AnnotationUseSiteTarget
|
||||||
import org.jetbrains.kotlin.light.classes.symbol.*
|
import org.jetbrains.kotlin.light.classes.symbol.*
|
||||||
import org.jetbrains.kotlin.light.classes.symbol.annotations.LazyAnnotationsBox
|
import org.jetbrains.kotlin.light.classes.symbol.annotations.*
|
||||||
import org.jetbrains.kotlin.light.classes.symbol.annotations.NullabilityAnnotationsProvider
|
|
||||||
import org.jetbrains.kotlin.light.classes.symbol.annotations.SymbolAnnotationsProvider
|
|
||||||
import org.jetbrains.kotlin.light.classes.symbol.annotations.hasDeprecatedAnnotation
|
|
||||||
import org.jetbrains.kotlin.light.classes.symbol.classes.SymbolLightClassBase
|
import org.jetbrains.kotlin.light.classes.symbol.classes.SymbolLightClassBase
|
||||||
import org.jetbrains.kotlin.light.classes.symbol.modifierLists.LazyModifiersBox
|
import org.jetbrains.kotlin.light.classes.symbol.modifierLists.LazyModifiersBox
|
||||||
import org.jetbrains.kotlin.light.classes.symbol.modifierLists.SymbolLightMemberModifierList
|
import org.jetbrains.kotlin.light.classes.symbol.modifierLists.SymbolLightMemberModifierList
|
||||||
@@ -90,7 +87,7 @@ internal class SymbolLightFieldForProperty private constructor(
|
|||||||
|
|
||||||
private val _isDeprecated: Boolean by lazyPub {
|
private val _isDeprecated: Boolean by lazyPub {
|
||||||
withPropertySymbol { propertySymbol ->
|
withPropertySymbol { propertySymbol ->
|
||||||
propertySymbol.hasDeprecatedAnnotation(AnnotationUseSiteTarget.FIELD, acceptAnnotationsWithoutUseSite = true)
|
propertySymbol.hasDeprecatedAnnotation(AnnotationUseSiteTarget.FIELD.toFilterWithAdditionalNull())
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -126,12 +123,20 @@ internal class SymbolLightFieldForProperty private constructor(
|
|||||||
}
|
}
|
||||||
|
|
||||||
PsiModifier.VOLATILE -> withPropertySymbol { propertySymbol ->
|
PsiModifier.VOLATILE -> withPropertySymbol { propertySymbol ->
|
||||||
val hasAnnotation = propertySymbol.hasAnnotation(VOLATILE_ANNOTATION_CLASS_ID, null)
|
val hasAnnotation = propertySymbol.hasAnnotation(
|
||||||
|
VOLATILE_ANNOTATION_CLASS_ID,
|
||||||
|
AnnotationUseSiteTarget.FIELD.toFilterWithAdditionalNull(),
|
||||||
|
)
|
||||||
|
|
||||||
mapOf(modifier to hasAnnotation)
|
mapOf(modifier to hasAnnotation)
|
||||||
}
|
}
|
||||||
|
|
||||||
PsiModifier.TRANSIENT -> withPropertySymbol { propertySymbol ->
|
PsiModifier.TRANSIENT -> withPropertySymbol { propertySymbol ->
|
||||||
val hasAnnotation = propertySymbol.hasAnnotation(TRANSIENT_ANNOTATION_CLASS_ID, null)
|
val hasAnnotation = propertySymbol.hasAnnotation(
|
||||||
|
TRANSIENT_ANNOTATION_CLASS_ID,
|
||||||
|
AnnotationUseSiteTarget.FIELD.toFilterWithAdditionalNull(),
|
||||||
|
)
|
||||||
|
|
||||||
mapOf(modifier to hasAnnotation)
|
mapOf(modifier to hasAnnotation)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -152,8 +157,7 @@ internal class SymbolLightFieldForProperty private constructor(
|
|||||||
annotationsProvider = SymbolAnnotationsProvider(
|
annotationsProvider = SymbolAnnotationsProvider(
|
||||||
ktModule = ktModule,
|
ktModule = ktModule,
|
||||||
annotatedSymbolPointer = propertySymbolPointer,
|
annotatedSymbolPointer = propertySymbolPointer,
|
||||||
annotationUseSiteTarget = AnnotationUseSiteTarget.FIELD,
|
annotationUseSiteTargetFilter = AnnotationUseSiteTarget.FIELD.toFilterWithAdditionalNull(),
|
||||||
acceptAnnotationsWithoutSite = true,
|
|
||||||
),
|
),
|
||||||
additionalAnnotationsProvider = NullabilityAnnotationsProvider {
|
additionalAnnotationsProvider = NullabilityAnnotationsProvider {
|
||||||
withPropertySymbol { propertySymbol ->
|
withPropertySymbol { propertySymbol ->
|
||||||
|
|||||||
+13
-11
@@ -13,6 +13,7 @@ import org.jetbrains.kotlin.analysis.api.KtAnalysisSession
|
|||||||
import org.jetbrains.kotlin.analysis.api.KtConstantInitializerValue
|
import org.jetbrains.kotlin.analysis.api.KtConstantInitializerValue
|
||||||
import org.jetbrains.kotlin.analysis.api.KtConstantValueForAnnotation
|
import org.jetbrains.kotlin.analysis.api.KtConstantValueForAnnotation
|
||||||
import org.jetbrains.kotlin.analysis.api.KtNonConstantInitializerValue
|
import org.jetbrains.kotlin.analysis.api.KtNonConstantInitializerValue
|
||||||
|
import org.jetbrains.kotlin.analysis.api.annotations.toFilter
|
||||||
import org.jetbrains.kotlin.analysis.api.symbols.*
|
import org.jetbrains.kotlin.analysis.api.symbols.*
|
||||||
import org.jetbrains.kotlin.analysis.api.symbols.pointers.KtSymbolPointer
|
import org.jetbrains.kotlin.analysis.api.symbols.pointers.KtSymbolPointer
|
||||||
import org.jetbrains.kotlin.analysis.api.types.KtTypeMappingMode
|
import org.jetbrains.kotlin.analysis.api.types.KtTypeMappingMode
|
||||||
@@ -90,7 +91,7 @@ internal class SymbolLightAccessorMethod private constructor(
|
|||||||
|
|
||||||
private val _name: String by lazyPub {
|
private val _name: String by lazyPub {
|
||||||
analyzeForLightClasses(ktModule) {
|
analyzeForLightClasses(ktModule) {
|
||||||
propertyAccessorSymbol().getJvmNameFromAnnotation(accessorSite) ?: run {
|
propertyAccessorSymbol().getJvmNameFromAnnotation(accessorSite.toFilterWithAdditionalNull()) ?: run {
|
||||||
val symbol = propertySymbol()
|
val symbol = propertySymbol()
|
||||||
val defaultName = symbol.name.identifier.let {
|
val defaultName = symbol.name.identifier.let {
|
||||||
if (this@SymbolLightAccessorMethod.containingClass.isAnnotationType) it else it.abiName()
|
if (this@SymbolLightAccessorMethod.containingClass.isAnnotationType) it else it.abiName()
|
||||||
@@ -133,10 +134,9 @@ internal class SymbolLightAccessorMethod private constructor(
|
|||||||
propertyAccessorSymbolPointer.withSymbol(ktModule) { accessorSymbol ->
|
propertyAccessorSymbolPointer.withSymbol(ktModule) { accessorSymbol ->
|
||||||
accessorSymbol.computeThrowsList(
|
accessorSymbol.computeThrowsList(
|
||||||
builder,
|
builder,
|
||||||
accessorSite,
|
|
||||||
this@SymbolLightAccessorMethod,
|
this@SymbolLightAccessorMethod,
|
||||||
containingClass,
|
containingClass,
|
||||||
acceptAnnotationsWithoutUseSite = true,
|
accessorSite.toFilterWithAdditionalNull(),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -171,9 +171,12 @@ internal class SymbolLightAccessorMethod private constructor(
|
|||||||
|
|
||||||
private fun isStatic(): Boolean = analyzeForLightClasses(ktModule) {
|
private fun isStatic(): Boolean = analyzeForLightClasses(ktModule) {
|
||||||
val propertySymbol = propertySymbol()
|
val propertySymbol = propertySymbol()
|
||||||
propertySymbol.isStatic ||
|
if (propertySymbol.isStatic) {
|
||||||
propertySymbol.hasJvmStaticAnnotation(accessorSite, acceptAnnotationsWithoutUseSite = true) ||
|
return@analyzeForLightClasses true
|
||||||
propertyAccessorSymbol().hasJvmStaticAnnotation(accessorSite, acceptAnnotationsWithoutUseSite = true)
|
}
|
||||||
|
|
||||||
|
val filter = accessorSite.toFilterWithAdditionalNull()
|
||||||
|
propertySymbol.hasJvmStaticAnnotation(filter) || propertyAccessorSymbol().hasJvmStaticAnnotation(filter)
|
||||||
}
|
}
|
||||||
|
|
||||||
private val _modifierList: PsiModifierList by lazyPub {
|
private val _modifierList: PsiModifierList by lazyPub {
|
||||||
@@ -185,13 +188,12 @@ internal class SymbolLightAccessorMethod private constructor(
|
|||||||
SymbolAnnotationsProvider(
|
SymbolAnnotationsProvider(
|
||||||
ktModule = ktModule,
|
ktModule = ktModule,
|
||||||
annotatedSymbolPointer = propertyAccessorSymbolPointer,
|
annotatedSymbolPointer = propertyAccessorSymbolPointer,
|
||||||
annotationUseSiteTarget = accessorSite,
|
annotationUseSiteTargetFilter = accessorSite.toFilterWithAdditionalNull(),
|
||||||
acceptAnnotationsWithoutSite = true,
|
|
||||||
),
|
),
|
||||||
SymbolAnnotationsProvider(
|
SymbolAnnotationsProvider(
|
||||||
ktModule = ktModule,
|
ktModule = ktModule,
|
||||||
annotatedSymbolPointer = containingPropertySymbolPointer,
|
annotatedSymbolPointer = containingPropertySymbolPointer,
|
||||||
annotationUseSiteTarget = accessorSite,
|
annotationUseSiteTargetFilter = accessorSite.toFilter(),
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
additionalAnnotationsProvider = NullabilityAnnotationsProvider {
|
additionalAnnotationsProvider = NullabilityAnnotationsProvider {
|
||||||
@@ -217,8 +219,8 @@ internal class SymbolLightAccessorMethod private constructor(
|
|||||||
|
|
||||||
private val _isDeprecated: Boolean by lazyPub {
|
private val _isDeprecated: Boolean by lazyPub {
|
||||||
analyzeForLightClasses(ktModule) {
|
analyzeForLightClasses(ktModule) {
|
||||||
propertySymbol().hasDeprecatedAnnotation(accessorSite, acceptAnnotationsWithoutUseSite = true) ||
|
val filter = accessorSite.toFilterWithAdditionalNull()
|
||||||
propertyAccessorSymbol().hasDeprecatedAnnotation(accessorSite, acceptAnnotationsWithoutUseSite = true)
|
propertySymbol().hasDeprecatedAnnotation(filter) || propertyAccessorSymbol().hasDeprecatedAnnotation(filter)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+1
-2
@@ -128,9 +128,8 @@ internal abstract class SymbolLightMethod<FType : KtFunctionLikeSymbol> private
|
|||||||
withFunctionSymbol { functionSymbol ->
|
withFunctionSymbol { functionSymbol ->
|
||||||
functionSymbol.computeThrowsList(
|
functionSymbol.computeThrowsList(
|
||||||
builder,
|
builder,
|
||||||
annotationUseSiteTarget = null,
|
|
||||||
this@SymbolLightMethod,
|
this@SymbolLightMethod,
|
||||||
containingClass
|
containingClass,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+6
-3
@@ -12,6 +12,7 @@ import com.intellij.psi.impl.light.LightReferenceListBuilder
|
|||||||
import com.intellij.psi.util.MethodSignature
|
import com.intellij.psi.util.MethodSignature
|
||||||
import com.intellij.psi.util.MethodSignatureBackedByPsiMethod
|
import com.intellij.psi.util.MethodSignatureBackedByPsiMethod
|
||||||
import org.jetbrains.kotlin.analysis.api.KtAnalysisSession
|
import org.jetbrains.kotlin.analysis.api.KtAnalysisSession
|
||||||
|
import org.jetbrains.kotlin.analysis.api.annotations.toFilter
|
||||||
import org.jetbrains.kotlin.analysis.api.symbols.KtCallableSymbol
|
import org.jetbrains.kotlin.analysis.api.symbols.KtCallableSymbol
|
||||||
import org.jetbrains.kotlin.analysis.api.symbols.markers.KtAnnotatedSymbol
|
import org.jetbrains.kotlin.analysis.api.symbols.markers.KtAnnotatedSymbol
|
||||||
import org.jetbrains.kotlin.analysis.api.symbols.markers.KtSymbolWithVisibility
|
import org.jetbrains.kotlin.analysis.api.symbols.markers.KtSymbolWithVisibility
|
||||||
@@ -28,6 +29,7 @@ import org.jetbrains.kotlin.descriptors.annotations.AnnotationUseSiteTarget
|
|||||||
import org.jetbrains.kotlin.light.classes.symbol.SymbolLightMemberBase
|
import org.jetbrains.kotlin.light.classes.symbol.SymbolLightMemberBase
|
||||||
import org.jetbrains.kotlin.light.classes.symbol.annotations.getJvmNameFromAnnotation
|
import org.jetbrains.kotlin.light.classes.symbol.annotations.getJvmNameFromAnnotation
|
||||||
import org.jetbrains.kotlin.light.classes.symbol.annotations.hasPublishedApiAnnotation
|
import org.jetbrains.kotlin.light.classes.symbol.annotations.hasPublishedApiAnnotation
|
||||||
|
import org.jetbrains.kotlin.light.classes.symbol.annotations.toFilterWithAdditionalNull
|
||||||
import org.jetbrains.kotlin.light.classes.symbol.classes.SymbolLightClassBase
|
import org.jetbrains.kotlin.light.classes.symbol.classes.SymbolLightClassBase
|
||||||
|
|
||||||
internal abstract class SymbolLightMethodBase(
|
internal abstract class SymbolLightMethodBase(
|
||||||
@@ -105,12 +107,13 @@ internal abstract class SymbolLightMethodBase(
|
|||||||
protected fun <T> T.computeJvmMethodName(
|
protected fun <T> T.computeJvmMethodName(
|
||||||
defaultName: String,
|
defaultName: String,
|
||||||
containingClass: SymbolLightClassBase,
|
containingClass: SymbolLightClassBase,
|
||||||
annotationUseSiteTarget: AnnotationUseSiteTarget?,
|
annotationUseSiteTarget: AnnotationUseSiteTarget? = null,
|
||||||
): String where T : KtAnnotatedSymbol, T : KtSymbolWithVisibility, T : KtCallableSymbol {
|
): String where T : KtAnnotatedSymbol, T : KtSymbolWithVisibility, T : KtCallableSymbol {
|
||||||
getJvmNameFromAnnotation(annotationUseSiteTarget)?.let { return it }
|
getJvmNameFromAnnotation(annotationUseSiteTarget.toFilterWithAdditionalNull())?.let { return it }
|
||||||
|
|
||||||
if (visibility != Visibilities.Internal) return defaultName
|
if (visibility != Visibilities.Internal) return defaultName
|
||||||
if (containingClass is KtLightClassForFacade) return defaultName
|
if (containingClass is KtLightClassForFacade) return defaultName
|
||||||
if (hasPublishedApiAnnotation(annotationUseSiteTarget)) return defaultName
|
if (hasPublishedApiAnnotation(annotationUseSiteTarget.toFilter())) return defaultName
|
||||||
|
|
||||||
val moduleName = (ktModule as? KtSourceModule)?.moduleName ?: return defaultName
|
val moduleName = (ktModule as? KtSourceModule)?.moduleName ?: return defaultName
|
||||||
return mangleInternalName(defaultName, moduleName)
|
return mangleInternalName(defaultName, moduleName)
|
||||||
|
|||||||
-1
@@ -50,7 +50,6 @@ internal class SymbolLightSimpleMethod(
|
|||||||
functionSymbol.computeJvmMethodName(
|
functionSymbol.computeJvmMethodName(
|
||||||
functionSymbol.name.asString(),
|
functionSymbol.name.asString(),
|
||||||
this@SymbolLightSimpleMethod.containingClass,
|
this@SymbolLightSimpleMethod.containingClass,
|
||||||
annotationUseSiteTarget = null,
|
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+3
-3
@@ -13,6 +13,7 @@ import org.jetbrains.kotlin.descriptors.annotations.AnnotationUseSiteTarget
|
|||||||
import org.jetbrains.kotlin.light.classes.symbol.annotations.LazyAnnotationsBox
|
import org.jetbrains.kotlin.light.classes.symbol.annotations.LazyAnnotationsBox
|
||||||
import org.jetbrains.kotlin.light.classes.symbol.annotations.NullabilityAnnotationsProvider
|
import org.jetbrains.kotlin.light.classes.symbol.annotations.NullabilityAnnotationsProvider
|
||||||
import org.jetbrains.kotlin.light.classes.symbol.annotations.SymbolAnnotationsProvider
|
import org.jetbrains.kotlin.light.classes.symbol.annotations.SymbolAnnotationsProvider
|
||||||
|
import org.jetbrains.kotlin.light.classes.symbol.annotations.toFilterWithAdditionalNull
|
||||||
import org.jetbrains.kotlin.light.classes.symbol.methods.SymbolLightMethodBase
|
import org.jetbrains.kotlin.light.classes.symbol.methods.SymbolLightMethodBase
|
||||||
import org.jetbrains.kotlin.light.classes.symbol.modifierLists.SymbolLightClassModifierList
|
import org.jetbrains.kotlin.light.classes.symbol.modifierLists.SymbolLightClassModifierList
|
||||||
import org.jetbrains.kotlin.light.classes.symbol.withSymbol
|
import org.jetbrains.kotlin.light.classes.symbol.withSymbol
|
||||||
@@ -34,10 +35,9 @@ internal class SymbolLightParameter(
|
|||||||
annotationsProvider = SymbolAnnotationsProvider(
|
annotationsProvider = SymbolAnnotationsProvider(
|
||||||
ktModule = ktModule,
|
ktModule = ktModule,
|
||||||
annotatedSymbolPointer = parameterSymbolPointer,
|
annotatedSymbolPointer = parameterSymbolPointer,
|
||||||
annotationUseSiteTarget = isConstructorParameterSymbol.ifTrue {
|
annotationUseSiteTargetFilter = isConstructorParameterSymbol.ifTrue {
|
||||||
AnnotationUseSiteTarget.CONSTRUCTOR_PARAMETER
|
AnnotationUseSiteTarget.CONSTRUCTOR_PARAMETER
|
||||||
},
|
}.toFilterWithAdditionalNull(),
|
||||||
acceptAnnotationsWithoutSite = true,
|
|
||||||
),
|
),
|
||||||
additionalAnnotationsProvider = NullabilityAnnotationsProvider(::nullabilityType),
|
additionalAnnotationsProvider = NullabilityAnnotationsProvider(::nullabilityType),
|
||||||
),
|
),
|
||||||
|
|||||||
+2
-2
@@ -20,6 +20,7 @@ import org.jetbrains.kotlin.light.classes.symbol.*
|
|||||||
import org.jetbrains.kotlin.light.classes.symbol.annotations.LazyAnnotationsBox
|
import org.jetbrains.kotlin.light.classes.symbol.annotations.LazyAnnotationsBox
|
||||||
import org.jetbrains.kotlin.light.classes.symbol.annotations.NullabilityAnnotationsProvider
|
import org.jetbrains.kotlin.light.classes.symbol.annotations.NullabilityAnnotationsProvider
|
||||||
import org.jetbrains.kotlin.light.classes.symbol.annotations.SymbolAnnotationsProvider
|
import org.jetbrains.kotlin.light.classes.symbol.annotations.SymbolAnnotationsProvider
|
||||||
|
import org.jetbrains.kotlin.light.classes.symbol.annotations.toFilterWithAdditionalNull
|
||||||
import org.jetbrains.kotlin.light.classes.symbol.methods.SymbolLightMethodBase
|
import org.jetbrains.kotlin.light.classes.symbol.methods.SymbolLightMethodBase
|
||||||
import org.jetbrains.kotlin.light.classes.symbol.modifierLists.SymbolLightClassModifierList
|
import org.jetbrains.kotlin.light.classes.symbol.modifierLists.SymbolLightClassModifierList
|
||||||
import org.jetbrains.kotlin.psi.KtParameter
|
import org.jetbrains.kotlin.psi.KtParameter
|
||||||
@@ -71,8 +72,7 @@ internal class SymbolLightParameterForReceiver private constructor(
|
|||||||
annotationsProvider = SymbolAnnotationsProvider(
|
annotationsProvider = SymbolAnnotationsProvider(
|
||||||
ktModule = ktModule,
|
ktModule = ktModule,
|
||||||
annotatedSymbolPointer = receiverPointer,
|
annotatedSymbolPointer = receiverPointer,
|
||||||
annotationUseSiteTarget = AnnotationUseSiteTarget.RECEIVER,
|
annotationUseSiteTargetFilter = AnnotationUseSiteTarget.RECEIVER.toFilterWithAdditionalNull(),
|
||||||
acceptAnnotationsWithoutSite = true,
|
|
||||||
),
|
),
|
||||||
additionalAnnotationsProvider = NullabilityAnnotationsProvider {
|
additionalAnnotationsProvider = NullabilityAnnotationsProvider {
|
||||||
withReceiverSymbol { receiver ->
|
withReceiverSymbol { receiver ->
|
||||||
|
|||||||
+4
-7
@@ -7,15 +7,13 @@ package org.jetbrains.kotlin.light.classes.symbol.parameters
|
|||||||
|
|
||||||
import com.intellij.psi.PsiModifierList
|
import com.intellij.psi.PsiModifierList
|
||||||
import org.jetbrains.kotlin.analysis.api.KtAnalysisSession
|
import org.jetbrains.kotlin.analysis.api.KtAnalysisSession
|
||||||
|
import org.jetbrains.kotlin.analysis.api.annotations.SetterParameterAnnotationUseSiteTargetFilter
|
||||||
import org.jetbrains.kotlin.analysis.api.symbols.KtPropertySymbol
|
import org.jetbrains.kotlin.analysis.api.symbols.KtPropertySymbol
|
||||||
import org.jetbrains.kotlin.analysis.api.symbols.KtValueParameterSymbol
|
import org.jetbrains.kotlin.analysis.api.symbols.KtValueParameterSymbol
|
||||||
import org.jetbrains.kotlin.analysis.api.symbols.pointers.KtSymbolPointer
|
import org.jetbrains.kotlin.analysis.api.symbols.pointers.KtSymbolPointer
|
||||||
import org.jetbrains.kotlin.asJava.classes.lazyPub
|
import org.jetbrains.kotlin.asJava.classes.lazyPub
|
||||||
import org.jetbrains.kotlin.descriptors.annotations.AnnotationUseSiteTarget
|
import org.jetbrains.kotlin.descriptors.annotations.AnnotationUseSiteTarget
|
||||||
import org.jetbrains.kotlin.light.classes.symbol.annotations.CompositeAnnotationsProvider
|
import org.jetbrains.kotlin.light.classes.symbol.annotations.*
|
||||||
import org.jetbrains.kotlin.light.classes.symbol.annotations.LazyAnnotationsBox
|
|
||||||
import org.jetbrains.kotlin.light.classes.symbol.annotations.NullabilityAnnotationsProvider
|
|
||||||
import org.jetbrains.kotlin.light.classes.symbol.annotations.SymbolAnnotationsProvider
|
|
||||||
import org.jetbrains.kotlin.light.classes.symbol.methods.SymbolLightMethodBase
|
import org.jetbrains.kotlin.light.classes.symbol.methods.SymbolLightMethodBase
|
||||||
import org.jetbrains.kotlin.light.classes.symbol.modifierLists.SymbolLightClassModifierList
|
import org.jetbrains.kotlin.light.classes.symbol.modifierLists.SymbolLightClassModifierList
|
||||||
import org.jetbrains.kotlin.light.classes.symbol.withSymbol
|
import org.jetbrains.kotlin.light.classes.symbol.withSymbol
|
||||||
@@ -48,13 +46,12 @@ internal class SymbolLightSetterParameter(
|
|||||||
SymbolAnnotationsProvider(
|
SymbolAnnotationsProvider(
|
||||||
ktModule = ktModule,
|
ktModule = ktModule,
|
||||||
annotatedSymbolPointer = parameterSymbolPointer,
|
annotatedSymbolPointer = parameterSymbolPointer,
|
||||||
annotationUseSiteTarget = AnnotationUseSiteTarget.SETTER_PARAMETER,
|
annotationUseSiteTargetFilter = AnnotationUseSiteTarget.SETTER_PARAMETER.toFilterWithAdditionalNull(),
|
||||||
acceptAnnotationsWithoutSite = true,
|
|
||||||
),
|
),
|
||||||
SymbolAnnotationsProvider(
|
SymbolAnnotationsProvider(
|
||||||
ktModule = ktModule,
|
ktModule = ktModule,
|
||||||
annotatedSymbolPointer = containingPropertySymbolPointer,
|
annotatedSymbolPointer = containingPropertySymbolPointer,
|
||||||
annotationUseSiteTarget = AnnotationUseSiteTarget.SETTER_PARAMETER,
|
annotationUseSiteTargetFilter = SetterParameterAnnotationUseSiteTargetFilter,
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
additionalAnnotationsProvider = NullabilityAnnotationsProvider(::nullabilityType),
|
additionalAnnotationsProvider = NullabilityAnnotationsProvider(::nullabilityType),
|
||||||
|
|||||||
+6
@@ -120,6 +120,12 @@ public class SymbolLightClassesByPsiForLibraryTestGenerated extends AbstractSymb
|
|||||||
runTest("compiler/testData/asJava/lightClasses/lightClassByPsi/exposedAnonymousType.kt");
|
runTest("compiler/testData/asJava/lightClasses/lightClassByPsi/exposedAnonymousType.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@TestMetadata("fieldModifiers.kt")
|
||||||
|
public void testFieldModifiers() throws Exception {
|
||||||
|
runTest("compiler/testData/asJava/lightClasses/lightClassByPsi/fieldModifiers.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@TestMetadata("generics.kt")
|
@TestMetadata("generics.kt")
|
||||||
public void testGenerics() throws Exception {
|
public void testGenerics() throws Exception {
|
||||||
|
|||||||
+6
@@ -120,6 +120,12 @@ public class SymbolLightClassesByPsiForSourceTestGenerated extends AbstractSymbo
|
|||||||
runTest("compiler/testData/asJava/lightClasses/lightClassByPsi/exposedAnonymousType.kt");
|
runTest("compiler/testData/asJava/lightClasses/lightClassByPsi/exposedAnonymousType.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@TestMetadata("fieldModifiers.kt")
|
||||||
|
public void testFieldModifiers() throws Exception {
|
||||||
|
runTest("compiler/testData/asJava/lightClasses/lightClassByPsi/fieldModifiers.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@TestMetadata("generics.kt")
|
@TestMetadata("generics.kt")
|
||||||
public void testGenerics() throws Exception {
|
public void testGenerics() throws Exception {
|
||||||
|
|||||||
+1
-1
@@ -1,5 +1,5 @@
|
|||||||
public enum AnnotationsOnEnumEntry /* two.AnnotationsOnEnumEntry*/ {
|
public enum AnnotationsOnEnumEntry /* two.AnnotationsOnEnumEntry*/ {
|
||||||
@two.PropertyImplicitly() @two.FieldImplicitly() @two.FieldExplicitly() EntryWithoutConstructor,
|
@two.PropertyImplicitly() @two.PropertyExplicitly() @two.FieldImplicitly() @two.FieldExplicitly() EntryWithoutConstructor,
|
||||||
@two.PropertyImplicitly() @two.FieldImplicitly() EntryWithConstructor,
|
@two.PropertyImplicitly() @two.FieldImplicitly() EntryWithConstructor,
|
||||||
EntryWithConstructor2;
|
EntryWithConstructor2;
|
||||||
|
|
||||||
|
|||||||
-39
@@ -1,39 +0,0 @@
|
|||||||
public enum AnnotationsOnEnumEntry /* two.AnnotationsOnEnumEntry*/ {
|
|
||||||
@two.PropertyImplicitly() @two.PropertyExplicitly() @two.FieldImplicitly() @two.FieldExplicitly() EntryWithoutConstructor,
|
|
||||||
@two.PropertyImplicitly() @two.FieldImplicitly() EntryWithConstructor,
|
|
||||||
EntryWithConstructor2;
|
|
||||||
|
|
||||||
@org.jetbrains.annotations.NotNull()
|
|
||||||
public static two.AnnotationsOnEnumEntry valueOf(java.lang.String) throws java.lang.IllegalArgumentException, java.lang.NullPointerException;// valueOf(java.lang.String)
|
|
||||||
|
|
||||||
@org.jetbrains.annotations.NotNull()
|
|
||||||
public static two.AnnotationsOnEnumEntry[] values();// values()
|
|
||||||
|
|
||||||
private AnnotationsOnEnumEntry(int);// .ctor(int)
|
|
||||||
|
|
||||||
public final void foo();// foo()
|
|
||||||
}
|
|
||||||
|
|
||||||
@java.lang.annotation.Retention(value = java.lang.annotation.RetentionPolicy.RUNTIME)
|
|
||||||
@java.lang.annotation.Target(value = {java.lang.annotation.ElementType.FIELD})
|
|
||||||
@kotlin.annotation.Target(allowedTargets = {kotlin.annotation.AnnotationTarget.FIELD})
|
|
||||||
public abstract @interface FieldExplicitly /* two.FieldExplicitly*/ {
|
|
||||||
}
|
|
||||||
|
|
||||||
@java.lang.annotation.Retention(value = java.lang.annotation.RetentionPolicy.RUNTIME)
|
|
||||||
@java.lang.annotation.Target(value = {java.lang.annotation.ElementType.FIELD})
|
|
||||||
@kotlin.annotation.Target(allowedTargets = {kotlin.annotation.AnnotationTarget.FIELD})
|
|
||||||
public abstract @interface FieldImplicitly /* two.FieldImplicitly*/ {
|
|
||||||
}
|
|
||||||
|
|
||||||
@java.lang.annotation.Retention(value = java.lang.annotation.RetentionPolicy.RUNTIME)
|
|
||||||
@java.lang.annotation.Target(value = {})
|
|
||||||
@kotlin.annotation.Target(allowedTargets = {kotlin.annotation.AnnotationTarget.PROPERTY})
|
|
||||||
public abstract @interface PropertyExplicitly /* two.PropertyExplicitly*/ {
|
|
||||||
}
|
|
||||||
|
|
||||||
@java.lang.annotation.Retention(value = java.lang.annotation.RetentionPolicy.RUNTIME)
|
|
||||||
@java.lang.annotation.Target(value = {})
|
|
||||||
@kotlin.annotation.Target(allowedTargets = {kotlin.annotation.AnnotationTarget.PROPERTY})
|
|
||||||
public abstract @interface PropertyImplicitly /* two.PropertyImplicitly*/ {
|
|
||||||
}
|
|
||||||
+19
@@ -0,0 +1,19 @@
|
|||||||
|
public final class FieldModifiersKt /* FieldModifiersKt*/ {
|
||||||
|
@kotlin.jvm.Transient()
|
||||||
|
@kotlin.jvm.Volatile()
|
||||||
|
@org.jetbrains.annotations.NotNull()
|
||||||
|
private static transient volatile java.lang.String explicit;
|
||||||
|
|
||||||
|
@kotlin.jvm.Transient()
|
||||||
|
@kotlin.jvm.Volatile()
|
||||||
|
private static transient volatile int implicit;
|
||||||
|
|
||||||
|
@org.jetbrains.annotations.NotNull()
|
||||||
|
public static final java.lang.String getExplicit();// getExplicit()
|
||||||
|
|
||||||
|
public static final int getImplicit();// getImplicit()
|
||||||
|
|
||||||
|
public static final void setExplicit(@org.jetbrains.annotations.NotNull() java.lang.String);// setExplicit(java.lang.String)
|
||||||
|
|
||||||
|
public static final void setImplicit(int);// setImplicit(int)
|
||||||
|
}
|
||||||
@@ -0,0 +1,19 @@
|
|||||||
|
public final class FieldModifiersKt /* FieldModifiersKt*/ {
|
||||||
|
@kotlin.jvm.Transient()
|
||||||
|
@kotlin.jvm.Volatile()
|
||||||
|
@org.jetbrains.annotations.NotNull()
|
||||||
|
private static transient volatile java.lang.String explicit = "1" /* initializer type: java.lang.String */;
|
||||||
|
|
||||||
|
@kotlin.jvm.Transient()
|
||||||
|
@kotlin.jvm.Volatile()
|
||||||
|
private static transient volatile int implicit = 0 /* initializer type: int */;
|
||||||
|
|
||||||
|
@org.jetbrains.annotations.NotNull()
|
||||||
|
public static final java.lang.String getExplicit();// getExplicit()
|
||||||
|
|
||||||
|
public static final int getImplicit();// getImplicit()
|
||||||
|
|
||||||
|
public static final void setExplicit(@org.jetbrains.annotations.NotNull() java.lang.String);// setExplicit(java.lang.String)
|
||||||
|
|
||||||
|
public static final void setImplicit(int);// setImplicit(int)
|
||||||
|
}
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
@Volatile
|
||||||
|
@Transient
|
||||||
|
var implicit: Int = 0
|
||||||
|
|
||||||
|
@field:Volatile
|
||||||
|
@field:Transient
|
||||||
|
var explicit: String = "1"
|
||||||
+15
@@ -0,0 +1,15 @@
|
|||||||
|
public final class FieldModifiersKt /* FieldModifiersKt*/ {
|
||||||
|
@org.jetbrains.annotations.NotNull()
|
||||||
|
private static transient volatile java.lang.String explicit;
|
||||||
|
|
||||||
|
private static transient volatile int implicit;
|
||||||
|
|
||||||
|
@org.jetbrains.annotations.NotNull()
|
||||||
|
public static final java.lang.String getExplicit();// getExplicit()
|
||||||
|
|
||||||
|
public static final int getImplicit();// getImplicit()
|
||||||
|
|
||||||
|
public static final void setExplicit(@org.jetbrains.annotations.NotNull() java.lang.String);// setExplicit(java.lang.String)
|
||||||
|
|
||||||
|
public static final void setImplicit(int);// setImplicit(int)
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user