diff --git a/idea/src/org/jetbrains/kotlin/idea/findUsages/handlers/DelegatingFindMemberUsagesHandler.kt b/idea/src/org/jetbrains/kotlin/idea/findUsages/handlers/DelegatingFindMemberUsagesHandler.kt index b7c2934d4fa..391313a0152 100644 --- a/idea/src/org/jetbrains/kotlin/idea/findUsages/handlers/DelegatingFindMemberUsagesHandler.kt +++ b/idea/src/org/jetbrains/kotlin/idea/findUsages/handlers/DelegatingFindMemberUsagesHandler.kt @@ -24,8 +24,6 @@ import com.intellij.openapi.actionSystem.DataContext import com.intellij.psi.PsiElement import com.intellij.psi.PsiMethod import com.intellij.psi.PsiParameter -import com.intellij.usageView.UsageInfo -import com.intellij.util.Processor import org.jetbrains.kotlin.idea.findUsages.KotlinCallableFindUsagesOptions import org.jetbrains.kotlin.idea.findUsages.KotlinFindUsagesHandlerFactory import org.jetbrains.kotlin.idea.util.application.runReadAction @@ -75,7 +73,7 @@ class DelegatingFindMemberUsagesHandler( return kotlinHandler.getFindUsagesOptions(dataContext) } - override fun processElementUsages(element: PsiElement, processor: Processor, options: FindUsagesOptions): Boolean { + override fun processElementUsages(element: PsiElement, processor: UsageInfoProcessor, options: FindUsagesOptions): Boolean { val (handler, handlerOptions) = runReadAction { getHandlerAndOptions(element, options) } ?: return true return handler.processElementUsages(element, processor, handlerOptions!!) } diff --git a/idea/src/org/jetbrains/kotlin/idea/findUsages/handlers/KotlinFindClassUsagesHandler.kt b/idea/src/org/jetbrains/kotlin/idea/findUsages/handlers/KotlinFindClassUsagesHandler.kt index deb3943a63c..e75782feec2 100644 --- a/idea/src/org/jetbrains/kotlin/idea/findUsages/handlers/KotlinFindClassUsagesHandler.kt +++ b/idea/src/org/jetbrains/kotlin/idea/findUsages/handlers/KotlinFindClassUsagesHandler.kt @@ -26,7 +26,6 @@ import com.intellij.psi.search.PsiElementProcessor import com.intellij.psi.search.PsiElementProcessorAdapter import com.intellij.psi.search.searches.MethodReferencesSearch import com.intellij.psi.search.searches.ReferencesSearch -import com.intellij.usageView.UsageInfo import com.intellij.util.FilteredQuery import com.intellij.util.Processor import org.jetbrains.kotlin.asJava.elements.KtLightMethod @@ -71,12 +70,12 @@ class KotlinFindClassUsagesHandler( ) } - override fun createSearcher(element: PsiElement, processor: Processor, options: FindUsagesOptions): Searcher { + override fun createSearcher(element: PsiElement, processor: UsageInfoProcessor, options: FindUsagesOptions): Searcher { return MySearcher(element, processor, options) } private class MySearcher( - element: PsiElement, processor: Processor, options: FindUsagesOptions + element: PsiElement, processor: UsageInfoProcessor, options: FindUsagesOptions ) : Searcher(element, processor, options) { private val kotlinOptions = options as KotlinClassFindUsagesOptions diff --git a/idea/src/org/jetbrains/kotlin/idea/findUsages/handlers/KotlinFindMemberUsagesHandler.kt b/idea/src/org/jetbrains/kotlin/idea/findUsages/handlers/KotlinFindMemberUsagesHandler.kt index b5ac7edfa63..3ca3ba49cba 100644 --- a/idea/src/org/jetbrains/kotlin/idea/findUsages/handlers/KotlinFindMemberUsagesHandler.kt +++ b/idea/src/org/jetbrains/kotlin/idea/findUsages/handlers/KotlinFindMemberUsagesHandler.kt @@ -30,6 +30,7 @@ import com.intellij.openapi.progress.ProgressManager import com.intellij.openapi.project.Project import com.intellij.openapi.ui.MessageType import com.intellij.openapi.util.Disposer +import com.intellij.openapi.util.Key import com.intellij.openapi.wm.ToolWindowId import com.intellij.openapi.wm.ToolWindowManager import com.intellij.psi.PsiElement @@ -37,7 +38,6 @@ import com.intellij.psi.PsiReference import com.intellij.psi.search.SearchScope import com.intellij.psi.search.searches.MethodReferencesSearch import com.intellij.psi.search.searches.ReferencesSearch -import com.intellij.usageView.UsageInfo import com.intellij.util.* import org.jetbrains.annotations.TestOnly import org.jetbrains.kotlin.asJava.toLightMethods @@ -67,7 +67,6 @@ import org.jetbrains.kotlin.resolve.findOriginalTopMostOverriddenDescriptors import org.jetbrains.kotlin.resolve.source.getPsi import javax.swing.event.HyperlinkEvent import javax.swing.event.HyperlinkListener -import com.intellij.openapi.util.Key abstract class KotlinFindMemberUsagesHandler protected constructor( declaration: T, @@ -120,7 +119,7 @@ abstract class KotlinFindMemberUsagesHandler protected c factory: KotlinFindUsagesHandlerFactory ) : KotlinFindMemberUsagesHandler(propertyDeclaration, elementsToSearch, factory) { - override fun processElementUsages(element: PsiElement, processor: Processor, options: FindUsagesOptions): Boolean { + override fun processElementUsages(element: PsiElement, processor: UsageInfoProcessor, options: FindUsagesOptions): Boolean { if (ApplicationManager.getApplication().isUnitTestMode || !isPropertyOfDataClass || @@ -218,12 +217,12 @@ abstract class KotlinFindMemberUsagesHandler protected c } } - override fun createSearcher(element: PsiElement, processor: Processor, options: FindUsagesOptions): Searcher { + override fun createSearcher(element: PsiElement, processor: UsageInfoProcessor, options: FindUsagesOptions): Searcher { return MySearcher(element, processor, options) } private inner class MySearcher( - element: PsiElement, processor: Processor, options: FindUsagesOptions + element: PsiElement, processor: UsageInfoProcessor, options: FindUsagesOptions ) : Searcher(element, processor, options) { private val kotlinOptions = options as KotlinCallableFindUsagesOptions diff --git a/idea/src/org/jetbrains/kotlin/idea/findUsages/handlers/KotlinFindUsagesHandler.kt b/idea/src/org/jetbrains/kotlin/idea/findUsages/handlers/KotlinFindUsagesHandler.kt index fd71f0cad42..fb124697a8a 100644 --- a/idea/src/org/jetbrains/kotlin/idea/findUsages/handlers/KotlinFindUsagesHandler.kt +++ b/idea/src/org/jetbrains/kotlin/idea/findUsages/handlers/KotlinFindUsagesHandler.kt @@ -54,7 +54,7 @@ abstract class KotlinFindUsagesHandler( elementsToSearch.toTypedArray() } - private fun searchTextOccurrences(element: PsiElement, processor: Processor, options: FindUsagesOptions): Boolean { + private fun searchTextOccurrences(element: PsiElement, processor: UsageInfoProcessor, options: FindUsagesOptions): Boolean { if (!options.isSearchForTextOccurrences) return false val scope = options.searchScope @@ -70,13 +70,13 @@ abstract class KotlinFindUsagesHandler( return true } - override fun processElementUsages(element: PsiElement, processor: Processor, options: FindUsagesOptions): Boolean { + override fun processElementUsages(element: PsiElement, processor: UsageInfoProcessor, options: FindUsagesOptions): Boolean { return searchReferences(element, processor, options, forHighlight = false) && searchTextOccurrences(element, processor, options) } private fun searchReferences( element: PsiElement, - processor: Processor, + processor: UsageInfoProcessor, options: FindUsagesOptions, forHighlight: Boolean ): Boolean { @@ -85,7 +85,7 @@ abstract class KotlinFindUsagesHandler( return searcher.executeTasks() } - protected abstract fun createSearcher(element: PsiElement, processor: Processor, options: FindUsagesOptions): Searcher + protected abstract fun createSearcher(element: PsiElement, processor: UsageInfoProcessor, options: FindUsagesOptions): Searcher override fun findReferencesToHighlight(target: PsiElement, searchScope: SearchScope): Collection { val results = Collections.synchronizedList(arrayListOf()) @@ -101,7 +101,7 @@ abstract class KotlinFindUsagesHandler( return results } - protected abstract class Searcher(val element: PsiElement, val processor: Processor, val options: FindUsagesOptions) { + protected abstract class Searcher(val element: PsiElement, val processor: UsageInfoProcessor, val options: FindUsagesOptions) { private val tasks = ArrayList<() -> Boolean>() /** @@ -127,7 +127,7 @@ abstract class KotlinFindUsagesHandler( companion object { val LOG = Logger.getInstance(KotlinFindUsagesHandler::class.java) - internal fun processUsage(processor: Processor, ref: PsiReference): Boolean = + internal fun processUsage(processor: UsageInfoProcessor, ref: PsiReference): Boolean = processor.processIfNotNull { when { ref is LightMemberReference -> KotlinReferencePreservingUsageInfo(ref) @@ -136,15 +136,15 @@ abstract class KotlinFindUsagesHandler( } } - internal fun processUsage(processor: Processor, element: PsiElement): Boolean = + internal fun processUsage(processor: UsageInfoProcessor, element: PsiElement): Boolean = processor.processIfNotNull { if (element.isValid) UsageInfo(element) else null } - private fun Processor.processIfNotNull(callback: () -> UsageInfo?): Boolean { + private fun UsageInfoProcessor.processIfNotNull(callback: () -> UsageInfo?): Boolean { val usageInfo = runReadAction(callback) return if (usageInfo != null) process(usageInfo) else true } - internal fun createReferenceProcessor(usageInfoProcessor: Processor): Processor { + internal fun createReferenceProcessor(usageInfoProcessor: UsageInfoProcessor): Processor { val uniqueProcessor = CommonProcessors.UniqueProcessor(usageInfoProcessor) return Processor { processUsage(uniqueProcessor, it) } diff --git a/idea/src/org/jetbrains/kotlin/idea/findUsages/handlers/KotlinTypeParameterFindUsagesHandler.kt b/idea/src/org/jetbrains/kotlin/idea/findUsages/handlers/KotlinTypeParameterFindUsagesHandler.kt index c8082d4bffa..73fe570dbcf 100644 --- a/idea/src/org/jetbrains/kotlin/idea/findUsages/handlers/KotlinTypeParameterFindUsagesHandler.kt +++ b/idea/src/org/jetbrains/kotlin/idea/findUsages/handlers/KotlinTypeParameterFindUsagesHandler.kt @@ -21,8 +21,6 @@ import com.intellij.find.findUsages.FindUsagesOptions import com.intellij.openapi.actionSystem.DataContext import com.intellij.psi.PsiElement import com.intellij.psi.search.searches.ReferencesSearch -import com.intellij.usageView.UsageInfo -import com.intellij.util.Processor import org.jetbrains.kotlin.idea.findUsages.KotlinFindUsagesHandlerFactory import org.jetbrains.kotlin.idea.findUsages.dialogs.KotlinTypeParameterFindUsagesDialog import org.jetbrains.kotlin.psi.KtNamedDeclaration @@ -39,7 +37,7 @@ class KotlinTypeParameterFindUsagesHandler( ) } - override fun createSearcher(element: PsiElement, processor: Processor, options: FindUsagesOptions): Searcher { + override fun createSearcher(element: PsiElement, processor: UsageInfoProcessor, options: FindUsagesOptions): Searcher { return object : Searcher(element, processor, options) { override fun buildTaskList(forHighlight: Boolean): Boolean { addTask { diff --git a/idea/src/org/jetbrains/kotlin/idea/findUsages/handlers/compat.kt b/idea/src/org/jetbrains/kotlin/idea/findUsages/handlers/compat.kt new file mode 100644 index 00000000000..fe7b6835a6d --- /dev/null +++ b/idea/src/org/jetbrains/kotlin/idea/findUsages/handlers/compat.kt @@ -0,0 +1,14 @@ +/* + * Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. + */ + +package org.jetbrains.kotlin.idea.findUsages.handlers + +import com.intellij.slicer.SliceUsage +import com.intellij.usageView.UsageInfo +import com.intellij.util.Processor + +// BUNCH: 193 +typealias UsageInfoProcessor = Processor +typealias SliceUsageProcessor = Processor \ No newline at end of file diff --git a/idea/src/org/jetbrains/kotlin/idea/findUsages/handlers/compat.kt.201 b/idea/src/org/jetbrains/kotlin/idea/findUsages/handlers/compat.kt.201 new file mode 100644 index 00000000000..e7fba094016 --- /dev/null +++ b/idea/src/org/jetbrains/kotlin/idea/findUsages/handlers/compat.kt.201 @@ -0,0 +1,14 @@ +/* + * Copyright 2010-2020 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. + */ + +package org.jetbrains.kotlin.idea.findUsages.handlers + +import com.intellij.slicer.SliceUsage +import com.intellij.usageView.UsageInfo +import com.intellij.util.Processor + +// BUNCH: 193 +typealias UsageInfoProcessor = Processor +typealias SliceUsageProcessor = Processor \ No newline at end of file diff --git a/idea/src/org/jetbrains/kotlin/idea/slicer/KotlinSliceUsage.kt b/idea/src/org/jetbrains/kotlin/idea/slicer/KotlinSliceUsage.kt index cf76c9b283d..b599342464c 100644 --- a/idea/src/org/jetbrains/kotlin/idea/slicer/KotlinSliceUsage.kt +++ b/idea/src/org/jetbrains/kotlin/idea/slicer/KotlinSliceUsage.kt @@ -20,7 +20,7 @@ import com.intellij.psi.PsiElement import com.intellij.slicer.SliceAnalysisParams import com.intellij.slicer.SliceUsage import com.intellij.usageView.UsageInfo -import com.intellij.util.Processor +import org.jetbrains.kotlin.idea.findUsages.handlers.SliceUsageProcessor import org.jetbrains.kotlin.psi.KtExpression open class KotlinSliceUsage : SliceUsage { @@ -57,11 +57,11 @@ open class KotlinSliceUsage : SliceUsage { override fun canBeLeaf() = element != null && lambdaLevel == 0 - public override fun processUsagesFlownDownTo(element: PsiElement, uniqueProcessor: Processor) { + public override fun processUsagesFlownDownTo(element: PsiElement, uniqueProcessor: SliceUsageProcessor) { InflowSlicer(element as? KtExpression ?: return, uniqueProcessor, this).processChildren() } - public override fun processUsagesFlownFromThe(element: PsiElement, uniqueProcessor: Processor) { + public override fun processUsagesFlownFromThe(element: PsiElement, uniqueProcessor: SliceUsageProcessor) { OutflowSlicer(element as? KtExpression ?: return, uniqueProcessor, this).processChildren() } } \ No newline at end of file diff --git a/idea/src/org/jetbrains/kotlin/idea/slicer/Slicer.kt b/idea/src/org/jetbrains/kotlin/idea/slicer/Slicer.kt index 210243feff6..47be93f379b 100644 --- a/idea/src/org/jetbrains/kotlin/idea/slicer/Slicer.kt +++ b/idea/src/org/jetbrains/kotlin/idea/slicer/Slicer.kt @@ -16,9 +16,7 @@ import com.intellij.psi.search.LocalSearchScope import com.intellij.psi.search.SearchScope import com.intellij.psi.search.searches.ReferencesSearch import com.intellij.slicer.JavaSliceUsage -import com.intellij.slicer.SliceUsage import com.intellij.usageView.UsageInfo -import com.intellij.util.Processor import org.jetbrains.kotlin.asJava.namedUnwrappedElement import org.jetbrains.kotlin.builtins.functions.FunctionInvokeDescriptor import org.jetbrains.kotlin.cfg.pseudocode.PseudoValue @@ -36,6 +34,7 @@ import org.jetbrains.kotlin.idea.caches.resolve.* import org.jetbrains.kotlin.idea.core.isOverridable import org.jetbrains.kotlin.idea.findUsages.KotlinFunctionFindUsagesOptions import org.jetbrains.kotlin.idea.findUsages.KotlinPropertyFindUsagesOptions +import org.jetbrains.kotlin.idea.findUsages.handlers.SliceUsageProcessor import org.jetbrains.kotlin.idea.findUsages.processAllExactUsages import org.jetbrains.kotlin.idea.refactoring.changeSignature.KotlinValVar import org.jetbrains.kotlin.idea.refactoring.changeSignature.toValVar @@ -122,7 +121,7 @@ private fun KtParameter.canProcess() = !isVarArg abstract class Slicer( protected val element: KtExpression, - protected val processor: Processor, + protected val processor: SliceUsageProcessor, protected val parentUsage: KotlinSliceUsage ) { protected class PseudocodeCache { @@ -151,7 +150,7 @@ abstract class Slicer( class InflowSlicer( element: KtExpression, - processor: Processor, + processor: SliceUsageProcessor, parentUsage: KotlinSliceUsage ) : Slicer(element, processor, parentUsage) { private fun PsiElement.processHierarchyDownwardAndPass() { @@ -382,7 +381,7 @@ class InflowSlicer( class OutflowSlicer( element: KtExpression, - processor: Processor, + processor: SliceUsageProcessor, parentUsage: KotlinSliceUsage ) : Slicer(element, processor, parentUsage) { private fun KtDeclaration.processVariable() {