[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:
committed by
Ilya Kirillov
parent
3e80433356
commit
eccbc66581
+40
@@ -0,0 +1,40 @@
|
||||
/*
|
||||
* 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.impl.base.test.cases.components.symbolInfoProvider
|
||||
|
||||
import org.jetbrains.kotlin.analysis.test.framework.base.AbstractAnalysisApiSingleFileTest
|
||||
import org.jetbrains.kotlin.analysis.test.framework.services.expressionMarkerProvider
|
||||
import org.jetbrains.kotlin.psi.KtAnnotationEntry
|
||||
import org.jetbrains.kotlin.psi.KtFile
|
||||
import org.jetbrains.kotlin.test.model.TestModule
|
||||
import org.jetbrains.kotlin.test.services.TestServices
|
||||
import org.jetbrains.kotlin.test.services.assertions
|
||||
|
||||
abstract class AbstractAnnotationApplicableTargetsTest : AbstractAnalysisApiSingleFileTest() {
|
||||
override fun doTestByFileStructure(ktFile: KtFile, module: TestModule, testServices: TestServices) {
|
||||
val annotationEntry = testServices.expressionMarkerProvider.getElementOfTypeAtCaret<KtAnnotationEntry>(ktFile)
|
||||
val actual = analyseForTest(annotationEntry) {
|
||||
val annotationClassSymbol = annotationEntry.typeReference?.getKtType()?.expandedClassSymbol!!
|
||||
val applicableTargetsInOrder =
|
||||
annotationClassSymbol.annotationApplicableTargets
|
||||
?.map { it.name }
|
||||
?.sorted()
|
||||
?.joinToString(prefix = "[", separator = ", ", postfix = "]")
|
||||
?: "<null>"
|
||||
|
||||
buildString {
|
||||
appendLine("KtAnnotationEntry: ${annotationEntry.text}")
|
||||
appendLine()
|
||||
appendLine("Resolved annotation symbol:")
|
||||
appendLine(annotationClassSymbol.render())
|
||||
appendLine()
|
||||
appendLine("Applicable targets: $applicableTargetsInOrder")
|
||||
}
|
||||
}
|
||||
|
||||
testServices.assertions.assertEqualsToTestDataFileSibling(actual)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user