[Test gen] Reduce Kotlin reflection usage
This commit is contained in:
committed by
Space Team
parent
6cfe81de50
commit
7ca6624af4
+7
-12
@@ -9,17 +9,13 @@ import org.jetbrains.kotlin.generators.model.DefaultTargetBackendComputer
|
||||
import org.jetbrains.kotlin.generators.model.TargetBackendComputer
|
||||
import org.jetbrains.kotlin.test.TargetBackend
|
||||
import org.jetbrains.kotlin.test.runners.RunnerWithTargetBackendForTestGeneratorMarker
|
||||
import kotlin.reflect.KClass
|
||||
import kotlin.reflect.full.createInstance
|
||||
import kotlin.reflect.full.declaredMemberProperties
|
||||
import kotlin.reflect.full.isSubclassOf
|
||||
import java.lang.reflect.Modifier
|
||||
|
||||
object ReflectionBasedTargetBackendComputer : TargetBackendComputer {
|
||||
private val runnerMarkerKClass = RunnerWithTargetBackendForTestGeneratorMarker::class
|
||||
private const val TARGET_BACKEND_PROPERTY_NAME = "targetBackend"
|
||||
private val runnerMarkerKClass = RunnerWithTargetBackendForTestGeneratorMarker::class.java
|
||||
|
||||
override fun compute(definedTargetBackend: TargetBackend?, testKClass: KClass<*>): TargetBackend {
|
||||
if (!testKClass.isSubclassOf(runnerMarkerKClass)) return DefaultTargetBackendComputer.compute(definedTargetBackend, testKClass)
|
||||
override fun compute(definedTargetBackend: TargetBackend?, testKClass: Class<*>): TargetBackend {
|
||||
if (!runnerMarkerKClass.isAssignableFrom(testKClass)) return DefaultTargetBackendComputer.compute(definedTargetBackend, testKClass)
|
||||
require(definedTargetBackend == null) {
|
||||
"""
|
||||
Test ${testKClass.simpleName} is inheritor of ${runnerMarkerKClass.simpleName} which means that
|
||||
@@ -27,14 +23,13 @@ object ReflectionBasedTargetBackendComputer : TargetBackendComputer {
|
||||
read from test runner class itself
|
||||
""".trimIndent()
|
||||
}
|
||||
require(testKClass.isOpen) {
|
||||
require(!Modifier.isFinal(testKClass.modifiers)) {
|
||||
"""
|
||||
Test runner ${testKClass.simpleName} which inherits from ${runnerMarkerKClass.simpleName} and used as base class
|
||||
for real test should have `open` modality
|
||||
""".trimIndent()
|
||||
}
|
||||
val instance = testKClass.createInstance() as RunnerWithTargetBackendForTestGeneratorMarker
|
||||
val kProperty = runnerMarkerKClass.declaredMemberProperties.single { it.name == TARGET_BACKEND_PROPERTY_NAME }
|
||||
return kProperty.get(instance) as TargetBackend
|
||||
val instance = testKClass.newInstance() as RunnerWithTargetBackendForTestGeneratorMarker
|
||||
return instance.targetBackend
|
||||
}
|
||||
}
|
||||
|
||||
+5
-7
@@ -10,9 +10,7 @@ import org.jetbrains.kotlin.generators.util.TestGeneratorUtil
|
||||
import org.jetbrains.kotlin.generators.util.extractTagsFromDirectory
|
||||
import org.jetbrains.kotlin.test.TargetBackend
|
||||
import java.io.File
|
||||
import java.util.concurrent.ForkJoinPool
|
||||
import java.util.regex.Pattern
|
||||
import kotlin.reflect.KClass
|
||||
|
||||
fun testGroupSuite(
|
||||
init: TestGroupSuite.() -> Unit
|
||||
@@ -68,13 +66,13 @@ class TestGroup(
|
||||
annotations: List<AnnotationModel> = emptyList(),
|
||||
noinline init: TestClass.() -> Unit
|
||||
) {
|
||||
val testKClass = T::class
|
||||
testClass(testKClass, testKClass.java.name, suiteTestClassName, useJunit4, annotations, init)
|
||||
val testKClass = T::class.java
|
||||
testClass(testKClass, testKClass.name, suiteTestClassName, useJunit4, annotations, init)
|
||||
}
|
||||
|
||||
fun testClass(
|
||||
testKClass: KClass<*>,
|
||||
baseTestClassName: String = testKClass.java.name,
|
||||
testKClass: Class<*>,
|
||||
baseTestClassName: String = testKClass.name,
|
||||
suiteTestClassName: String = getDefaultSuiteTestClassName(baseTestClassName.substringAfterLast('.')),
|
||||
useJunit4: Boolean,
|
||||
annotations: List<AnnotationModel> = emptyList(),
|
||||
@@ -84,7 +82,7 @@ class TestGroup(
|
||||
}
|
||||
|
||||
inner class TestClass(
|
||||
val testKClass: KClass<*>,
|
||||
val testKClass: Class<*>,
|
||||
val baseTestClassName: String,
|
||||
val suiteTestClassName: String,
|
||||
val useJunit4: Boolean,
|
||||
|
||||
+2
-3
@@ -6,14 +6,13 @@
|
||||
package org.jetbrains.kotlin.generators.model
|
||||
|
||||
import org.jetbrains.kotlin.test.TargetBackend
|
||||
import kotlin.reflect.KClass
|
||||
|
||||
fun interface TargetBackendComputer {
|
||||
fun compute(definedTargetBackend: TargetBackend?, testKClass: KClass<*>): TargetBackend
|
||||
fun compute(definedTargetBackend: TargetBackend?, testKClass: Class<*>): TargetBackend
|
||||
}
|
||||
|
||||
object DefaultTargetBackendComputer : TargetBackendComputer {
|
||||
override fun compute(definedTargetBackend: TargetBackend?, testKClass: KClass<*>): TargetBackend {
|
||||
override fun compute(definedTargetBackend: TargetBackend?, testKClass: Class<*>): TargetBackend {
|
||||
return definedTargetBackend ?: TargetBackend.ANY
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user