Remove utility method from AnnotationDescriptor interface

This commit is contained in:
Alexander Udalov
2014-11-28 21:26:17 +03:00
parent 328dedc415
commit 66774c0fd1
5 changed files with 41 additions and 68 deletions
@@ -70,40 +70,36 @@ class LazyJavaAnnotationDescriptor(
override fun getType(): JetType = type()
private val nameToArgument = c.storageManager.createLazyValue {
var arguments: Collection<JavaAnnotationArgument> = javaAnnotation.getArguments()
if (arguments.isEmpty() && fqName()?.asString() == "java.lang.Deprecated") {
arguments = listOf(DEPRECATED_IN_JAVA)
}
arguments.valuesToMap { it.name }
}
private val valueArguments = c.storageManager.createMemoizedFunctionWithNullableValues<ValueParameterDescriptor, CompileTimeConstant<*>> {
valueParameter ->
val nameToArg = nameToArgument()
var javaAnnotationArgument = nameToArg[valueParameter.getName()]
if (javaAnnotationArgument == null && valueParameter.getName() == DEFAULT_ANNOTATION_MEMBER_NAME) {
javaAnnotationArgument = nameToArg[null]
}
resolveAnnotationArgument(javaAnnotationArgument)
}
override fun getValueArgument(valueParameterDescriptor: ValueParameterDescriptor) = valueArguments(valueParameterDescriptor)
private val allValueArguments = c.storageManager.createLazyValue {
val constructors = getAnnotationClass().getConstructors()
if (constructors.isEmpty())
mapOf<ValueParameterDescriptor, CompileTimeConstant<*>>()
else
constructors.first().getValueParameters().keysToMapExceptNulls {
vp -> getValueArgument(vp)
}
computeValueArguments()
}
override fun getAllValueArguments() = allValueArguments()
private fun computeValueArguments(): Map<ValueParameterDescriptor, CompileTimeConstant<*>> {
val constructors = getAnnotationClass().getConstructors()
if (constructors.isEmpty()) return mapOf()
val nameToArg = nameToArgument()
return constructors.first().getValueParameters().keysToMapExceptNulls { valueParameter ->
var javaAnnotationArgument = nameToArg[valueParameter.getName()]
if (javaAnnotationArgument == null && valueParameter.getName() == DEFAULT_ANNOTATION_MEMBER_NAME) {
javaAnnotationArgument = nameToArg[null]
}
resolveAnnotationArgument(javaAnnotationArgument)
}
}
private fun nameToArgument(): Map<Name?, JavaAnnotationArgument> {
var arguments = javaAnnotation.getArguments()
if (arguments.isEmpty() && fqName()?.asString() == "java.lang.Deprecated") {
arguments = listOf(DEPRECATED_IN_JAVA)
}
return arguments.valuesToMap { it.name }
}
private fun getAnnotationClass() = getType().getConstructor().getDeclarationDescriptor() as ClassDescriptor
private fun resolveAnnotationArgument(argument: JavaAnnotationArgument?): CompileTimeConstant<*>? {