Refactored code
This commit is contained in:
@@ -109,41 +109,14 @@ private class PropertyDetector(
|
|||||||
methodsToCheck.add(method to (superInfo as SuperInfo.Property?))
|
methodsToCheck.add(method to (superInfo as SuperInfo.Property?))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
val propertyNamesWithConflict = HashSet<String>()
|
val propertyNamesWithConflict = HashSet<String>()
|
||||||
val prohibitedPropertyNames = psiClass.fields.map { it.name }.toMutableSet() //TODO: fields from base
|
val prohibitedPropertyNames = psiClass.fields.map { it.name }.toMutableSet() //TODO: fields from base
|
||||||
|
|
||||||
val propertyNameToGetterInfo = LinkedHashMap<String, AccessorInfo>()
|
val propertyNameToGetterInfo = detectGetters(methodsToCheck, prohibitedPropertyNames, propertyNamesWithConflict)
|
||||||
for ((method, superInfo) in methodsToCheck) {
|
|
||||||
val info = getGetterInfo(method, superInfo) ?: continue
|
|
||||||
|
|
||||||
val prevInfo = propertyNameToGetterInfo[info.propertyName]
|
val propertyNameToSetterInfo = detectSetters(methodsToCheck, prohibitedPropertyNames, propertyNameToGetterInfo.keySet(), propertyNamesWithConflict)
|
||||||
if (prevInfo != null) {
|
|
||||||
propertyNamesWithConflict.add(info.propertyName)
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
|
|
||||||
propertyNameToGetterInfo[info.propertyName] = info
|
val propertyNames = propertyNameToGetterInfo.keySet() + propertyNameToSetterInfo.keySet()
|
||||||
info.field?.let { prohibitedPropertyNames.remove(it.name) }
|
|
||||||
}
|
|
||||||
|
|
||||||
var propertyNames: Set<String> = propertyNameToGetterInfo.keySet()
|
|
||||||
|
|
||||||
val propertyNameToSetterInfo = LinkedHashMap<String, AccessorInfo>()
|
|
||||||
for ((method, superInfo) in methodsToCheck) {
|
|
||||||
val info = getSetterInfo(method, superInfo, propertyNames) ?: continue
|
|
||||||
|
|
||||||
val prevInfo = propertyNameToSetterInfo[info.propertyName]
|
|
||||||
if (prevInfo != null) {
|
|
||||||
propertyNamesWithConflict.add(info.propertyName)
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
|
|
||||||
propertyNameToSetterInfo[info.propertyName] = info
|
|
||||||
info.field?.let { prohibitedPropertyNames.remove(it.name) }
|
|
||||||
}
|
|
||||||
|
|
||||||
propertyNames = propertyNames + propertyNameToSetterInfo.keySet()
|
|
||||||
|
|
||||||
val memberToPropertyInfo = HashMap<PsiMember, PropertyInfo>()
|
val memberToPropertyInfo = HashMap<PsiMember, PropertyInfo>()
|
||||||
for (propertyName in propertyNames) {
|
for (propertyName in propertyNames) {
|
||||||
@@ -230,6 +203,49 @@ private class PropertyDetector(
|
|||||||
return memberToPropertyInfo
|
return memberToPropertyInfo
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun detectGetters(
|
||||||
|
methodsToCheck: List<Pair<PsiMethod, SuperInfo.Property?>>,
|
||||||
|
prohibitedPropertyNames: MutableSet<String?>,
|
||||||
|
propertyNamesWithConflict: HashSet<String>
|
||||||
|
): Map<String, AccessorInfo> {
|
||||||
|
val propertyNameToGetterInfo = LinkedHashMap<String, AccessorInfo>()
|
||||||
|
for ((method, superInfo) in methodsToCheck) {
|
||||||
|
val info = getGetterInfo(method, superInfo) ?: continue
|
||||||
|
|
||||||
|
val prevInfo = propertyNameToGetterInfo[info.propertyName]
|
||||||
|
if (prevInfo != null) {
|
||||||
|
propertyNamesWithConflict.add(info.propertyName)
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
propertyNameToGetterInfo[info.propertyName] = info
|
||||||
|
info.field?.let { prohibitedPropertyNames.remove(it.name) }
|
||||||
|
}
|
||||||
|
return propertyNameToGetterInfo
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun detectSetters(
|
||||||
|
methodsToCheck: List<Pair<PsiMethod, SuperInfo.Property?>>,
|
||||||
|
prohibitedPropertyNames: MutableSet<String?>,
|
||||||
|
propertyNamesFromGetters: Set<String>,
|
||||||
|
propertyNamesWithConflict: HashSet<String>
|
||||||
|
): Map<String, AccessorInfo> {
|
||||||
|
val propertyNameToSetterInfo = LinkedHashMap<String, AccessorInfo>()
|
||||||
|
for ((method, superInfo) in methodsToCheck) {
|
||||||
|
val info = getSetterInfo(method, superInfo, propertyNamesFromGetters) ?: continue
|
||||||
|
|
||||||
|
val prevInfo = propertyNameToSetterInfo[info.propertyName]
|
||||||
|
if (prevInfo != null) {
|
||||||
|
propertyNamesWithConflict.add(info.propertyName)
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
propertyNameToSetterInfo[info.propertyName] = info
|
||||||
|
info.field?.let { prohibitedPropertyNames.remove(it.name) }
|
||||||
|
}
|
||||||
|
return propertyNameToSetterInfo
|
||||||
|
}
|
||||||
|
|
||||||
private fun dropPropertiesWithConflictingAccessors(memberToPropertyInfo: MutableMap<PsiMember, PropertyInfo>) {
|
private fun dropPropertiesWithConflictingAccessors(memberToPropertyInfo: MutableMap<PsiMember, PropertyInfo>) {
|
||||||
val propertyInfos = memberToPropertyInfo.values().distinct()
|
val propertyInfos = memberToPropertyInfo.values().distinct()
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user