Special order of usage processing is not needed anymore

This commit is contained in:
Valentin Kipyatkov
2017-05-23 17:14:58 +03:00
parent c69375ebdc
commit 545384910c
@@ -86,29 +86,6 @@ private fun UsageReplacementStrategy.doRefactoringInside(
} }
} }
// Sort them in the following order: children first, parents second
// NB: this is topological sort implementation
private fun Collection<KtSimpleNameExpression>.sortChildrenFirst(): List<KtSimpleNameExpression> {
val usagesSet = toSet()
val result = mutableListOf<KtSimpleNameExpression>()
val visited = hashSetOf<KtSimpleNameExpression>()
fun visit(expr: KtSimpleNameExpression) {
if (expr in visited) return
visited += expr
expr.parent.forEachDescendantOfType<KtSimpleNameExpression> {
if (it != expr && it in usagesSet) visit(it)
}
result += expr
}
this.forEach(::visit)
assert(result.size == this.size)
return result
}
fun UsageReplacementStrategy.replaceUsages( fun UsageReplacementStrategy.replaceUsages(
usages: Collection<KtSimpleNameExpression>, usages: Collection<KtSimpleNameExpression>,
targetPsiElement: PsiElement, targetPsiElement: PsiElement,
@@ -157,7 +134,7 @@ private fun UsageReplacementStrategy.processUsages(
importsToDelete: MutableList<KtImportDirective> importsToDelete: MutableList<KtImportDirective>
): Boolean { ): Boolean {
var invalidUsagesFound = false var invalidUsagesFound = false
for (usage in usages.sortChildrenFirst()) { for (usage in usages) {
try { try {
if (!usage.isValid) { if (!usage.isValid) {
invalidUsagesFound = true invalidUsagesFound = true