201: Processors changed for UsageInfo and SliceUsage

This commit is contained in:
Nikolay Krasko
2020-01-29 17:23:30 +03:00
parent e23f3b54c6
commit 9f6f8088e3
9 changed files with 52 additions and 31 deletions
@@ -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<UsageInfo>, 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!!)
}
@@ -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<UsageInfo>, 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<UsageInfo>, options: FindUsagesOptions
element: PsiElement, processor: UsageInfoProcessor, options: FindUsagesOptions
) : Searcher(element, processor, options) {
private val kotlinOptions = options as KotlinClassFindUsagesOptions
@@ -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<T : KtNamedDeclaration> protected constructor(
declaration: T,
@@ -120,7 +119,7 @@ abstract class KotlinFindMemberUsagesHandler<T : KtNamedDeclaration> protected c
factory: KotlinFindUsagesHandlerFactory
) : KotlinFindMemberUsagesHandler<KtNamedDeclaration>(propertyDeclaration, elementsToSearch, factory) {
override fun processElementUsages(element: PsiElement, processor: Processor<UsageInfo>, 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<T : KtNamedDeclaration> protected c
}
}
override fun createSearcher(element: PsiElement, processor: Processor<UsageInfo>, 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<UsageInfo>, options: FindUsagesOptions
element: PsiElement, processor: UsageInfoProcessor, options: FindUsagesOptions
) : Searcher(element, processor, options) {
private val kotlinOptions = options as KotlinCallableFindUsagesOptions
@@ -54,7 +54,7 @@ abstract class KotlinFindUsagesHandler<T : PsiElement>(
elementsToSearch.toTypedArray()
}
private fun searchTextOccurrences(element: PsiElement, processor: Processor<UsageInfo>, 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<T : PsiElement>(
return true
}
override fun processElementUsages(element: PsiElement, processor: Processor<UsageInfo>, 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<UsageInfo>,
processor: UsageInfoProcessor,
options: FindUsagesOptions,
forHighlight: Boolean
): Boolean {
@@ -85,7 +85,7 @@ abstract class KotlinFindUsagesHandler<T : PsiElement>(
return searcher.executeTasks()
}
protected abstract fun createSearcher(element: PsiElement, processor: Processor<UsageInfo>, options: FindUsagesOptions): Searcher
protected abstract fun createSearcher(element: PsiElement, processor: UsageInfoProcessor, options: FindUsagesOptions): Searcher
override fun findReferencesToHighlight(target: PsiElement, searchScope: SearchScope): Collection<PsiReference> {
val results = Collections.synchronizedList(arrayListOf<PsiReference>())
@@ -101,7 +101,7 @@ abstract class KotlinFindUsagesHandler<T : PsiElement>(
return results
}
protected abstract class Searcher(val element: PsiElement, val processor: Processor<UsageInfo>, 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<T : PsiElement>(
companion object {
val LOG = Logger.getInstance(KotlinFindUsagesHandler::class.java)
internal fun processUsage(processor: Processor<UsageInfo>, 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<T : PsiElement>(
}
}
internal fun processUsage(processor: Processor<UsageInfo>, element: PsiElement): Boolean =
internal fun processUsage(processor: UsageInfoProcessor, element: PsiElement): Boolean =
processor.processIfNotNull { if (element.isValid) UsageInfo(element) else null }
private fun Processor<UsageInfo>.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<UsageInfo>): Processor<PsiReference> {
internal fun createReferenceProcessor(usageInfoProcessor: UsageInfoProcessor): Processor<PsiReference> {
val uniqueProcessor = CommonProcessors.UniqueProcessor(usageInfoProcessor)
return Processor { processUsage(uniqueProcessor, it) }
@@ -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<UsageInfo>, 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 {
@@ -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<UsageInfo>
typealias SliceUsageProcessor = Processor<SliceUsage>
@@ -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<in UsageInfo>
typealias SliceUsageProcessor = Processor<in SliceUsage>
@@ -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<SliceUsage>) {
public override fun processUsagesFlownDownTo(element: PsiElement, uniqueProcessor: SliceUsageProcessor) {
InflowSlicer(element as? KtExpression ?: return, uniqueProcessor, this).processChildren()
}
public override fun processUsagesFlownFromThe(element: PsiElement, uniqueProcessor: Processor<SliceUsage>) {
public override fun processUsagesFlownFromThe(element: PsiElement, uniqueProcessor: SliceUsageProcessor) {
OutflowSlicer(element as? KtExpression ?: return, uniqueProcessor, this).processChildren()
}
}
@@ -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<SliceUsage>,
protected val processor: SliceUsageProcessor,
protected val parentUsage: KotlinSliceUsage
) {
protected class PseudocodeCache {
@@ -151,7 +150,7 @@ abstract class Slicer(
class InflowSlicer(
element: KtExpression,
processor: Processor<SliceUsage>,
processor: SliceUsageProcessor,
parentUsage: KotlinSliceUsage
) : Slicer(element, processor, parentUsage) {
private fun PsiElement.processHierarchyDownwardAndPass() {
@@ -382,7 +381,7 @@ class InflowSlicer(
class OutflowSlicer(
element: KtExpression,
processor: Processor<SliceUsage>,
processor: SliceUsageProcessor,
parentUsage: KotlinSliceUsage
) : Slicer(element, processor, parentUsage) {
private fun KtDeclaration.processVariable() {