diff --git a/idea/src/org/jetbrains/kotlin/idea/inspections/CanBeParameterInspection.kt b/idea/src/org/jetbrains/kotlin/idea/inspections/CanBeParameterInspection.kt index 0c203e76cf6..52410ee6a14 100644 --- a/idea/src/org/jetbrains/kotlin/idea/inspections/CanBeParameterInspection.kt +++ b/idea/src/org/jetbrains/kotlin/idea/inspections/CanBeParameterInspection.kt @@ -35,6 +35,7 @@ import org.jetbrains.kotlin.idea.quickfix.RemoveValVarFromParameterFix import org.jetbrains.kotlin.idea.references.KtSimpleNameReference import org.jetbrains.kotlin.idea.search.isCheapEnoughToSearchConsideringOperators import org.jetbrains.kotlin.idea.search.usagesSearch.getAccessorNames +import org.jetbrains.kotlin.idea.stubindex.KotlinSourceFilterScope import org.jetbrains.kotlin.lexer.KtTokens.* import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.psiUtil.containingClassOrObject @@ -90,7 +91,7 @@ class CanBeParameterInspection : AbstractKotlinInspection() { if (klass.isData()) return val useScope = parameter.useScope - if (useScope is GlobalSearchScope) { + val restrictedScope = if (useScope is GlobalSearchScope) { val psiSearchHelper = PsiSearchHelper.SERVICE.getInstance(parameter.project) for (accessorName in parameter.getAccessorNames()) { when (psiSearchHelper.isCheapEnoughToSearchConsideringOperators(accessorName, useScope, null, null)) { @@ -102,9 +103,11 @@ class CanBeParameterInspection : AbstractKotlinInspection() { // TOO_MANY_OCCURRENCES: too expensive // ZERO_OCCURRENCES: unused at all, reported elsewhere if (psiSearchHelper.isCheapEnoughToSearchConsideringOperators(name, useScope, null, null) != FEW_OCCURRENCES) return + KotlinSourceFilterScope.projectSources(useScope, parameter.project) } + else useScope // Find all references and check them - val references = ReferencesSearch.search(parameter, useScope) + val references = ReferencesSearch.search(parameter, restrictedScope) if (references.none()) return if (references.any { it.usedAsPropertyIn(klass) }) return holder.registerProblem( diff --git a/idea/src/org/jetbrains/kotlin/idea/inspections/MemberVisibilityCanBePrivateInspection.kt b/idea/src/org/jetbrains/kotlin/idea/inspections/MemberVisibilityCanBePrivateInspection.kt index c1cf2ea316e..a31c307fae9 100644 --- a/idea/src/org/jetbrains/kotlin/idea/inspections/MemberVisibilityCanBePrivateInspection.kt +++ b/idea/src/org/jetbrains/kotlin/idea/inspections/MemberVisibilityCanBePrivateInspection.kt @@ -37,6 +37,7 @@ import org.jetbrains.kotlin.idea.core.toDescriptor import org.jetbrains.kotlin.idea.quickfix.AddModifierFix import org.jetbrains.kotlin.idea.refactoring.isConstructorDeclaredProperty import org.jetbrains.kotlin.idea.search.isCheapEnoughToSearchConsideringOperators +import org.jetbrains.kotlin.idea.stubindex.KotlinSourceFilterScope import org.jetbrains.kotlin.lexer.KtTokens import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.psiUtil.containingClassOrObject @@ -97,18 +98,18 @@ class MemberVisibilityCanBePrivateInspection : AbstractKotlinInspection() { val psiSearchHelper = PsiSearchHelper.SERVICE.getInstance(declaration.project) val useScope = declaration.useScope val name = declaration.name ?: return false - if (useScope is GlobalSearchScope) { + val restrictedScope = if (useScope is GlobalSearchScope) { when (psiSearchHelper.isCheapEnoughToSearchConsideringOperators(name, useScope, null, null)) { PsiSearchHelper.SearchCostResult.TOO_MANY_OCCURRENCES -> return false PsiSearchHelper.SearchCostResult.ZERO_OCCURRENCES -> return false - PsiSearchHelper.SearchCostResult.FEW_OCCURRENCES -> { - } + PsiSearchHelper.SearchCostResult.FEW_OCCURRENCES -> KotlinSourceFilterScope.projectSources(useScope, declaration.project) } } + else useScope var otherUsageFound = false var inClassUsageFound = false - ReferencesSearch.search(declaration, useScope).forEach(Processor { + ReferencesSearch.search(declaration, restrictedScope).forEach(Processor { val usage = it.element if (classOrObject != usage.getParentOfType(false)) { otherUsageFound = true diff --git a/idea/src/org/jetbrains/kotlin/idea/inspections/UnusedSymbolInspection.kt b/idea/src/org/jetbrains/kotlin/idea/inspections/UnusedSymbolInspection.kt index 8da3f3ccc0c..6c133fefea5 100644 --- a/idea/src/org/jetbrains/kotlin/idea/inspections/UnusedSymbolInspection.kt +++ b/idea/src/org/jetbrains/kotlin/idea/inspections/UnusedSymbolInspection.kt @@ -67,6 +67,7 @@ import org.jetbrains.kotlin.idea.search.usagesSearch.dataClassComponentFunction import org.jetbrains.kotlin.idea.search.usagesSearch.descriptor import org.jetbrains.kotlin.idea.search.usagesSearch.getAccessorNames import org.jetbrains.kotlin.idea.search.usagesSearch.getClassNameForCompanionObject +import org.jetbrains.kotlin.idea.stubindex.KotlinSourceFilterScope import org.jetbrains.kotlin.idea.util.ProjectRootsUtil import org.jetbrains.kotlin.lexer.KtTokens import org.jetbrains.kotlin.name.Name @@ -206,7 +207,7 @@ class UnusedSymbolInspection : AbstractKotlinInspection() { val psiSearchHelper = PsiSearchHelper.SERVICE.getInstance(declaration.project) val useScope = declaration.useScope - if (useScope is GlobalSearchScope) { + val restrictedScope = if (useScope is GlobalSearchScope) { var zeroOccurrences = true for (name in listOf(declaration.name) + declaration.getAccessorNames() + listOfNotNull(declaration.getClassNameForCompanionObject())) { @@ -226,13 +227,15 @@ class UnusedSymbolInspection : AbstractKotlinInspection() { return false } } + KotlinSourceFilterScope.projectSources(useScope, declaration.project) } + else useScope return (declaration is KtObjectDeclaration && declaration.isCompanion() && declaration.getBody()?.declarations?.isNotEmpty() == true) || - hasReferences(declaration, descriptor, useScope) || - hasOverrides(declaration, useScope) || - hasFakeOverrides(declaration, useScope) || + hasReferences(declaration, descriptor, restrictedScope) || + hasOverrides(declaration, restrictedScope) || + hasFakeOverrides(declaration, restrictedScope) || isPlatformImplementation(declaration) || hasPlatformImplementations(declaration, descriptor) }