Down-shift to plain search if reference in unknown language encountered

This commit is contained in:
Valentin Kipyatkov
2016-09-05 17:40:28 +03:00
parent e314e22215
commit 5b638f51b0
26 changed files with 143 additions and 127 deletions
@@ -16,6 +16,8 @@
package org.jetbrains.kotlin.idea.search package org.jetbrains.kotlin.idea.search
import com.intellij.openapi.fileTypes.FileType
import com.intellij.openapi.fileTypes.FileTypeRegistry
import com.intellij.openapi.project.Project import com.intellij.openapi.project.Project
import com.intellij.psi.PsiElement import com.intellij.psi.PsiElement
import com.intellij.psi.PsiFile import com.intellij.psi.PsiFile
@@ -65,6 +67,23 @@ fun SearchScope.restrictToKotlinSources(): SearchScope {
} }
} }
fun SearchScope.excludeKotlinSources(): SearchScope = excludeFileTypes(KotlinFileType.INSTANCE)
fun SearchScope.excludeFileTypes(vararg fileTypes: FileType): SearchScope {
if (this is GlobalSearchScope) {
val includedFileTypes = FileTypeRegistry.getInstance().registeredFileTypes.filter { it !in fileTypes }.toTypedArray()
return GlobalSearchScope.getScopeRestrictedByFileTypes(this, *includedFileTypes)
}
else {
this as LocalSearchScope
val filteredElements = scope.filter { it.containingFile.fileType !in fileTypes }
return if (filteredElements.isNotEmpty())
LocalSearchScope(filteredElements.toTypedArray())
else
GlobalSearchScope.EMPTY_SCOPE
}
}
// Copied from SearchParameters.getEffectiveSearchScope() // Copied from SearchParameters.getEffectiveSearchScope()
fun ReferencesSearch.SearchParameters.effectiveSearchScope(element: PsiElement): SearchScope { fun ReferencesSearch.SearchParameters.effectiveSearchScope(element: PsiElement): SearchScope {
if (element == elementToSearch) return effectiveSearchScope if (element == elementToSearch) return effectiveSearchScope
@@ -17,8 +17,8 @@
package org.jetbrains.kotlin.idea.search.usagesSearch package org.jetbrains.kotlin.idea.search.usagesSearch
import com.intellij.ide.highlighter.JavaFileType import com.intellij.ide.highlighter.JavaFileType
import com.intellij.ide.highlighter.XmlFileType
import com.intellij.lang.java.JavaLanguage import com.intellij.lang.java.JavaLanguage
import com.intellij.lang.xml.XMLLanguage
import com.intellij.openapi.application.ApplicationManager import com.intellij.openapi.application.ApplicationManager
import com.intellij.openapi.project.Project import com.intellij.openapi.project.Project
import com.intellij.openapi.roots.ProjectRootManager import com.intellij.openapi.roots.ProjectRootManager
@@ -36,12 +36,14 @@ import org.jetbrains.kotlin.caches.resolve.KotlinCacheService
import org.jetbrains.kotlin.descriptors.CallableDescriptor import org.jetbrains.kotlin.descriptors.CallableDescriptor
import org.jetbrains.kotlin.descriptors.FunctionDescriptor import org.jetbrains.kotlin.descriptors.FunctionDescriptor
import org.jetbrains.kotlin.diagnostics.DiagnosticUtils import org.jetbrains.kotlin.diagnostics.DiagnosticUtils
import org.jetbrains.kotlin.idea.KotlinFileType
import org.jetbrains.kotlin.idea.KotlinLanguage import org.jetbrains.kotlin.idea.KotlinLanguage
import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptor import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptor
import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptorIfAny import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptorIfAny
import org.jetbrains.kotlin.idea.codeInsight.DescriptorToSourceUtilsIde import org.jetbrains.kotlin.idea.codeInsight.DescriptorToSourceUtilsIde
import org.jetbrains.kotlin.idea.refactoring.fqName.getKotlinFqName import org.jetbrains.kotlin.idea.refactoring.fqName.getKotlinFqName
import org.jetbrains.kotlin.idea.references.KtDestructuringDeclarationReference import org.jetbrains.kotlin.idea.references.KtDestructuringDeclarationReference
import org.jetbrains.kotlin.idea.search.excludeFileTypes
import org.jetbrains.kotlin.idea.search.ideaExtensions.KotlinReferencesSearchOptions import org.jetbrains.kotlin.idea.search.ideaExtensions.KotlinReferencesSearchOptions
import org.jetbrains.kotlin.idea.search.ideaExtensions.KotlinReferencesSearchParameters import org.jetbrains.kotlin.idea.search.ideaExtensions.KotlinReferencesSearchParameters
import org.jetbrains.kotlin.idea.search.restrictToKotlinSources import org.jetbrains.kotlin.idea.search.restrictToKotlinSources
@@ -179,7 +181,8 @@ class ExpressionsOfTypeProcessor(
data class ProcessClassUsagesTask(val classToSearch: PsiClass) : Task { data class ProcessClassUsagesTask(val classToSearch: PsiClass) : Task {
override fun perform() { override fun perform() {
testLog?.add("Searched references to ${logPresentation(classToSearch)}") testLog?.add("Searched references to ${logPresentation(classToSearch)}")
searchReferences(classToSearch, GlobalSearchScope.allScope(project)) { reference -> val scope = GlobalSearchScope.allScope(project).excludeFileTypes(XmlFileType.INSTANCE) // ignore usages in XML - they don't affect us
searchReferences(classToSearch, scope) { reference ->
if (processClassUsage(reference)) return@searchReferences true if (processClassUsage(reference)) return@searchReferences true
if (mode != Mode.ALWAYS_SMART) { if (mode != Mode.ALWAYS_SMART) {
@@ -200,21 +203,26 @@ class ExpressionsOfTypeProcessor(
addTask(ProcessClassUsagesTask(classToSearch)) addTask(ProcessClassUsagesTask(classToSearch))
} }
private fun addCallableDeclarationToProcess(declaration: PsiElement, processMethod: (PsiReference) -> Unit) { private fun addCallableDeclarationToProcess(declaration: PsiElement, processMethod: (PsiReference) -> Boolean) {
if (declaration.isOperatorExpensiveToSearch()) { // cancel all tasks and use plain search if (declaration.isOperatorExpensiveToSearch()) { // cancel all tasks and use plain search
downShiftToPlainSearch() downShiftToPlainSearch()
return return
} }
data class ProcessCallableUsagesTask(val declaration: PsiElement, val processMethod: (PsiReference) -> Unit) : Task { data class ProcessCallableUsagesTask(val declaration: PsiElement, val processMethod: (PsiReference) -> Boolean) : Task {
override fun perform() { override fun perform() {
// we don't need to search usages of declarations in Java because Java doesn't have implicitly typed declarations so such usages cannot affect Kotlin code // we don't need to search usages of declarations in Java because Java doesn't have implicitly typed declarations so such usages cannot affect Kotlin code
//TODO: what about Scala and other JVM-languages? val scope = GlobalSearchScope.projectScope(project).excludeFileTypes(JavaFileType.INSTANCE, XmlFileType.INSTANCE)
val scope = GlobalSearchScope.projectScope(project).restrictToKotlinSources() testLog?.add("Searched references to ${logPresentation(declaration)} in non-Java files")
testLog?.add("Searched references to ${logPresentation(declaration)} in Kotlin files")
val searchParameters = KotlinReferencesSearchParameters( val searchParameters = KotlinReferencesSearchParameters(
declaration, scope, kotlinOptions = KotlinReferencesSearchOptions(searchNamedArguments = false)) declaration, scope, kotlinOptions = KotlinReferencesSearchOptions(searchNamedArguments = false))
searchReferences(searchParameters) { reference -> processMethod(reference); true } searchReferences(searchParameters) { reference ->
val processed = processMethod(reference)
if (!processed) { // we don't know how to handle this reference and down-shift to plain search
downShiftToPlainSearch()
}
processed
}
} }
} }
addTask(ProcessCallableUsagesTask(declaration, processMethod)) addTask(ProcessCallableUsagesTask(declaration, processMethod))
@@ -226,30 +234,42 @@ class ExpressionsOfTypeProcessor(
/** /**
* Process reference to declaration whose type is our class (or our class used anywhere inside that type) * Process reference to declaration whose type is our class (or our class used anywhere inside that type)
*/ */
private fun processReferenceToCallableOfOurType(reference: PsiReference) { private fun processReferenceToCallableOfOurType(reference: PsiReference): Boolean {
if (reference is KtDestructuringDeclarationReference) { when (reference.element.language) {
// declaration usage in form of destructuring declaration entry KotlinLanguage.INSTANCE -> {
addCallableDeclarationToProcess(reference.element, HAS_OUR_TYPE) if (reference is KtDestructuringDeclarationReference) {
} // declaration usage in form of destructuring declaration entry
else { addCallableDeclarationToProcess(reference.element, HAS_OUR_TYPE)
(reference.element as? KtReferenceExpression)?.let { processSuspiciousExpression(it) } }
else {
(reference.element as? KtReferenceExpression)?.let { processSuspiciousExpression(it) }
}
return true
}
else -> return false // reference in unknown language - we don't know how to handle it
} }
} }
/** /**
* Process reference to declaration which has parameter of functional type with our class used inside * Process reference to declaration which has parameter of functional type with our class used inside
*/ */
private fun processLambdasByCallableReference(reference: PsiReference) { private fun processLambdasByCallableReference(reference: PsiReference): Boolean {
(reference.element as? KtReferenceExpression)?.let { processLambdasForCallableReference(it) } (reference.element as? KtReferenceExpression)?.let { processLambdasForCallableReference(it) }
return true
} }
private fun addSamInterfaceToProcess(psiClass: PsiClass) { private fun addSamInterfaceToProcess(psiClass: PsiClass) {
data class ProcessSamInterfaceTask(val psiClass: PsiClass) : Task { data class ProcessSamInterfaceTask(val psiClass: PsiClass) : Task {
override fun perform() { override fun perform() {
//TODO: what about other JVM languages? val scope = GlobalSearchScope.projectScope(project).excludeFileTypes(KotlinFileType.INSTANCE, XmlFileType.INSTANCE)
val scope = GlobalSearchScope.getScopeRestrictedByFileTypes(GlobalSearchScope.projectScope(project), JavaFileType.INSTANCE) testLog?.add("Searched references to ${logPresentation(psiClass)} in non-Kotlin files")
testLog?.add("Searched references to ${logPresentation(psiClass)} in java files")
searchReferences(psiClass, scope) { reference -> searchReferences(psiClass, scope) { reference ->
if (reference.element.language != JavaFileType.INSTANCE) { // reference in some JVM language can be method parameter (but we don't know)
downShiftToPlainSearch()
return@searchReferences false
}
// check if the reference is method parameter type // check if the reference is method parameter type
val parameter = ((reference as? PsiJavaCodeReferenceElement)?.parent as? PsiTypeElement)?.parent as? PsiParameter val parameter = ((reference as? PsiJavaCodeReferenceElement)?.parent as? PsiTypeElement)?.parent as? PsiParameter
val method = parameter?.declarationScope as? PsiMethod val method = parameter?.declarationScope as? PsiMethod
@@ -273,8 +293,6 @@ class ExpressionsOfTypeProcessor(
JavaLanguage.INSTANCE -> processClassUsageInJava(element) JavaLanguage.INSTANCE -> processClassUsageInJava(element)
XMLLanguage.INSTANCE -> true // ignore usages in XML - they don't affect us
else -> false // we don't know anything about usages in other languages - so we downgrade to slow algorithm in this case else -> false // we don't know anything about usages in other languages - so we downgrade to slow algorithm in this case
} }
} }
@@ -22,11 +22,8 @@ import com.intellij.find.findUsages.AbstractFindUsagesDialog
import com.intellij.find.findUsages.FindUsagesOptions import com.intellij.find.findUsages.FindUsagesOptions
import com.intellij.find.impl.FindManagerImpl import com.intellij.find.impl.FindManagerImpl
import com.intellij.openapi.actionSystem.DataContext import com.intellij.openapi.actionSystem.DataContext
import com.intellij.openapi.fileTypes.FileTypeManager
import com.intellij.psi.PsiElement import com.intellij.psi.PsiElement
import com.intellij.psi.PsiReference import com.intellij.psi.PsiReference
import com.intellij.psi.search.GlobalSearchScope
import com.intellij.psi.search.LocalSearchScope
import com.intellij.psi.search.SearchScope import com.intellij.psi.search.SearchScope
import com.intellij.psi.search.searches.MethodReferencesSearch import com.intellij.psi.search.searches.MethodReferencesSearch
import com.intellij.psi.search.searches.ReferencesSearch import com.intellij.psi.search.searches.ReferencesSearch
@@ -35,7 +32,6 @@ import com.intellij.util.*
import org.jetbrains.kotlin.asJava.toLightMethods import org.jetbrains.kotlin.asJava.toLightMethods
import org.jetbrains.kotlin.descriptors.CallableDescriptor import org.jetbrains.kotlin.descriptors.CallableDescriptor
import org.jetbrains.kotlin.descriptors.ParameterDescriptor import org.jetbrains.kotlin.descriptors.ParameterDescriptor
import org.jetbrains.kotlin.idea.KotlinFileType
import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptorIfAny import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptorIfAny
import org.jetbrains.kotlin.idea.findUsages.KotlinCallableFindUsagesOptions import org.jetbrains.kotlin.idea.findUsages.KotlinCallableFindUsagesOptions
import org.jetbrains.kotlin.idea.findUsages.KotlinFindUsagesHandlerFactory import org.jetbrains.kotlin.idea.findUsages.KotlinFindUsagesHandlerFactory
@@ -45,6 +41,7 @@ import org.jetbrains.kotlin.idea.findUsages.dialogs.KotlinFindFunctionUsagesDial
import org.jetbrains.kotlin.idea.findUsages.dialogs.KotlinFindPropertyUsagesDialog import org.jetbrains.kotlin.idea.findUsages.dialogs.KotlinFindPropertyUsagesDialog
import org.jetbrains.kotlin.idea.search.declarationsSearch.HierarchySearchRequest import org.jetbrains.kotlin.idea.search.declarationsSearch.HierarchySearchRequest
import org.jetbrains.kotlin.idea.search.declarationsSearch.searchOverriders import org.jetbrains.kotlin.idea.search.declarationsSearch.searchOverriders
import org.jetbrains.kotlin.idea.search.excludeKotlinSources
import org.jetbrains.kotlin.idea.search.ideaExtensions.KotlinReadWriteAccessDetector import org.jetbrains.kotlin.idea.search.ideaExtensions.KotlinReadWriteAccessDetector
import org.jetbrains.kotlin.idea.search.ideaExtensions.KotlinReferencesSearchOptions import org.jetbrains.kotlin.idea.search.ideaExtensions.KotlinReferencesSearchOptions
import org.jetbrains.kotlin.idea.search.ideaExtensions.KotlinReferencesSearchParameters import org.jetbrains.kotlin.idea.search.ideaExtensions.KotlinReferencesSearchParameters
@@ -175,21 +172,6 @@ abstract class KotlinFindMemberUsagesHandler<T : KtNamedDeclaration>
return true return true
} }
private fun SearchScope.excludeKotlinSources(): SearchScope {
if (this is GlobalSearchScope) {
val fileTypes = FileTypeManager.getInstance().registeredFileTypes.filter { it != KotlinFileType.INSTANCE }.toTypedArray()
return GlobalSearchScope.getScopeRestrictedByFileTypes(this, *fileTypes)
}
else {
this as LocalSearchScope
val filteredElements = scope.filter { it.containingFile !is KtFile }
return if (filteredElements.isNotEmpty())
LocalSearchScope(filteredElements.toTypedArray())
else
GlobalSearchScope.EMPTY_SCOPE
}
}
} }
protected abstract fun createKotlinReferencesSearchOptions(options: FindUsagesOptions): KotlinReferencesSearchOptions protected abstract fun createKotlinReferencesSearchOptions(options: FindUsagesOptions): KotlinReferencesSearchOptions
@@ -1,7 +1,4 @@
Resolved java class to descriptor: JavaSAM Resolved java class to descriptor: JavaSAM
Searched references to JavaClass.takeSAM(JavaSAM sam) in Kotlin files Searched references to JavaSAM in non-Kotlin files
Searched references to JavaSAM in java files
Searched references to pack.A Searched references to pack.A
Used plain search of parameter a of A(val a: Int, val b: String) in LocalSearchScope: Used plain search of parameter a of A(val a: Int, val b: String) in whole search scope
CLASS:A
{ val (x, y) = it }
@@ -15,10 +15,10 @@ Resolved (a2, b2)
Resolved (a3, b3) Resolved (a3, b3)
Resolved (a4, b4) Resolved (a4, b4)
Searched references to A Searched references to A
Searched references to X.f2() in Kotlin files Searched references to X.f2() in non-Java files
Searched references to constructor in Kotlin files Searched references to constructor in non-Java files
Searched references to f1() in Kotlin files Searched references to f1() in non-Java files
Searched references to fun2 in Kotlin files Searched references to fun2 in non-Java files
Searched references to fun3 in Kotlin files Searched references to fun3 in non-Java files
Used plain search of parameter a of A(val a: Int, val b: Int) in LocalSearchScope: Used plain search of parameter a of A(val a: Int, val b: Int) in LocalSearchScope:
CLASS:A CLASS:A
@@ -3,7 +3,7 @@ Checked type of x
Checked type of y Checked type of y
Resolved (x, y) Resolved (x, y)
Searched references to X Searched references to X
Searched references to f() in Kotlin files Searched references to f() in non-Java files
Used plain search of component1() in LocalSearchScope: Used plain search of component1() in LocalSearchScope:
CLASS:X CLASS:X
FUN:component1 FUN:component1
@@ -4,7 +4,7 @@ Checked type of x1
Checked type of y1 Checked type of y1
Resolved (x1, y1) Resolved (x1, y1)
Searched references to X Searched references to X
Searched references to f() in Kotlin files Searched references to f() in non-Java files
Used plain search of component1() in LocalSearchScope: Used plain search of component1() in LocalSearchScope:
CLASS:X CLASS:X
FUN:component1 FUN:component1
@@ -36,21 +36,21 @@ Resolved (x3, y3)
Resolved (x3, y3, z3) Resolved (x3, y3, z3)
Resolved (x4, y4, z4) Resolved (x4, y4, z4)
Resolved (x5, y5, z5) Resolved (x5, y5, z5)
Searched references to JavaClass.getA() in Kotlin files Searched references to JavaClass.getA() in non-Java files
Searched references to JavaClass2 Searched references to JavaClass2
Searched references to JavaClass3 Searched references to JavaClass3
Searched references to JavaClass4.NestedPrivate Searched references to JavaClass4.NestedPrivate
Searched references to JavaClass4.NestedPublic Searched references to JavaClass4.NestedPublic
Searched references to JavaClass4.getNested() in Kotlin files Searched references to JavaClass4.getNested() in non-Java files
Searched references to a in Kotlin files Searched references to a in non-Java files
Searched references to f() in Kotlin files Searched references to f() in non-Java files
Searched references to g() in Kotlin files Searched references to g() in non-Java files
Searched references to h() in Kotlin files Searched references to h() in non-Java files
Searched references to listOfA() in Kotlin files Searched references to listOfA() in non-Java files
Searched references to pack.A Searched references to pack.A
Searched references to pack.X Searched references to pack.X
Searched references to parameter p1 of test2(p1: JavaClass2, p2: JavaClass3) in Kotlin files Searched references to parameter p1 of test2(p1: JavaClass2, p2: JavaClass3) in non-Java files
Searched references to parameter p2 of test2(p1: JavaClass2, p2: JavaClass3) in Kotlin files Searched references to parameter p2 of test2(p1: JavaClass2, p2: JavaClass3) in non-Java files
Used plain search of parameter n of A(val n: Int, val s: String, val o: Any) in LocalSearchScope: Used plain search of parameter n of A(val n: Int, val s: String, val o: Any) in LocalSearchScope:
CLASS:A CLASS:A
CLASS:X CLASS:X
@@ -4,6 +4,6 @@ Checked type of y
Checked type of z Checked type of z
Resolved (x, y, z) Resolved (x, y, z)
Searched references to A Searched references to A
Searched references to a in Kotlin files Searched references to a in non-Java files
Used plain search of parameter n of A(val n: Int, val s: String, val o: Any) in LocalSearchScope: Used plain search of parameter n of A(val n: Int, val s: String, val o: Any) in LocalSearchScope:
CLASS:A CLASS:A
@@ -15,12 +15,12 @@ Resolved (x1, y1, z1)
Searched references to A Searched references to A
Searched references to B Searched references to B
Searched references to C Searched references to C
Searched references to C.component1() in Kotlin files Searched references to C.component1() in non-Java files
Searched references to a in Kotlin files Searched references to a in non-Java files
Searched references to a1 in Kotlin files Searched references to a1 in non-Java files
Searched references to parameter a of B(val a: A, val n: Int) in Kotlin files Searched references to parameter a of B(val a: A, val n: Int) in non-Java files
Searched references to parameter b of f(b: B, c: C) in Kotlin files Searched references to parameter b of f(b: B, c: C) in non-Java files
Searched references to parameter c of f(b: B, c: C) in Kotlin files Searched references to parameter c of f(b: B, c: C) in non-Java files
Used plain search of C.component1() in LocalSearchScope: Used plain search of C.component1() in LocalSearchScope:
CLASS:C CLASS:C
Used plain search of parameter a of B(val a: A, val n: Int) in LocalSearchScope: Used plain search of parameter a of B(val a: A, val n: Int) in LocalSearchScope:
@@ -12,9 +12,9 @@ Searched references to X
Searched references to Y Searched references to Y
Searched references to Z1 Searched references to Z1
Searched references to Z2 Searched references to Z2
Searched references to f() in Kotlin files Searched references to f() in non-Java files
Searched references to parameter z1 of g(z1: Z1, z2: Z2) in Kotlin files Searched references to parameter z1 of g(z1: Z1, z2: Z2) in non-Java files
Searched references to parameter z2 of g(z1: Z1, z2: Z2) in Kotlin files Searched references to parameter z2 of g(z1: Z1, z2: Z2) in non-Java files
Used plain search of component2() in LocalSearchScope: Used plain search of component2() in LocalSearchScope:
CLASS:X CLASS:X
CLASS:Y CLASS:Y
@@ -7,6 +7,6 @@ Checked type of z
Resolved (x, y) Resolved (x, y)
Resolved (x, y, z) Resolved (x, y, z)
Searched references to A Searched references to A
Searched references to parameter a of FOR in Kotlin files Searched references to parameter a of FOR in non-Java files
Used plain search of parameter n of A(val n: Int, val s: String, val o: Any) in LocalSearchScope: Used plain search of parameter n of A(val n: Int, val s: String, val o: Any) in LocalSearchScope:
CLASS:A CLASS:A
@@ -6,7 +6,7 @@ Checked type of y1
Resolved (x, y) Resolved (x, y)
Resolved (x1, y1) Resolved (x1, y1)
Searched references to A Searched references to A
Searched references to list in Kotlin files Searched references to list in non-Java files
Used plain search of parameter x of A(val x: Int, val y: Int) in LocalSearchScope: Used plain search of parameter x of A(val x: Int, val y: Int) in LocalSearchScope:
CLASS:A CLASS:A
FUN:x FUN:x
@@ -1,16 +1,16 @@
Searched references to A Searched references to A
Searched references to parameter p of foo(p: A) in Kotlin files Searched references to parameter p of foo(p: A) in non-Java files
Searched references to parameter p of takeExtFun(p: A.() -> Unit) in Kotlin files Searched references to parameter p of takeExtFun(p: A.() -> Unit) in non-Java files
Searched references to parameter p of takeFun1(p: (A) -> Unit) in Kotlin files Searched references to parameter p of takeFun1(p: (A) -> Unit) in non-Java files
Searched references to parameter p of takeFun2(p: ((A?, Int) -> Unit)?) in Kotlin files Searched references to parameter p of takeFun2(p: ((A?, Int) -> Unit)?) in non-Java files
Searched references to parameter p of takeFun3(p: (List<A>) -> Unit) in Kotlin files Searched references to parameter p of takeFun3(p: (List<A>) -> Unit) in non-Java files
Searched references to parameter p of takeFuns(p: MutableList<(A) -> Unit>) in Kotlin files Searched references to parameter p of takeFuns(p: MutableList<(A) -> Unit>) in non-Java files
Searched references to takeExtFun(p: A.() -> Unit) in Kotlin files Searched references to takeExtFun(p: A.() -> Unit) in non-Java files
Searched references to takeFun1(p: (A) -> Unit) in Kotlin files Searched references to takeFun1(p: (A) -> Unit) in non-Java files
Searched references to takeFun2(p: ((A?, Int) -> Unit)?) in Kotlin files Searched references to takeFun2(p: ((A?, Int) -> Unit)?) in non-Java files
Searched references to takeFun3(p: (List<A>) -> Unit) in Kotlin files Searched references to takeFun3(p: (List<A>) -> Unit) in non-Java files
Searched references to takeFuns(p: MutableList<(A) -> Unit>) in Kotlin files Searched references to takeFuns(p: MutableList<(A) -> Unit>) in non-Java files
Searched references to v in Kotlin files Searched references to v in non-Java files
Used plain search of parameter a of A(val a: Int, val b: Int) in LocalSearchScope: Used plain search of parameter a of A(val a: Int, val b: Int) in LocalSearchScope:
CLASS:A CLASS:A
{ a, n -> val (x, y) = a!! } { a, n -> val (x, y) = a!! }
@@ -3,11 +3,11 @@ Checked type of y1
Checked type of y1(a: A) Checked type of y1(a: A)
Resolved (x1, y1) Resolved (x1, y1)
Searched references to A Searched references to A
Searched references to parameter a of condition(a: A) in Kotlin files Searched references to parameter a of condition(a: A) in non-Java files
Searched references to parameter a of x(a: A, b: Boolean, list: List<Int>) in Kotlin files Searched references to parameter a of x(a: A, b: Boolean, list: List<Int>) in non-Java files
Searched references to parameter a of y1(a: A) in Kotlin files Searched references to parameter a of y1(a: A) in non-Java files
Searched references to parameter a of y2(a: A) in Kotlin files Searched references to parameter a of y2(a: A) in non-Java files
Searched references to parameter a of y3(a: A) in Kotlin files Searched references to parameter a of y3(a: A) in non-Java files
Used plain search of parameter n of A(val n: Int, val s: String) in LocalSearchScope: Used plain search of parameter n of A(val n: Int, val s: String) in LocalSearchScope:
CLASS:A CLASS:A
{ val (x2, y2) = this } { val (x2, y2) = this }
@@ -13,9 +13,9 @@ Resolved (x2, y2)
Searched references to X Searched references to X
Searched references to Y Searched references to Y
Searched references to Z Searched references to Z
Searched references to f() in Kotlin files Searched references to f() in non-Java files
Searched references to g() in Kotlin files Searched references to g() in non-Java files
Searched references to h() in Kotlin files Searched references to h() in non-Java files
Used plain search of X.component1() in LocalSearchScope: Used plain search of X.component1() in LocalSearchScope:
CLASS:X CLASS:X
CLASS:Y CLASS:Y
@@ -8,10 +8,10 @@ Resolved (x, y)
Resolved b1 + b2 Resolved b1 + b2
Searched references to A Searched references to A
Searched references to B Searched references to B
Searched references to parameter b1 of f(b1: B, b2: B) in Kotlin files Searched references to parameter b1 of f(b1: B, b2: B) in non-Java files
Searched references to parameter b2 of f(b1: B, b2: B) in Kotlin files Searched references to parameter b2 of f(b1: B, b2: B) in non-Java files
Searched references to parameter other of plus(other: B) in Kotlin files Searched references to parameter other of plus(other: B) in non-Java files
Searched references to plus(other: B) in Kotlin files Searched references to plus(other: B) in non-Java files
Used plain search of parameter x of A(val x: Int, val y: Int) in LocalSearchScope: Used plain search of parameter x of A(val x: Int, val y: Int) in LocalSearchScope:
CLASS:A CLASS:A
Used plain search of plus(other: B) in LocalSearchScope: Used plain search of plus(other: B) in LocalSearchScope:
@@ -8,7 +8,7 @@ Resolved (a1, n1)
Resolved (a2, n2) Resolved (a2, n2)
Resolved (a2, n2) Resolved (a2, n2)
Searched references to A Searched references to A
Searched references to parameter a of A(val a: A?, val n: Int) in Kotlin files Searched references to parameter a of A(val a: A?, val n: Int) in non-Java files
Searched references to parameter a of f(a: A) in Kotlin files Searched references to parameter a of f(a: A) in non-Java files
Used plain search of parameter a of A(val a: A?, val n: Int) in LocalSearchScope: Used plain search of parameter a of A(val a: A?, val n: Int) in LocalSearchScope:
CLASS:A CLASS:A
@@ -6,11 +6,11 @@ Resolved (a1, s)
Resolved (b, n) Resolved (b, n)
Searched references to A Searched references to A
Searched references to B Searched references to B
Searched references to a1 in Kotlin files Searched references to a1 in non-Java files
Searched references to b in Kotlin files Searched references to b in non-Java files
Searched references to parameter a of B(val a: A?, val s: String) in Kotlin files Searched references to parameter a of B(val a: A?, val s: String) in non-Java files
Searched references to parameter a of f(a: A) in Kotlin files Searched references to parameter a of f(a: A) in non-Java files
Searched references to parameter b of A(val b: B, val n: Int) in Kotlin files Searched references to parameter b of A(val b: B, val n: Int) in non-Java files
Used plain search of parameter a of B(val a: A?, val s: String) in LocalSearchScope: Used plain search of parameter a of B(val a: A?, val s: String) in LocalSearchScope:
CLASS:B CLASS:B
Used plain search of parameter b of A(val b: B, val n: Int) in LocalSearchScope: Used plain search of parameter b of A(val b: B, val n: Int) in LocalSearchScope:
+1 -1
View File
@@ -1,6 +1,6 @@
Checked type of b Checked type of b
Resolved B(1)[2] Resolved B(1)[2]
Searched references to B Searched references to B
Searched references to b in Kotlin files Searched references to b in non-Java files
Used plain search of B.get(i: Int) in LocalSearchScope: Used plain search of B.get(i: Int) in LocalSearchScope:
CLASS:B CLASS:B
+2 -2
View File
@@ -2,7 +2,7 @@ Checked type of a
Resolved ++a Resolved ++a
Resolved a++ Resolved a++
Searched references to A Searched references to A
Searched references to A.inc() in Kotlin files Searched references to A.inc() in non-Java files
Searched references to a in Kotlin files Searched references to a in non-Java files
Used plain search of A.inc() in LocalSearchScope: Used plain search of A.inc() in LocalSearchScope:
CLASS:A CLASS:A
+1 -1
View File
@@ -3,6 +3,6 @@ Resolved f(1)
Resolved f(2) Resolved f(2)
Resolved f(2)(2) Resolved f(2)(2)
Searched references to B Searched references to B
Searched references to f() in Kotlin files Searched references to f() in non-Java files
Used plain search of B.invoke(i: Int) in LocalSearchScope: Used plain search of B.invoke(i: Int) in LocalSearchScope:
CLASS:B CLASS:B
+14 -14
View File
@@ -19,20 +19,20 @@ Resolved a1 + 1
Resolved a1 + 1 Resolved a1 + 1
Searched references to A Searched references to A
Searched references to A Searched references to A
Searched references to A.plus(a: A) in Kotlin files Searched references to A.plus(a: A) in non-Java files
Searched references to A.plus(a: A) in Kotlin files Searched references to A.plus(a: A) in non-Java files
Searched references to A.plus(m: Int) in Kotlin files Searched references to A.plus(m: Int) in non-Java files
Searched references to A.plus(m: Int) in Kotlin files Searched references to A.plus(m: Int) in non-Java files
Searched references to a in Kotlin files Searched references to a in non-Java files
Searched references to a in Kotlin files Searched references to a in non-Java files
Searched references to a1 in Kotlin files Searched references to a1 in non-Java files
Searched references to a1 in Kotlin files Searched references to a1 in non-Java files
Searched references to a2 in Kotlin files Searched references to a2 in non-Java files
Searched references to a2 in Kotlin files Searched references to a2 in non-Java files
Searched references to parameter a of A.plus(a: A) in Kotlin files Searched references to parameter a of A.plus(a: A) in non-Java files
Searched references to parameter a of A.plus(a: A) in Kotlin files Searched references to parameter a of A.plus(a: A) in non-Java files
Searched references to parameter array of test(array: Array<A>) in Kotlin files Searched references to parameter array of test(array: Array<A>) in non-Java files
Searched references to parameter array of test(array: Array<A>) in Kotlin files Searched references to parameter array of test(array: Array<A>) in non-Java files
Used plain search of A.plus(a: A) in LocalSearchScope: Used plain search of A.plus(a: A) in LocalSearchScope:
CLASS:A CLASS:A
Used plain search of A.plus(m: Int) in LocalSearchScope: Used plain search of A.plus(m: Int) in LocalSearchScope:
+2 -2
View File
@@ -2,7 +2,7 @@ Checked type of a
Resolved a += 1 Resolved a += 1
Resolved a += A(1) Resolved a += A(1)
Searched references to A Searched references to A
Searched references to a in Kotlin files Searched references to a in non-Java files
Searched references to parameter a of A.plusAssign(a: A) in Kotlin files Searched references to parameter a of A.plusAssign(a: A) in non-Java files
Used plain search of A.plusAssign(m: Int) in LocalSearchScope: Used plain search of A.plusAssign(m: Int) in LocalSearchScope:
CLASS:A CLASS:A
+2 -2
View File
@@ -2,7 +2,7 @@ Checked type of a
Resolved a[1] Resolved a[1]
Resolved a[2] Resolved a[2]
Searched references to B Searched references to B
Searched references to a in Kotlin files Searched references to a in non-Java files
Searched references to parameter a of B.set(i: Int, a: B) in Kotlin files Searched references to parameter a of B.set(i: Int, a: B) in non-Java files
Used plain search of B.set(i: Int, a: B) in LocalSearchScope: Used plain search of B.set(i: Int, a: B) in LocalSearchScope:
CLASS:B CLASS:B
+1 -1
View File
@@ -1,5 +1,5 @@
Resolved -A(1) Resolved -A(1)
Searched references to A Searched references to A
Searched references to A.unaryMinus() in Kotlin files Searched references to A.unaryMinus() in non-Java files
Used plain search of A.unaryMinus() in LocalSearchScope: Used plain search of A.unaryMinus() in LocalSearchScope:
CLASS:A CLASS:A