diff --git a/jps/jps-common/src/org/jetbrains/kotlin/arguments/CompilerArgumentsContentProspector.kt b/jps/jps-common/src/org/jetbrains/kotlin/arguments/CompilerArgumentsContentProspector.kt index 4d497f20551..e67fc4a1b57 100644 --- a/jps/jps-common/src/org/jetbrains/kotlin/arguments/CompilerArgumentsContentProspector.kt +++ b/jps/jps-common/src/org/jetbrains/kotlin/arguments/CompilerArgumentsContentProspector.kt @@ -11,33 +11,32 @@ import kotlin.reflect.KType import kotlin.reflect.full.memberProperties object CompilerArgumentsContentProspector { - private val argumentPropertiesCache: MutableMap, List>> = + private val argumentPropertiesCache: MutableMap, Collection>> = mutableMapOf() - private val flagArgumentPropertiesCache: MutableMap, List>> = + private val flagArgumentPropertiesCache: MutableMap, Collection>> = mutableMapOf() - private val stringArgumentPropertiesCache: MutableMap, List>> = + private val stringArgumentPropertiesCache: MutableMap, Collection>> = mutableMapOf() - private val arrayArgumentPropertiesCache: MutableMap, List?>>> = + private val arrayArgumentPropertiesCache: MutableMap, Collection?>>> = mutableMapOf() - private fun getCompilerArguments(kClass: KClass) = argumentPropertiesCache.getOrPut(kClass) { + private fun getCompilerArgumentsProperties(kClass: KClass) = kClass.memberProperties.filter { prop -> prop.annotations.any { it is Argument } } - } - private inline fun List>.filterByReturnType(predicate: (KType?) -> Boolean) = + private inline fun Collection>.filterByReturnType(predicate: (KType?) -> Boolean) = filter { predicate(it.returnType) }.mapNotNull { it.safeAs>() } - fun getFlagCompilerArgumentProperties(kClass: KClass): List> = - flagArgumentPropertiesCache.getOrPut(kClass) { getCompilerArguments(kClass).filterByReturnType { it?.classifier == Boolean::class } } + fun getFlagCompilerArgumentProperties(kClass: KClass): Collection> = + flagArgumentPropertiesCache.getOrPut(kClass) { getCompilerArgumentsProperties(kClass).filterByReturnType { it?.classifier == Boolean::class } } - fun getStringCompilerArgumentProperties(kClass: KClass): List> = - stringArgumentPropertiesCache.getOrPut(kClass) { getCompilerArguments(kClass).filterByReturnType { it?.classifier == String::class } } + fun getStringCompilerArgumentProperties(kClass: KClass): Collection> = + stringArgumentPropertiesCache.getOrPut(kClass) { getCompilerArgumentsProperties(kClass).filterByReturnType { it?.classifier == String::class } } - fun getArrayCompilerArgumentProperties(kClass: KClass): List?>> = - arrayArgumentPropertiesCache.getOrPut(kClass) { getCompilerArguments(kClass).filterByReturnType { (it?.classifier as? KClass<*>)?.java?.isArray == true } } + fun getArrayCompilerArgumentProperties(kClass: KClass): Collection?>> = + arrayArgumentPropertiesCache.getOrPut(kClass) { getCompilerArgumentsProperties(kClass).filterByReturnType { (it?.classifier as? KClass<*>)?.java?.isArray == true } } val freeArgsProperty: KProperty1> get() = CommonToolArguments::freeArgs