Fix collecting source retention annotations
#KT-12187 fixed
This commit is contained in:
+36
-8
@@ -16,12 +16,14 @@
|
||||
|
||||
package org.jetbrains.kotlin.annotation
|
||||
|
||||
import org.jetbrains.kotlin.cli.common.messages.MessageCollector
|
||||
import org.jetbrains.kotlin.cli.jvm.compiler.EnvironmentConfigFiles
|
||||
import org.jetbrains.kotlin.cli.jvm.compiler.KotlinCoreEnvironment
|
||||
import org.jetbrains.kotlin.codegen.CodegenTestCase
|
||||
import org.jetbrains.kotlin.codegen.CodegenTestUtil
|
||||
import org.jetbrains.kotlin.codegen.extensions.ClassBuilderInterceptorExtension
|
||||
import org.jetbrains.kotlin.diagnostics.DiagnosticSink
|
||||
import org.jetbrains.kotlin.resolve.jvm.extensions.AnalysisCompletedHandlerExtension
|
||||
import org.jetbrains.kotlin.test.ConfigurationKind
|
||||
import org.jetbrains.kotlin.test.KotlinTestUtils
|
||||
import org.jetbrains.kotlin.test.TestJdkKind
|
||||
@@ -29,13 +31,26 @@ import java.io.File
|
||||
import java.io.StringWriter
|
||||
|
||||
abstract class AbstractAnnotationProcessorBoxTest : CodegenTestCase() {
|
||||
override fun doTest(path: String) {
|
||||
val testName = getTestName(true)
|
||||
val ktFiles = File(path).listFiles { file -> file.isFile && file.extension.toLowerCase() == "kt" }
|
||||
val testFiles = ktFiles.map { TestFile(it.name, it.readText()) }
|
||||
val supportInheritedAnnotations = testName.startsWith("inherited")
|
||||
override fun doTest(path: String) {
|
||||
val testDir = File(path)
|
||||
|
||||
val collectorExtension = createTestEnvironment(supportInheritedAnnotations)
|
||||
fun filesByExtension(ext: String) = testDir.listFiles { file -> file.isFile && file.extension.equals(ext, ignoreCase = true) }
|
||||
|
||||
val testName = getTestName(true)
|
||||
val ktFiles = filesByExtension("kt")
|
||||
val testFiles = ktFiles.map { TestFile(it.name, it.readText()) }
|
||||
val supportInheritedAnnotations = testName.contains("inherited", ignoreCase = true)
|
||||
val supportStubs = testName.contains("stubs", ignoreCase = true)
|
||||
|
||||
val javaSourceRoots = mutableListOf<File>()
|
||||
val javaFiles = filesByExtension("java")
|
||||
if (javaFiles.isNotEmpty()) {
|
||||
val javaFilesDir = KotlinTestUtils.tmpDir("java-files")
|
||||
javaFiles.forEach { it.copyTo(File(javaFilesDir, it.name)) }
|
||||
javaSourceRoots.add(javaFilesDir)
|
||||
}
|
||||
|
||||
val collectorExtension = createTestEnvironment(supportInheritedAnnotations, supportStubs, javaSourceRoots)
|
||||
loadMultiFiles(testFiles)
|
||||
CodegenTestUtil.generateFiles(myEnvironment, myFiles)
|
||||
|
||||
@@ -49,14 +64,27 @@ abstract class AbstractAnnotationProcessorBoxTest : CodegenTestCase() {
|
||||
return "plugins/annotation-collector/testData/codegen/"
|
||||
}
|
||||
|
||||
private fun createTestEnvironment(supportInheritedAnnotations: Boolean): AnnotationCollectorExtensionForTests {
|
||||
val configuration = KotlinTestUtils.compilerConfigurationForTests(ConfigurationKind.ALL, TestJdkKind.MOCK_JDK)
|
||||
private fun createTestEnvironment(
|
||||
supportInheritedAnnotations: Boolean,
|
||||
supportStubs: Boolean,
|
||||
javaSourceRoots: List<File>
|
||||
): AnnotationCollectorExtensionForTests {
|
||||
val configuration = KotlinTestUtils.compilerConfigurationForTests(ConfigurationKind.ALL,
|
||||
TestJdkKind.MOCK_JDK,
|
||||
/* classpath = */ emptyList(),
|
||||
javaSourceRoots)
|
||||
val environment = KotlinCoreEnvironment.createForTests(testRootDisposable!!, configuration, EnvironmentConfigFiles.JVM_CONFIG_FILES)
|
||||
val project = environment.project
|
||||
|
||||
val collectorExtension = AnnotationCollectorExtensionForTests(supportInheritedAnnotations)
|
||||
ClassBuilderInterceptorExtension.registerExtension(project, collectorExtension)
|
||||
|
||||
if (supportStubs) {
|
||||
val stubsDir = KotlinTestUtils.tmpDir("class-stubs")
|
||||
val stubProducerExtension = StubProducerExtension(stubsDir, MessageCollector.NONE)
|
||||
AnalysisCompletedHandlerExtension.registerExtension(project, stubProducerExtension)
|
||||
}
|
||||
|
||||
myEnvironment = environment
|
||||
|
||||
return collectorExtension
|
||||
|
||||
+30
@@ -83,6 +83,12 @@ public class AnnotationProcessorBoxTestGenerated extends AbstractAnnotationProce
|
||||
doTest(fileName);
|
||||
}
|
||||
|
||||
@TestMetadata("inheritedSimple")
|
||||
public void testInheritedSimple() throws Exception {
|
||||
String fileName = KotlinTestUtils.navigationMetadata("plugins/annotation-collector/testData/collectToFile/inheritedSimple/");
|
||||
doTest(fileName);
|
||||
}
|
||||
|
||||
@TestMetadata("inheritedTopLevel")
|
||||
public void testInheritedTopLevel() throws Exception {
|
||||
String fileName = KotlinTestUtils.navigationMetadata("plugins/annotation-collector/testData/collectToFile/inheritedTopLevel/");
|
||||
@@ -125,6 +131,30 @@ public class AnnotationProcessorBoxTestGenerated extends AbstractAnnotationProce
|
||||
doTest(fileName);
|
||||
}
|
||||
|
||||
@TestMetadata("retentionPoliciesJavaAnnotations")
|
||||
public void testRetentionPoliciesJavaAnnotations() throws Exception {
|
||||
String fileName = KotlinTestUtils.navigationMetadata("plugins/annotation-collector/testData/collectToFile/retentionPoliciesJavaAnnotations/");
|
||||
doTest(fileName);
|
||||
}
|
||||
|
||||
@TestMetadata("retentionPoliciesJavaAnnotationsStubs")
|
||||
public void testRetentionPoliciesJavaAnnotationsStubs() throws Exception {
|
||||
String fileName = KotlinTestUtils.navigationMetadata("plugins/annotation-collector/testData/collectToFile/retentionPoliciesJavaAnnotationsStubs/");
|
||||
doTest(fileName);
|
||||
}
|
||||
|
||||
@TestMetadata("retentionPoliciesKotlinAnnotations")
|
||||
public void testRetentionPoliciesKotlinAnnotations() throws Exception {
|
||||
String fileName = KotlinTestUtils.navigationMetadata("plugins/annotation-collector/testData/collectToFile/retentionPoliciesKotlinAnnotations/");
|
||||
doTest(fileName);
|
||||
}
|
||||
|
||||
@TestMetadata("retentionPoliciesKotlinAnnotationsStubs")
|
||||
public void testRetentionPoliciesKotlinAnnotationsStubs() throws Exception {
|
||||
String fileName = KotlinTestUtils.navigationMetadata("plugins/annotation-collector/testData/collectToFile/retentionPoliciesKotlinAnnotationsStubs/");
|
||||
doTest(fileName);
|
||||
}
|
||||
|
||||
@TestMetadata("topLevelAnnotated")
|
||||
public void testTopLevelAnnotated() throws Exception {
|
||||
String fileName = KotlinTestUtils.navigationMetadata("plugins/annotation-collector/testData/collectToFile/topLevelAnnotated/");
|
||||
|
||||
Reference in New Issue
Block a user