Added optimization: if name is too popular, don't check as unused.

This commit is contained in:
Evgeny Gerashchenko
2015-01-14 16:26:48 +03:00
parent f652d314d8
commit b68b2e2e40
12 changed files with 29 additions and 1 deletions
@@ -39,6 +39,8 @@ import org.jetbrains.kotlin.idea.search.usagesSearch.UsagesSearchHelper
import org.jetbrains.kotlin.idea.search.usagesSearch.ClassUsagesSearchHelper
import org.jetbrains.kotlin.asJava.toLightClass
import org.jetbrains.kotlin.idea.search.usagesSearch.FunctionUsagesSearchHelper
import com.intellij.psi.search.PsiSearchHelper
import com.intellij.psi.search.PsiSearchHelper.SearchCostResult.*
public class UnusedSymbolInspection : AbstractKotlinInspection() {
private val javaInspection = UnusedDeclarationInspection()
@@ -104,13 +106,25 @@ public class UnusedSymbolInspection : AbstractKotlinInspection() {
}
private fun hasNonTrivialUsages(declaration: JetNamedDeclaration): Boolean {
val psiSearchHelper = PsiSearchHelper.SERVICE.getInstance(declaration.getProject())
val useScope = declaration.getUseScope()
if (useScope is GlobalSearchScope) {
val searchCostResult = psiSearchHelper.isCheapEnoughToSearch(declaration.getName(), useScope, null, null)
when (searchCostResult) {
ZERO_OCCURRENCES -> return false // function is surely unused
FEW_OCCURRENCES -> {} // do search (following code)
TOO_MANY_OCCURRENCES -> return true // searching usages is too expensive; behave like it is used
}
}
val searchHelper: UsagesSearchHelper<out JetNamedDeclaration> = when (declaration) {
is JetClass -> ClassUsagesSearchHelper(constructorUsages = true, nonConstructorUsages = true, skipImports = true)
is JetNamedFunction -> FunctionUsagesSearchHelper(skipImports = true)
else -> return false
}
val useScope = declaration.getUseScope()
val request = searchHelper.newRequest(UsagesSearchTarget(declaration, useScope))
val query = UsagesSearch.search(request)
@@ -0,0 +1 @@
package unusedButHasTooPopularName.f
@@ -0,0 +1 @@
package unusedButHasTooPopularName.f
@@ -0,0 +1 @@
package unusedButHasTooPopularName.f
@@ -0,0 +1 @@
package unusedButHasTooPopularName.f
@@ -0,0 +1 @@
package unusedButHasTooPopularName.f
@@ -0,0 +1 @@
package unusedButHasTooPopularName.f
@@ -0,0 +1 @@
package unusedButHasTooPopularName.f
@@ -0,0 +1 @@
package unusedButHasTooPopularName.f
@@ -0,0 +1 @@
package unusedButHasTooPopularName.f
@@ -0,0 +1 @@
package unusedButHasTooPopularName.f
@@ -0,0 +1,4 @@
package unusedButHasTooPopularName
fun f() { // unused, but won't marked so: too expensive to check
}