Analysis API: add test for annotations on types
This commit is contained in:
+12
@@ -0,0 +1,12 @@
|
||||
/*
|
||||
* Copyright 2010-2021 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.descriptors.test.annotations
|
||||
|
||||
import org.jetbrains.kotlin.analysis.api.descriptors.test.KtFe10FrontendApiTestConfiguratorService
|
||||
import org.jetbrains.kotlin.analysis.api.impl.base.test.annotations.AbstractAnalysisApiAnnotationsOnTypesTest
|
||||
|
||||
abstract class AbstractAnalysisApiFe10AnnotationsOnTypesTest :
|
||||
AbstractAnalysisApiAnnotationsOnTypesTest(KtFe10FrontendApiTestConfiguratorService)
|
||||
+68
@@ -0,0 +1,68 @@
|
||||
/*
|
||||
* Copyright 2010-2021 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.descriptors.test.annotations;
|
||||
|
||||
import com.intellij.testFramework.TestDataPath;
|
||||
import org.jetbrains.kotlin.test.util.KtTestUtil;
|
||||
import org.jetbrains.kotlin.test.TestMetadata;
|
||||
import org.junit.jupiter.api.Nested;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
/** This class is generated by {@link GenerateNewCompilerTests.kt}. DO NOT MODIFY MANUALLY */
|
||||
@SuppressWarnings("all")
|
||||
@TestMetadata("analysis/analysis-api/testData/annotations/annotationsOnTypes")
|
||||
@TestDataPath("$PROJECT_ROOT")
|
||||
public class AnalysisApiFe10AnnotationsOnTypesTestGenerated extends AbstractAnalysisApiFe10AnnotationsOnTypesTest {
|
||||
@Test
|
||||
public void testAllFilesPresentInAnnotationsOnTypes() throws Exception {
|
||||
KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("analysis/analysis-api/testData/annotations/annotationsOnTypes"), Pattern.compile("^(.+)\\.kt$"), null, true);
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("annotaionOnType.kt")
|
||||
public void testAnnotaionOnType() throws Exception {
|
||||
runTest("analysis/analysis-api/testData/annotations/annotationsOnTypes/annotaionOnType.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("annotaionOnTypeArgument.kt")
|
||||
public void testAnnotaionOnTypeArgument() throws Exception {
|
||||
runTest("analysis/analysis-api/testData/annotations/annotationsOnTypes/annotaionOnTypeArgument.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("annotaionOnTypeArgumentOfTypeArgument.kt")
|
||||
public void testAnnotaionOnTypeArgumentOfTypeArgument() throws Exception {
|
||||
runTest("analysis/analysis-api/testData/annotations/annotationsOnTypes/annotaionOnTypeArgumentOfTypeArgument.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("annotaionWithComplexArgumentOnType.kt")
|
||||
public void testAnnotaionWithComplexArgumentOnType() throws Exception {
|
||||
runTest("analysis/analysis-api/testData/annotations/annotationsOnTypes/annotaionWithComplexArgumentOnType.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("annotaionWithComplexArgumentOnTypeArgument.kt")
|
||||
public void testAnnotaionWithComplexArgumentOnTypeArgument() throws Exception {
|
||||
runTest("analysis/analysis-api/testData/annotations/annotationsOnTypes/annotaionWithComplexArgumentOnTypeArgument.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("annotaionWithLiteralArgumentOnType.kt")
|
||||
public void testAnnotaionWithLiteralArgumentOnType() throws Exception {
|
||||
runTest("analysis/analysis-api/testData/annotations/annotationsOnTypes/annotaionWithLiteralArgumentOnType.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("annotaionWithLiteralArgumentOnTypeArgument.kt")
|
||||
public void testAnnotaionWithLiteralArgumentOnTypeArgument() throws Exception {
|
||||
runTest("analysis/analysis-api/testData/annotations/annotationsOnTypes/annotaionWithLiteralArgumentOnTypeArgument.kt");
|
||||
}
|
||||
}
|
||||
+12
@@ -0,0 +1,12 @@
|
||||
/*
|
||||
* Copyright 2010-2021 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.fir.annotations
|
||||
|
||||
import org.jetbrains.kotlin.analysis.api.fir.FirFrontendApiTestConfiguratorService
|
||||
import org.jetbrains.kotlin.analysis.api.impl.base.test.annotations.AbstractAnalysisApiAnnotationsOnTypesTest
|
||||
|
||||
abstract class AbstractAnalysisApiFirAnnotationsOnTypesTest :
|
||||
AbstractAnalysisApiAnnotationsOnTypesTest(FirFrontendApiTestConfiguratorService)
|
||||
+68
@@ -0,0 +1,68 @@
|
||||
/*
|
||||
* Copyright 2010-2021 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.fir.annotations;
|
||||
|
||||
import com.intellij.testFramework.TestDataPath;
|
||||
import org.jetbrains.kotlin.test.util.KtTestUtil;
|
||||
import org.jetbrains.kotlin.test.TestMetadata;
|
||||
import org.junit.jupiter.api.Nested;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
/** This class is generated by {@link GenerateNewCompilerTests.kt}. DO NOT MODIFY MANUALLY */
|
||||
@SuppressWarnings("all")
|
||||
@TestMetadata("analysis/analysis-api/testData/annotations/annotationsOnTypes")
|
||||
@TestDataPath("$PROJECT_ROOT")
|
||||
public class AnalysisApiFirAnnotationsOnTypesTestGenerated extends AbstractAnalysisApiFirAnnotationsOnTypesTest {
|
||||
@Test
|
||||
public void testAllFilesPresentInAnnotationsOnTypes() throws Exception {
|
||||
KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("analysis/analysis-api/testData/annotations/annotationsOnTypes"), Pattern.compile("^(.+)\\.kt$"), null, true);
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("annotaionOnType.kt")
|
||||
public void testAnnotaionOnType() throws Exception {
|
||||
runTest("analysis/analysis-api/testData/annotations/annotationsOnTypes/annotaionOnType.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("annotaionOnTypeArgument.kt")
|
||||
public void testAnnotaionOnTypeArgument() throws Exception {
|
||||
runTest("analysis/analysis-api/testData/annotations/annotationsOnTypes/annotaionOnTypeArgument.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("annotaionOnTypeArgumentOfTypeArgument.kt")
|
||||
public void testAnnotaionOnTypeArgumentOfTypeArgument() throws Exception {
|
||||
runTest("analysis/analysis-api/testData/annotations/annotationsOnTypes/annotaionOnTypeArgumentOfTypeArgument.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("annotaionWithComplexArgumentOnType.kt")
|
||||
public void testAnnotaionWithComplexArgumentOnType() throws Exception {
|
||||
runTest("analysis/analysis-api/testData/annotations/annotationsOnTypes/annotaionWithComplexArgumentOnType.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("annotaionWithComplexArgumentOnTypeArgument.kt")
|
||||
public void testAnnotaionWithComplexArgumentOnTypeArgument() throws Exception {
|
||||
runTest("analysis/analysis-api/testData/annotations/annotationsOnTypes/annotaionWithComplexArgumentOnTypeArgument.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("annotaionWithLiteralArgumentOnType.kt")
|
||||
public void testAnnotaionWithLiteralArgumentOnType() throws Exception {
|
||||
runTest("analysis/analysis-api/testData/annotations/annotationsOnTypes/annotaionWithLiteralArgumentOnType.kt");
|
||||
}
|
||||
|
||||
@Test
|
||||
@TestMetadata("annotaionWithLiteralArgumentOnTypeArgument.kt")
|
||||
public void testAnnotaionWithLiteralArgumentOnTypeArgument() throws Exception {
|
||||
runTest("analysis/analysis-api/testData/annotations/annotationsOnTypes/annotaionWithLiteralArgumentOnTypeArgument.kt");
|
||||
}
|
||||
}
|
||||
+43
@@ -0,0 +1,43 @@
|
||||
/*
|
||||
* Copyright 2010-2021 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.annotations
|
||||
|
||||
import org.jetbrains.kotlin.analysis.api.annotations.annotations
|
||||
import org.jetbrains.kotlin.analysis.api.impl.barebone.test.FrontendApiTestConfiguratorService
|
||||
import org.jetbrains.kotlin.analysis.api.impl.barebone.test.expressionMarkerProvider
|
||||
import org.jetbrains.kotlin.analysis.api.impl.base.test.indented
|
||||
import org.jetbrains.kotlin.analysis.api.impl.base.test.test.framework.AbstractHLApiSingleFileTest
|
||||
import org.jetbrains.kotlin.analysis.api.symbols.DebugSymbolRenderer
|
||||
import org.jetbrains.kotlin.psi.KtFile
|
||||
import org.jetbrains.kotlin.psi.KtTypeReference
|
||||
import org.jetbrains.kotlin.test.model.TestModule
|
||||
import org.jetbrains.kotlin.test.services.TestServices
|
||||
import org.jetbrains.kotlin.test.services.assertions
|
||||
|
||||
abstract class AbstractAnalysisApiAnnotationsOnTypesTest(
|
||||
configurator: FrontendApiTestConfiguratorService
|
||||
) : AbstractHLApiSingleFileTest(configurator) {
|
||||
|
||||
override fun doTestByFileStructure(ktFile: KtFile, module: TestModule, testServices: TestServices) {
|
||||
val ktTypeReference = testServices.expressionMarkerProvider
|
||||
.getElementOfTypAtCaret<KtTypeReference>(ktFile)
|
||||
val actual = analyseForTest(ktFile) {
|
||||
val ktType = ktTypeReference.getKtType()
|
||||
val annotations = ktType.annotations
|
||||
buildString {
|
||||
appendLine("KtTypeReference: ${ktTypeReference.text}")
|
||||
appendLine("annotations: [")
|
||||
for (annotation in annotations) {
|
||||
appendLine(DebugSymbolRenderer.renderAnnotationApplication(annotation).indented(indent = 2))
|
||||
}
|
||||
appendLine("]")
|
||||
}
|
||||
}
|
||||
|
||||
testServices.assertions.assertEqualsToTestDataFileSibling(actual)
|
||||
}
|
||||
}
|
||||
|
||||
+5
@@ -40,4 +40,9 @@ fun KtSymbol.getNameWithPositionString(): String {
|
||||
null -> "null"
|
||||
else -> psi::class.simpleName
|
||||
} + "@" + psi.position()
|
||||
}
|
||||
|
||||
fun String.indented(indent: Int): String {
|
||||
val indentString = " ".repeat(indent)
|
||||
return indentString + replace("\n", "\n$indentString")
|
||||
}
|
||||
+1
-1
@@ -12,7 +12,7 @@ import org.jetbrains.kotlin.test.services.TestServices
|
||||
|
||||
abstract class AbstractHLApiSingleFileTest(configurator: FrontendApiTestConfiguratorService) : AbstractHLApiSingleModuleTest(configurator) {
|
||||
final override fun doTestByFileStructure(ktFiles: List<KtFile>, module: TestModule, testServices: TestServices) {
|
||||
val singleFile = ktFiles.single()
|
||||
val singleFile = ktFiles.singleOrNull() ?: ktFiles.first { it.name == "main.kt" }
|
||||
doTestByFileStructure(singleFile, module, testServices)
|
||||
}
|
||||
|
||||
|
||||
+3
@@ -27,6 +27,9 @@ import kotlin.reflect.full.extensionReceiverParameter
|
||||
public object DebugSymbolRenderer {
|
||||
public fun render(symbol: KtSymbol): String = Block().apply { renderSymbol(symbol) }.toString()
|
||||
|
||||
public fun renderAnnotationApplication(application: KtAnnotationApplication): String =
|
||||
Block().apply { renderAnnotationApplication(application) }.toString()
|
||||
|
||||
public fun renderType(type: KtType): String = Block().apply { renderType(type) }.toString()
|
||||
|
||||
public fun KtAnalysisSession.renderExtra(symbol: KtSymbol): String = Block().apply {
|
||||
|
||||
+6
@@ -0,0 +1,6 @@
|
||||
@Target(AnnotationTarget.TYPE)
|
||||
annotation class TypeAnnotation
|
||||
|
||||
fun x(): @TypeAnnotation Li<caret>st<Int> {
|
||||
TODO()
|
||||
}
|
||||
+5
@@ -0,0 +1,5 @@
|
||||
KtTypeReference: @TypeAnnotation List<Int>
|
||||
annotations: [
|
||||
TypeAnnotation()
|
||||
psi: KtAnnotationEntry
|
||||
]
|
||||
+6
@@ -0,0 +1,6 @@
|
||||
@Target(AnnotationTarget.TYPE)
|
||||
annotation class TypeAnnotation
|
||||
|
||||
fun x(): List<@TypeAnnotation In<caret>t> {
|
||||
TODO()
|
||||
}
|
||||
+5
@@ -0,0 +1,5 @@
|
||||
KtTypeReference: @TypeAnnotation Int
|
||||
annotations: [
|
||||
TypeAnnotation()
|
||||
psi: KtAnnotationEntry
|
||||
]
|
||||
+6
@@ -0,0 +1,6 @@
|
||||
@Target(AnnotationTarget.TYPE)
|
||||
annotation class TypeAnnotation
|
||||
|
||||
fun x(): List<MutableList<@TypeAnnotation I<caret>nt>> {
|
||||
TODO()
|
||||
}
|
||||
+5
@@ -0,0 +1,5 @@
|
||||
KtTypeReference: @TypeAnnotation Int
|
||||
annotations: [
|
||||
TypeAnnotation()
|
||||
psi: KtAnnotationEntry
|
||||
]
|
||||
Vendored
+6
@@ -0,0 +1,6 @@
|
||||
@Target(AnnotationTarget.TYPE)
|
||||
annotation class TypeAnnotation(val value: Int)
|
||||
|
||||
fun x(): @TypeAnnotation(1 + 1) Li<caret>st<Int> {
|
||||
TODO()
|
||||
}
|
||||
analysis/analysis-api/testData/annotations/annotationsOnTypes/annotaionWithComplexArgumentOnType.txt
Vendored
+5
@@ -0,0 +1,5 @@
|
||||
KtTypeReference: @TypeAnnotation(1 + 1) List<Int>
|
||||
annotations: [
|
||||
TypeAnnotation(value = 2)
|
||||
psi: KtAnnotationEntry
|
||||
]
|
||||
+6
@@ -0,0 +1,6 @@
|
||||
@Target(AnnotationTarget.TYPE)
|
||||
annotation class TypeAnnotation(val value: Int)
|
||||
|
||||
fun x(): MutableList<@TypeAnnotation(1 + 1) L<caret>ist<Int>> {
|
||||
TODO()
|
||||
}
|
||||
+5
@@ -0,0 +1,5 @@
|
||||
KtTypeReference: @TypeAnnotation(1 + 1) List<Int>
|
||||
annotations: [
|
||||
TypeAnnotation(value = 2)
|
||||
psi: KtAnnotationEntry
|
||||
]
|
||||
Vendored
+6
@@ -0,0 +1,6 @@
|
||||
@Target(AnnotationTarget.TYPE)
|
||||
annotation class TypeAnnotation(val value: Int)
|
||||
|
||||
fun x(): @TypeAnnotation(1) Li<caret>st<Int> {
|
||||
TODO()
|
||||
}
|
||||
analysis/analysis-api/testData/annotations/annotationsOnTypes/annotaionWithLiteralArgumentOnType.txt
Vendored
+5
@@ -0,0 +1,5 @@
|
||||
KtTypeReference: @TypeAnnotation(1) List<Int>
|
||||
annotations: [
|
||||
TypeAnnotation(value = 1)
|
||||
psi: KtAnnotationEntry
|
||||
]
|
||||
+6
@@ -0,0 +1,6 @@
|
||||
@Target(AnnotationTarget.TYPE)
|
||||
annotation class TypeAnnotation(val value: Int)
|
||||
|
||||
fun x(): List<@TypeAnnotation(1) I<caret>nt> {
|
||||
TODO()
|
||||
}
|
||||
+5
@@ -0,0 +1,5 @@
|
||||
KtTypeReference: @TypeAnnotation(1) Int
|
||||
annotations: [
|
||||
TypeAnnotation(value = 1)
|
||||
psi: KtAnnotationEntry
|
||||
]
|
||||
+11
@@ -5,6 +5,7 @@
|
||||
|
||||
package org.jetbrains.kotlin.generators.tests.analysis.api
|
||||
|
||||
import org.jetbrains.kotlin.analysis.api.descriptors.test.annotations.AbstractAnalysisApiFe10AnnotationsOnTypesTest
|
||||
import org.jetbrains.kotlin.analysis.api.descriptors.test.components.callResolver.AbstractKtFe10ResolveCallTest
|
||||
import org.jetbrains.kotlin.analysis.api.descriptors.test.components.compileTimeConstantProvider.AbstractKtFe10CompileTimeConstantEvaluatorTest
|
||||
import org.jetbrains.kotlin.analysis.api.descriptors.test.components.expressionInfoProvider.AbstractKtFe10ReturnTargetSymbolTest
|
||||
@@ -20,6 +21,7 @@ import org.jetbrains.kotlin.analysis.api.descriptors.test.symbols.AbstractKtFe10
|
||||
import org.jetbrains.kotlin.analysis.api.descriptors.test.symbols.AbstractKtFe10SymbolByPsiTest
|
||||
import org.jetbrains.kotlin.analysis.api.descriptors.test.symbols.AbstractKtFe10SymbolByReferenceTest
|
||||
import org.jetbrains.kotlin.analysis.api.fir.AbstractFirReferenceResolveTest
|
||||
import org.jetbrains.kotlin.analysis.api.fir.annotations.AbstractAnalysisApiFirAnnotationsOnTypesTest
|
||||
import org.jetbrains.kotlin.analysis.api.fir.components.callResolver.AbstractFirResolveCallTest
|
||||
import org.jetbrains.kotlin.analysis.api.fir.components.compileTimeConstantProvider.AbstractFirCompileTimeConstantEvaluatorTest
|
||||
import org.jetbrains.kotlin.analysis.api.fir.components.expressionInfoProvider.AbstractFirReturnTargetSymbolTest
|
||||
@@ -102,6 +104,15 @@ private fun TestGroupSuite.generateAnalysisApiNonComponentsTests() {
|
||||
model("symbolByReference")
|
||||
}
|
||||
}
|
||||
|
||||
group("annotations") {
|
||||
test(
|
||||
fir = AbstractAnalysisApiFirAnnotationsOnTypesTest::class,
|
||||
fe10 = AbstractAnalysisApiFe10AnnotationsOnTypesTest::class
|
||||
) {
|
||||
model("annotationsOnTypes")
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user