Don't build light classes when usages in Kotlin local scope requested

This commit is contained in:
Nikolay Krasko
2017-10-20 18:35:16 +03:00
parent 189e2506d1
commit ef274ad43b
@@ -45,6 +45,7 @@ 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
import org.jetbrains.kotlin.idea.search.isOnlyKotlinSearch
import org.jetbrains.kotlin.idea.search.usagesSearch.dataClassComponentFunction import org.jetbrains.kotlin.idea.search.usagesSearch.dataClassComponentFunction
import org.jetbrains.kotlin.idea.search.usagesSearch.isImportUsage import org.jetbrains.kotlin.idea.search.usagesSearch.isImportUsage
import org.jetbrains.kotlin.idea.util.application.runReadAction import org.jetbrains.kotlin.idea.util.application.runReadAction
@@ -146,16 +147,18 @@ abstract class KotlinFindMemberUsagesHandler<T : KtNamedDeclaration>
addTask { query.forEach(referenceProcessor) } addTask { query.forEach(referenceProcessor) }
} }
// TODO: very bad code!! ReferencesSearch does not work correctly for constructors and annotation parameters if (element is KtElement && !isOnlyKotlinSearch(options.searchScope)) {
val psiMethodScopeSearch = when { // TODO: very bad code!! ReferencesSearch does not work correctly for constructors and annotation parameters
element is KtNamedFunction || element is KtParameter && element.dataClassComponentFunction() != null -> val psiMethodScopeSearch = when {
options.searchScope.excludeKotlinSources() element is KtNamedFunction || element is KtParameter && element.dataClassComponentFunction() != null ->
else -> options.searchScope options.searchScope.excludeKotlinSources()
} else -> options.searchScope
}
for (psiMethod in element.toLightMethods()) { for (psiMethod in element.toLightMethods()) {
applyQueryFilters(element, options, MethodReferencesSearch.search(psiMethod, psiMethodScopeSearch, true)).let { query -> applyQueryFilters(element, options, MethodReferencesSearch.search(psiMethod, psiMethodScopeSearch, true)).let { query ->
addTask { query.forEach(referenceProcessor) } addTask { query.forEach(referenceProcessor) }
}
} }
} }
} }