Java to Kotlin converter: minor code refactoring

This commit is contained in:
Valentin Kipyatkov
2014-06-20 22:30:00 +04:00
parent 5ac762034a
commit 6135ea5603
+15 -15
View File
@@ -125,21 +125,7 @@ public class Converter private(val project: Project, val settings: ConverterSett
val primaryConstructor = convertedMembers.values().filterIsInstance(javaClass<PrimaryConstructor>()).firstOrNull() val primaryConstructor = convertedMembers.values().filterIsInstance(javaClass<PrimaryConstructor>()).firstOrNull()
val secondaryConstructors = convertedMembers.values().filterIsInstance(javaClass<SecondaryConstructor>()) val secondaryConstructors = convertedMembers.values().filterIsInstance(javaClass<SecondaryConstructor>())
// do not convert private static methods into class object if possible val useClassObject = shouldGenerateClassObject(psiClass, convertedMembers)
val useClassObject = if (psiClass.isEnum()) {
false
}
else {
val members = convertedMembers.keySet().filter { it !is PsiMethod || !it.isConstructor() }
val classObjectMembers = members.filter { it !is PsiClass && it.hasModifierProperty(PsiModifier.STATIC) }
val nestedClasses = members.filterIsInstance(javaClass<PsiClass>()).filter { it.hasModifierProperty(PsiModifier.STATIC) }
if (classObjectMembers.all { it is PsiMethod && it.hasModifierProperty(PsiModifier.PRIVATE) }) {
nestedClasses.any { nestedClass -> classObjectMembers.any { findMethodCalls(it as PsiMethod, nestedClass).isNotEmpty() } }
}
else {
true
}
}
val normalMembers = ArrayList<Member>() val normalMembers = ArrayList<Member>()
val classObjectMembers = ArrayList<Member>() val classObjectMembers = ArrayList<Member>()
@@ -158,6 +144,20 @@ public class Converter private(val project: Project, val settings: ConverterSett
return ClassBody(primaryConstructor, secondaryConstructors, normalMembers, classObjectMembers, lBrace, rBrace) return ClassBody(primaryConstructor, secondaryConstructors, normalMembers, classObjectMembers, lBrace, rBrace)
} }
// do not convert private static methods into class object if possible
private fun shouldGenerateClassObject(psiClass: PsiClass, convertedMembers: Map<PsiMember, Member>): Boolean {
if (psiClass.isEnum()) return false
val members = convertedMembers.keySet().filter { it !is PsiMethod || !it.isConstructor() }
val classObjectMembers = members.filter { it !is PsiClass && it.hasModifierProperty(PsiModifier.STATIC) }
val nestedClasses = members.filterIsInstance(javaClass<PsiClass>()).filter { it.hasModifierProperty(PsiModifier.STATIC) }
if (classObjectMembers.all { it is PsiMethod && it.hasModifierProperty(PsiModifier.PRIVATE) }) {
return nestedClasses.any { nestedClass -> classObjectMembers.any { findMethodCalls(it as PsiMethod, nestedClass).isNotEmpty() } }
}
else {
return true
}
}
private fun convertMember(member: PsiMember, membersToRemove: MutableSet<PsiMember>): Member = when (member) { private fun convertMember(member: PsiMember, membersToRemove: MutableSet<PsiMember>): Member = when (member) {
is PsiMethod -> convertMethod(member, membersToRemove) is PsiMethod -> convertMethod(member, membersToRemove)
is PsiField -> convertField(member) is PsiField -> convertField(member)