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
import com.intellij.openapi.fileTypes.FileType
import com.intellij.openapi.fileTypes.FileTypeRegistry
import com.intellij.openapi.project.Project
import com.intellij.psi.PsiElement
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()
fun ReferencesSearch.SearchParameters.effectiveSearchScope(element: PsiElement): SearchScope {
if (element == elementToSearch) return effectiveSearchScope
@@ -17,8 +17,8 @@
package org.jetbrains.kotlin.idea.search.usagesSearch
import com.intellij.ide.highlighter.JavaFileType
import com.intellij.ide.highlighter.XmlFileType
import com.intellij.lang.java.JavaLanguage
import com.intellij.lang.xml.XMLLanguage
import com.intellij.openapi.application.ApplicationManager
import com.intellij.openapi.project.Project
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.FunctionDescriptor
import org.jetbrains.kotlin.diagnostics.DiagnosticUtils
import org.jetbrains.kotlin.idea.KotlinFileType
import org.jetbrains.kotlin.idea.KotlinLanguage
import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptor
import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptorIfAny
import org.jetbrains.kotlin.idea.codeInsight.DescriptorToSourceUtilsIde
import org.jetbrains.kotlin.idea.refactoring.fqName.getKotlinFqName
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.KotlinReferencesSearchParameters
import org.jetbrains.kotlin.idea.search.restrictToKotlinSources
@@ -179,7 +181,8 @@ class ExpressionsOfTypeProcessor(
data class ProcessClassUsagesTask(val classToSearch: PsiClass) : Task {
override fun perform() {
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 (mode != Mode.ALWAYS_SMART) {
@@ -200,21 +203,26 @@ class ExpressionsOfTypeProcessor(
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
downShiftToPlainSearch()
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() {
// 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).restrictToKotlinSources()
testLog?.add("Searched references to ${logPresentation(declaration)} in Kotlin files")
val scope = GlobalSearchScope.projectScope(project).excludeFileTypes(JavaFileType.INSTANCE, XmlFileType.INSTANCE)
testLog?.add("Searched references to ${logPresentation(declaration)} in non-Java files")
val searchParameters = KotlinReferencesSearchParameters(
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))
@@ -226,30 +234,42 @@ class ExpressionsOfTypeProcessor(
/**
* Process reference to declaration whose type is our class (or our class used anywhere inside that type)
*/
private fun processReferenceToCallableOfOurType(reference: PsiReference) {
if (reference is KtDestructuringDeclarationReference) {
// declaration usage in form of destructuring declaration entry
addCallableDeclarationToProcess(reference.element, HAS_OUR_TYPE)
}
else {
(reference.element as? KtReferenceExpression)?.let { processSuspiciousExpression(it) }
private fun processReferenceToCallableOfOurType(reference: PsiReference): Boolean {
when (reference.element.language) {
KotlinLanguage.INSTANCE -> {
if (reference is KtDestructuringDeclarationReference) {
// declaration usage in form of destructuring declaration entry
addCallableDeclarationToProcess(reference.element, HAS_OUR_TYPE)
}
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
*/
private fun processLambdasByCallableReference(reference: PsiReference) {
private fun processLambdasByCallableReference(reference: PsiReference): Boolean {
(reference.element as? KtReferenceExpression)?.let { processLambdasForCallableReference(it) }
return true
}
private fun addSamInterfaceToProcess(psiClass: PsiClass) {
data class ProcessSamInterfaceTask(val psiClass: PsiClass) : Task {
override fun perform() {
//TODO: what about other JVM languages?
val scope = GlobalSearchScope.getScopeRestrictedByFileTypes(GlobalSearchScope.projectScope(project), JavaFileType.INSTANCE)
testLog?.add("Searched references to ${logPresentation(psiClass)} in java files")
val scope = GlobalSearchScope.projectScope(project).excludeFileTypes(KotlinFileType.INSTANCE, XmlFileType.INSTANCE)
testLog?.add("Searched references to ${logPresentation(psiClass)} in non-Kotlin files")
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
val parameter = ((reference as? PsiJavaCodeReferenceElement)?.parent as? PsiTypeElement)?.parent as? PsiParameter
val method = parameter?.declarationScope as? PsiMethod
@@ -273,8 +293,6 @@ class ExpressionsOfTypeProcessor(
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
}
}
@@ -22,11 +22,8 @@ import com.intellij.find.findUsages.AbstractFindUsagesDialog
import com.intellij.find.findUsages.FindUsagesOptions
import com.intellij.find.impl.FindManagerImpl
import com.intellij.openapi.actionSystem.DataContext
import com.intellij.openapi.fileTypes.FileTypeManager
import com.intellij.psi.PsiElement
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.searches.MethodReferencesSearch
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.descriptors.CallableDescriptor
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.findUsages.KotlinCallableFindUsagesOptions
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.search.declarationsSearch.HierarchySearchRequest
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.KotlinReferencesSearchOptions
import org.jetbrains.kotlin.idea.search.ideaExtensions.KotlinReferencesSearchParameters
@@ -175,21 +172,6 @@ abstract class KotlinFindMemberUsagesHandler<T : KtNamedDeclaration>
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
@@ -1,7 +1,4 @@
Resolved java class to descriptor: JavaSAM
Searched references to JavaClass.takeSAM(JavaSAM sam) in Kotlin files
Searched references to JavaSAM in java files
Searched references to JavaSAM in non-Kotlin files
Searched references to pack.A
Used plain search of parameter a of A(val a: Int, val b: String) in LocalSearchScope:
CLASS:A
{ val (x, y) = it }
Used plain search of parameter a of A(val a: Int, val b: String) in whole search scope
@@ -15,10 +15,10 @@ Resolved (a2, b2)
Resolved (a3, b3)
Resolved (a4, b4)
Searched references to A
Searched references to X.f2() in Kotlin files
Searched references to constructor in Kotlin files
Searched references to f1() in Kotlin files
Searched references to fun2 in Kotlin files
Searched references to fun3 in Kotlin files
Searched references to X.f2() in non-Java files
Searched references to constructor in non-Java files
Searched references to f1() in non-Java files
Searched references to fun2 in non-Java 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:
CLASS:A
@@ -3,7 +3,7 @@ Checked type of x
Checked type of y
Resolved (x, y)
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:
CLASS:X
FUN:component1
@@ -4,7 +4,7 @@ Checked type of x1
Checked type of y1
Resolved (x1, y1)
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:
CLASS:X
FUN:component1
@@ -36,21 +36,21 @@ Resolved (x3, y3)
Resolved (x3, y3, z3)
Resolved (x4, y4, z4)
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 JavaClass3
Searched references to JavaClass4.NestedPrivate
Searched references to JavaClass4.NestedPublic
Searched references to JavaClass4.getNested() in Kotlin files
Searched references to a in Kotlin files
Searched references to f() in Kotlin files
Searched references to g() in Kotlin files
Searched references to h() in Kotlin files
Searched references to listOfA() in Kotlin files
Searched references to JavaClass4.getNested() in non-Java files
Searched references to a in non-Java files
Searched references to f() in non-Java files
Searched references to g() in non-Java files
Searched references to h() in non-Java files
Searched references to listOfA() in non-Java files
Searched references to pack.A
Searched references to pack.X
Searched references to parameter p1 of test2(p1: JavaClass2, p2: JavaClass3) in Kotlin files
Searched references to parameter p2 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 non-Java files
Used plain search of parameter n of A(val n: Int, val s: String, val o: Any) in LocalSearchScope:
CLASS:A
CLASS:X
@@ -4,6 +4,6 @@ Checked type of y
Checked type of z
Resolved (x, y, z)
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:
CLASS:A
@@ -15,12 +15,12 @@ Resolved (x1, y1, z1)
Searched references to A
Searched references to B
Searched references to C
Searched references to C.component1() in Kotlin files
Searched references to a in Kotlin files
Searched references to a1 in Kotlin files
Searched references to parameter a of B(val a: A, val n: Int) in Kotlin files
Searched references to parameter b of f(b: B, c: C) in Kotlin files
Searched references to parameter c of f(b: B, c: C) in Kotlin files
Searched references to C.component1() in non-Java files
Searched references to a in non-Java files
Searched references to a1 in non-Java 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 non-Java files
Searched references to parameter c of f(b: B, c: C) in non-Java files
Used plain search of C.component1() in LocalSearchScope:
CLASS:C
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 Z1
Searched references to Z2
Searched references to f() in Kotlin files
Searched references to parameter z1 of g(z1: Z1, z2: Z2) in Kotlin files
Searched references to parameter z2 of g(z1: Z1, z2: Z2) in Kotlin files
Searched references to f() in non-Java 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 non-Java files
Used plain search of component2() in LocalSearchScope:
CLASS:X
CLASS:Y
@@ -7,6 +7,6 @@ Checked type of z
Resolved (x, y)
Resolved (x, y, z)
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:
CLASS:A
@@ -6,7 +6,7 @@ Checked type of y1
Resolved (x, y)
Resolved (x1, y1)
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:
CLASS:A
FUN:x
@@ -1,16 +1,16 @@
Searched references to A
Searched references to parameter p of foo(p: A) in Kotlin files
Searched references to parameter p of takeExtFun(p: A.() -> Unit) in Kotlin files
Searched references to parameter p of takeFun1(p: (A) -> Unit) in Kotlin files
Searched references to parameter p of takeFun2(p: ((A?, Int) -> Unit)?) in Kotlin files
Searched references to parameter p of takeFun3(p: (List<A>) -> Unit) in Kotlin files
Searched references to parameter p of takeFuns(p: MutableList<(A) -> Unit>) in Kotlin files
Searched references to takeExtFun(p: A.() -> Unit) in Kotlin files
Searched references to takeFun1(p: (A) -> Unit) in Kotlin files
Searched references to takeFun2(p: ((A?, Int) -> Unit)?) in Kotlin files
Searched references to takeFun3(p: (List<A>) -> Unit) in Kotlin files
Searched references to takeFuns(p: MutableList<(A) -> Unit>) in Kotlin files
Searched references to v 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 non-Java 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 non-Java 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 non-Java files
Searched references to takeExtFun(p: A.() -> Unit) in non-Java files
Searched references to takeFun1(p: (A) -> Unit) in non-Java files
Searched references to takeFun2(p: ((A?, Int) -> Unit)?) in non-Java files
Searched references to takeFun3(p: (List<A>) -> Unit) in non-Java files
Searched references to takeFuns(p: MutableList<(A) -> Unit>) in non-Java 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:
CLASS:A
{ a, n -> val (x, y) = a!! }
@@ -3,11 +3,11 @@ Checked type of y1
Checked type of y1(a: A)
Resolved (x1, y1)
Searched references to A
Searched references to parameter a of condition(a: A) in Kotlin files
Searched references to parameter a of x(a: A, b: Boolean, list: List<Int>) in Kotlin files
Searched references to parameter a of y1(a: A) in Kotlin files
Searched references to parameter a of y2(a: A) in Kotlin files
Searched references to parameter a of y3(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 non-Java files
Searched references to parameter a of y1(a: A) in non-Java files
Searched references to parameter a of y2(a: A) in non-Java 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:
CLASS:A
{ val (x2, y2) = this }
@@ -13,9 +13,9 @@ Resolved (x2, y2)
Searched references to X
Searched references to Y
Searched references to Z
Searched references to f() in Kotlin files
Searched references to g() in Kotlin files
Searched references to h() in Kotlin files
Searched references to f() in non-Java files
Searched references to g() in non-Java files
Searched references to h() in non-Java files
Used plain search of X.component1() in LocalSearchScope:
CLASS:X
CLASS:Y
@@ -8,10 +8,10 @@ Resolved (x, y)
Resolved b1 + b2
Searched references to A
Searched references to B
Searched references to parameter b1 of f(b1: B, b2: B) in Kotlin files
Searched references to parameter b2 of f(b1: B, b2: B) in Kotlin files
Searched references to parameter other of plus(other: B) in Kotlin files
Searched references to plus(other: 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 non-Java files
Searched references to parameter other of plus(other: B) in non-Java 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:
CLASS:A
Used plain search of plus(other: B) in LocalSearchScope:
@@ -8,7 +8,7 @@ Resolved (a1, n1)
Resolved (a2, n2)
Resolved (a2, n2)
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 f(a: A) 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 non-Java files
Used plain search of parameter a of A(val a: A?, val n: Int) in LocalSearchScope:
CLASS:A
@@ -6,11 +6,11 @@ Resolved (a1, s)
Resolved (b, n)
Searched references to A
Searched references to B
Searched references to a1 in Kotlin files
Searched references to b in Kotlin files
Searched references to parameter a of B(val a: A?, val s: String) in Kotlin files
Searched references to parameter a of f(a: A) in Kotlin files
Searched references to parameter b of A(val b: B, val n: Int) in Kotlin files
Searched references to a1 in non-Java files
Searched references to b in non-Java 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 non-Java 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:
CLASS:B
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
Resolved B(1)[2]
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:
CLASS:B
+2 -2
View File
@@ -2,7 +2,7 @@ Checked type of a
Resolved ++a
Resolved a++
Searched references to A
Searched references to A.inc() in Kotlin files
Searched references to a in Kotlin files
Searched references to A.inc() in non-Java files
Searched references to a in non-Java files
Used plain search of A.inc() in LocalSearchScope:
CLASS:A
+1 -1
View File
@@ -3,6 +3,6 @@ Resolved f(1)
Resolved f(2)
Resolved f(2)(2)
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:
CLASS:B
+14 -14
View File
@@ -19,20 +19,20 @@ Resolved a1 + 1
Resolved a1 + 1
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 Kotlin files
Searched references to A.plus(m: Int) in Kotlin files
Searched references to A.plus(m: Int) in Kotlin files
Searched references to a in Kotlin files
Searched references to a in Kotlin files
Searched references to a1 in Kotlin files
Searched references to a1 in Kotlin files
Searched references to a2 in Kotlin files
Searched references to a2 in Kotlin 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 Kotlin 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 Kotlin files
Searched references to A.plus(a: A) in non-Java files
Searched references to A.plus(a: A) in non-Java files
Searched references to A.plus(m: Int) in non-Java files
Searched references to A.plus(m: Int) in non-Java files
Searched references to a in non-Java files
Searched references to a in non-Java files
Searched references to a1 in non-Java files
Searched references to a1 in non-Java files
Searched references to a2 in non-Java files
Searched references to a2 in non-Java 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 non-Java 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 non-Java files
Used plain search of A.plus(a: A) in LocalSearchScope:
CLASS:A
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 += A(1)
Searched references to A
Searched references to a in Kotlin files
Searched references to parameter a of A.plusAssign(a: A) in Kotlin files
Searched references to a in non-Java 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:
CLASS:A
+2 -2
View File
@@ -2,7 +2,7 @@ Checked type of a
Resolved a[1]
Resolved a[2]
Searched references to B
Searched references to a in Kotlin files
Searched references to parameter a of B.set(i: Int, a: B) in Kotlin files
Searched references to a in non-Java 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:
CLASS:B
+1 -1
View File
@@ -1,5 +1,5 @@
Resolved -A(1)
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:
CLASS:A