111bb461a9
The command line argument parser is using between 0.25s and 0.5s (depending on platform) on finding annotated properties. This fix replaces the slow kotlin reflection with java reflection, which is an order of magnitude faster. #KT-58183 Fixed
41 lines
1.5 KiB
Kotlin
41 lines
1.5 KiB
Kotlin
/*
|
|
* 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.compilerRunner
|
|
|
|
import org.jetbrains.kotlin.cli.common.arguments.Argument
|
|
import org.jetbrains.kotlin.cli.common.arguments.CommonToolArguments
|
|
import org.junit.jupiter.params.ParameterizedTest
|
|
import org.junit.jupiter.params.provider.MethodSource
|
|
import kotlin.reflect.KClass
|
|
import kotlin.reflect.KVisibility
|
|
import kotlin.reflect.full.memberProperties
|
|
import kotlin.reflect.jvm.javaField
|
|
import kotlin.test.fail
|
|
|
|
|
|
class CompilerArgumentsImplementationTest {
|
|
|
|
@ParameterizedTest
|
|
@MethodSource("implementations")
|
|
fun `test - all properties with Argument annotation - are public`(implementation: KClass<out CommonToolArguments>) {
|
|
implementation.memberProperties.forEach { property ->
|
|
if (property.javaField?.getAnnotation(Argument::class.java) != null) {
|
|
if (property.visibility != KVisibility.PUBLIC) {
|
|
fail(
|
|
"Property '${property.name}: ${property.returnType}' " +
|
|
"is marked with @${Argument::class.java.simpleName}, but is not public (${property.visibility})"
|
|
)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
companion object {
|
|
@JvmStatic
|
|
fun implementations() = getCompilerArgumentImplementations()
|
|
}
|
|
}
|