Extracted methods
This commit is contained in:
@@ -120,47 +120,54 @@ class AnnotationConverter(private val converter: Converter) {
|
||||
}
|
||||
|
||||
private fun convertAttributeValue(value: PsiAnnotationMemberValue?, expectedType: PsiType?, isVararg: Boolean, isUnnamed: Boolean): List<(CodeConverter) -> Expression> {
|
||||
when (value) {
|
||||
is PsiExpression -> {
|
||||
return listOf({ codeConverter ->
|
||||
val expression = if (value is PsiClassObjectAccessExpression) {
|
||||
val typeElement = converter.convertTypeElement(value.getOperand())
|
||||
ClassLiteralExpression(typeElement.type.toNotNullType())
|
||||
}
|
||||
else {
|
||||
codeConverter.convertExpression(value, expectedType)
|
||||
}
|
||||
expression.assignPrototype(value)
|
||||
})
|
||||
}
|
||||
return when (value) {
|
||||
is PsiExpression -> listOf({ codeConverter -> convertExpressionValue(codeConverter, value, expectedType) })
|
||||
|
||||
is PsiArrayInitializerMemberValue -> {
|
||||
val componentType = (expectedType as? PsiArrayType)?.getComponentType()
|
||||
val componentsConverted = value.getInitializers().map { convertAttributeValue(it, componentType, false, true).single() }
|
||||
val componentGenerators = value.getInitializers().map { convertAttributeValue(it, componentType, false, true).single() }
|
||||
if (isVararg && isUnnamed) {
|
||||
return componentsConverted
|
||||
componentGenerators
|
||||
}
|
||||
else {
|
||||
val expressionGenerator = { codeConverter: CodeConverter ->
|
||||
val expectedTypeConverted = converter.typeConverter.convertType(expectedType)
|
||||
if (expectedTypeConverted is ArrayType) {
|
||||
val array = createArrayInitializerExpression(expectedTypeConverted, componentsConverted.map { it(codeConverter) }, needExplicitType = false)
|
||||
if (isVararg) {
|
||||
StarExpression(array.assignNoPrototype()).assignPrototype(value)
|
||||
}
|
||||
else {
|
||||
array.assignPrototype(value)
|
||||
}
|
||||
}
|
||||
else {
|
||||
DummyStringExpression(value.getText()!!).assignPrototype(value)
|
||||
}
|
||||
}
|
||||
return listOf(expressionGenerator)
|
||||
listOf({ codeConverter -> convertArrayInitializerValue(codeConverter, value, componentGenerators, expectedType, isVararg) })
|
||||
}
|
||||
}
|
||||
|
||||
else -> return listOf({ codeConverter -> DummyStringExpression(value?.getText() ?: "").assignPrototype(value) })
|
||||
else -> listOf({ codeConverter -> DummyStringExpression(value?.getText() ?: "").assignPrototype(value) })
|
||||
}
|
||||
}
|
||||
|
||||
private fun convertExpressionValue(codeConverter: CodeConverter, value: PsiExpression, expectedType: PsiType?): Expression {
|
||||
val expression = if (value is PsiClassObjectAccessExpression) {
|
||||
val typeElement = converter.convertTypeElement(value.getOperand())
|
||||
ClassLiteralExpression(typeElement.type.toNotNullType())
|
||||
}
|
||||
else {
|
||||
codeConverter.convertExpression(value, expectedType)
|
||||
}
|
||||
return expression.assignPrototype(value)
|
||||
}
|
||||
|
||||
private fun convertArrayInitializerValue(
|
||||
codeConverter: CodeConverter,
|
||||
value: PsiArrayInitializerMemberValue,
|
||||
componentGenerators: List<(CodeConverter) -> Expression>,
|
||||
expectedType: PsiType?,
|
||||
isVararg: Boolean
|
||||
): Expression {
|
||||
val expectedTypeConverted = converter.typeConverter.convertType(expectedType)
|
||||
return if (expectedTypeConverted is ArrayType) {
|
||||
val array = createArrayInitializerExpression(expectedTypeConverted, componentGenerators.map { it(codeConverter) }, needExplicitType = false)
|
||||
if (isVararg) {
|
||||
StarExpression(array.assignNoPrototype()).assignPrototype(value)
|
||||
}
|
||||
else {
|
||||
array.assignPrototype(value)
|
||||
}
|
||||
}
|
||||
else {
|
||||
DummyStringExpression(value.getText()!!).assignPrototype(value)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user