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> {
|
private fun convertAttributeValue(value: PsiAnnotationMemberValue?, expectedType: PsiType?, isVararg: Boolean, isUnnamed: Boolean): List<(CodeConverter) -> Expression> {
|
||||||
when (value) {
|
return when (value) {
|
||||||
is PsiExpression -> {
|
is PsiExpression -> listOf({ codeConverter -> convertExpressionValue(codeConverter, value, expectedType) })
|
||||||
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)
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
is PsiArrayInitializerMemberValue -> {
|
is PsiArrayInitializerMemberValue -> {
|
||||||
val componentType = (expectedType as? PsiArrayType)?.getComponentType()
|
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) {
|
if (isVararg && isUnnamed) {
|
||||||
return componentsConverted
|
componentGenerators
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
val expressionGenerator = { codeConverter: CodeConverter ->
|
listOf({ codeConverter -> convertArrayInitializerValue(codeConverter, value, componentGenerators, expectedType, isVararg) })
|
||||||
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)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
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