Java to Kotlin converter: minor code refactoring

This commit is contained in:
Valentin Kipyatkov
2014-06-24 14:31:48 +04:00
parent a99f6f3774
commit 73ba1af779
+14 -7
View File
@@ -286,25 +286,32 @@ public class Converter private(val project: Project, val settings: ConverterSett
convertElement(field.getArgumentList())) convertElement(field.getArgumentList()))
} }
else { else {
val initializer = field.getInitializer()
val convertedType = typeConverter.convertVariableType(field) val convertedType = typeConverter.convertVariableType(field)
val isVal = isVal(field) val isVal = isVal(field)
val omitType = !settings.specifyFieldTypeByDefault &&
initializer != null &&
(modifiers.isPrivate && (isVal || convertedType == typeConverter.convertExpressionType(initializer)) ||
modifiers.isInternal && convertedType == typeConverter.convertExpressionType(initializer))
Field(name, Field(name,
annotations, annotations,
modifiers, modifiers,
convertedType, convertedType,
convertExpression(initializer, field.getType()), convertExpression(field.getInitializer(), field.getType()),
isVal, isVal,
!omitType, shouldDeclareType(field, isVal, convertedType),
field.hasWriteAccesses(field.getContainingClass())) field.hasWriteAccesses(field.getContainingClass()))
} }
return converted.assignPrototype(field) return converted.assignPrototype(field)
} }
private fun shouldDeclareType(field: PsiField, isVal: Boolean, convertedType: Type): Boolean {
if (settings.specifyFieldTypeByDefault) return true
val initializer = field.getInitializer() ?: return true
fun typeMatches() = convertedType == typeConverter.convertExpressionType(initializer)
return if (field.hasModifierProperty(PsiModifier.PRIVATE))
!isVal && !typeMatches()
else if (field.hasModifierProperty(PsiModifier.PACKAGE_LOCAL))
!typeMatches()
else
true
}
private fun isVal(field: PsiField): Boolean { private fun isVal(field: PsiField): Boolean {
if (field.hasModifierProperty(PsiModifier.FINAL)) return true if (field.hasModifierProperty(PsiModifier.FINAL)) return true
if (!field.hasModifierProperty(PsiModifier.PRIVATE)) return false if (!field.hasModifierProperty(PsiModifier.PRIVATE)) return false