DeprecatedSymbolUsageInWholeProjectFix uses ReferenceSearch instead of Find Usages

This commit is contained in:
Valentin Kipyatkov
2015-07-31 22:01:20 +03:00
parent c2c6ba59fd
commit e59b621931
@@ -17,26 +17,21 @@
package org.jetbrains.kotlin.idea.quickfix package org.jetbrains.kotlin.idea.quickfix
import com.intellij.codeInsight.intention.IntentionAction import com.intellij.codeInsight.intention.IntentionAction
import com.intellij.find.findUsages.FindUsagesOptions
import com.intellij.openapi.diagnostic.Logger import com.intellij.openapi.diagnostic.Logger
import com.intellij.openapi.editor.Editor import com.intellij.openapi.editor.Editor
import com.intellij.openapi.progress.ProgressIndicator import com.intellij.openapi.progress.ProgressIndicator
import com.intellij.openapi.progress.ProgressManager import com.intellij.openapi.progress.ProgressManager
import com.intellij.openapi.progress.Task import com.intellij.openapi.progress.Task
import com.intellij.openapi.project.Project import com.intellij.openapi.project.Project
import com.intellij.psi.PsiElement
import com.intellij.psi.PsiFile import com.intellij.psi.PsiFile
import com.intellij.psi.search.GlobalSearchScope import com.intellij.psi.search.GlobalSearchScope
import com.intellij.usageView.UsageInfo import com.intellij.psi.search.searches.ReferencesSearch
import com.intellij.util.CommonProcessors
import com.intellij.util.ui.UIUtil import com.intellij.util.ui.UIUtil
import org.jetbrains.kotlin.descriptors.CallableDescriptor import org.jetbrains.kotlin.descriptors.CallableDescriptor
import org.jetbrains.kotlin.diagnostics.Diagnostic import org.jetbrains.kotlin.diagnostics.Diagnostic
import org.jetbrains.kotlin.diagnostics.Errors import org.jetbrains.kotlin.diagnostics.Errors
import org.jetbrains.kotlin.idea.caches.resolve.analyze import org.jetbrains.kotlin.idea.caches.resolve.analyze
import org.jetbrains.kotlin.idea.findUsages.KotlinFindUsagesHandlerFactory import org.jetbrains.kotlin.idea.references.JetSimpleNameReference
import org.jetbrains.kotlin.idea.findUsages.KotlinFunctionFindUsagesOptions
import org.jetbrains.kotlin.idea.findUsages.KotlinPropertyFindUsagesOptions
import org.jetbrains.kotlin.idea.references.mainReference import org.jetbrains.kotlin.idea.references.mainReference
import org.jetbrains.kotlin.idea.stubindex.JetSourceFilterScope import org.jetbrains.kotlin.idea.stubindex.JetSourceFilterScope
import org.jetbrains.kotlin.idea.util.application.executeCommand import org.jetbrains.kotlin.idea.util.application.executeCommand
@@ -87,45 +82,15 @@ public class DeprecatedSymbolUsageInWholeProjectFix(
override fun run(indicator: ProgressIndicator) { override fun run(indicator: ProgressIndicator) {
val usages = runReadAction { val usages = runReadAction {
val searchScope = JetSourceFilterScope.kotlinSources(GlobalSearchScope.projectScope(project), project) val searchScope = JetSourceFilterScope.kotlinSources(GlobalSearchScope.projectScope(project), project)
val findUsagesHandler = KotlinFindUsagesHandlerFactory(project).createFindUsagesHandlerNoQuestions(psiElement) ReferencesSearch.search(psiElement, searchScope)
val processor = CommonProcessors.CollectProcessor<UsageInfo>() .filterIsInstance<JetSimpleNameReference>()
val options = createFindUsagesOptions(psiElement, searchScope, project) .map { ref -> ref.expression }
findUsagesHandler.processElementUsages(psiElement, processor, options)
processor.getResults().map { it.getElement() }.filterIsInstance<JetSimpleNameExpression>()
} }
replaceUsages(project, usages, replacement) replaceUsages(project, usages, replacement)
} }
}) })
} }
private fun createFindUsagesOptions(element: PsiElement, searchScope: GlobalSearchScope, project: Project): FindUsagesOptions {
val options: FindUsagesOptions = when (element) {
is JetNamedFunction -> {
with(KotlinFunctionFindUsagesOptions(project)) {
isSkipImportStatements = true
isOverridingMethods = false
isImplementingMethods = false
isIncludeInherited = false
isIncludeOverloadUsages = false
this
}
}
is JetProperty -> {
with(KotlinPropertyFindUsagesOptions(project)) {
isSkipImportStatements = true
this
}
}
else -> throw IllegalArgumentException(element.toString()) //TODO?
}
options.searchScope = searchScope
options.isSearchForTextOccurrences = false
return options
}
private fun replaceUsages(project: Project, usages: Collection<JetSimpleNameExpression>, replacement: ReplaceWithAnnotationAnalyzer.ReplacementExpression) { private fun replaceUsages(project: Project, usages: Collection<JetSimpleNameExpression>, replacement: ReplaceWithAnnotationAnalyzer.ReplacementExpression) {
UIUtil.invokeLaterIfNeeded { UIUtil.invokeLaterIfNeeded {
project.executeCommand(getText()) { project.executeCommand(getText()) {