Avoid usage duplication for declarations with multiple light elements

This commit is contained in:
Alexey Sedunov
2014-01-30 18:50:21 +04:00
parent fbb1c2921b
commit 95187cd035
@@ -67,7 +67,7 @@ public class KotlinSafeDeleteProcessor : JavaSafeDeleteProcessor() {
return NonCodeUsageSearchInfo(getIgnoranceCondition(), element)
}
fun findUsagesByJavaProcessor(element: PsiElement): NonCodeUsageSearchInfo? {
fun findUsagesByJavaProcessor(element: PsiElement, forceReferencedElementUnwrapping: Boolean): NonCodeUsageSearchInfo? {
val javaUsages = ArrayList<UsageInfo>()
val searchInfo = super.findUsages(element, allElementsToDelete, javaUsages)
@@ -92,7 +92,9 @@ public class KotlinSafeDeleteProcessor : JavaSafeDeleteProcessor() {
else {
usageElement.getParentByType(javaClass<JetImportDirective>())?.let { importDirective ->
SafeDeleteImportDirectiveUsageInfo(importDirective, element.unwrapped as JetDeclaration)
} ?: usageInfo
} ?: if (forceReferencedElementUnwrapping) {
SafeDeleteReferenceJavaDeleteUsageInfo(usageElement, element.unwrapped, usageInfo.isSafeDelete())
} else usageInfo
}
}
@@ -105,7 +107,7 @@ public class KotlinSafeDeleteProcessor : JavaSafeDeleteProcessor() {
fun findUsagesByJavaProcessor(elements: Iterator<PsiElement>, insideDeleted: Condition<PsiElement>): Condition<PsiElement> =
elements
.map { element -> findUsagesByJavaProcessor(element)?.getInsideDeletedCondition() }
.map { element -> findUsagesByJavaProcessor(element, true)?.getInsideDeletedCondition() }
.filterNotNull()
.fold(insideDeleted) {(condition1, condition2) -> Conditions.or(condition1, condition2) }
@@ -161,19 +163,19 @@ public class KotlinSafeDeleteProcessor : JavaSafeDeleteProcessor() {
val searchInfo = when (element) {
is JetClassOrObject ->
element.toLightClass()?.let { klass -> findUsagesByJavaProcessor(klass) }
element.toLightClass()?.let { klass -> findUsagesByJavaProcessor(klass, false) }
is JetNamedFunction -> {
if (element.isLocal()) {
findKotlinDeclarationUsages(element)
}
else {
element.getRepresentativeLightMethod()?.let { method -> findUsagesByJavaProcessor(method) }
element.getRepresentativeLightMethod()?.let { method -> findUsagesByJavaProcessor(method, false) }
}
}
is PsiMethod ->
findUsagesByJavaProcessor(element)
findUsagesByJavaProcessor(element, false)
is JetProperty -> {
if (element.isLocal()) {