From c8260f8d98648ea221f560acd72bfeeebae760f0 Mon Sep 17 00:00:00 2001 From: Valentin Kipyatkov Date: Fri, 16 Sep 2016 19:38:08 +0300 Subject: [PATCH] Refactoring --- .../jetbrains/kotlin/idea/search/usagesSearch/utils.kt | 7 +++++++ .../KotlinChangeSignatureUsageProcessor.kt | 5 +++-- .../refactoring/safeDelete/KotlinSafeDeleteProcessor.kt | 5 +++-- .../KotlinConstructorDelegationCallReferenceSearcher.kt | 9 +++++---- 4 files changed, 18 insertions(+), 8 deletions(-) diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/search/usagesSearch/utils.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/search/usagesSearch/utils.kt index 4a6d0de56f6..91f02fe35f0 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/search/usagesSearch/utils.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/search/usagesSearch/utils.kt @@ -16,6 +16,7 @@ package org.jetbrains.kotlin.idea.search.usagesSearch +import com.intellij.openapi.application.ApplicationManager import com.intellij.psi.PsiConstructorCall import com.intellij.psi.PsiElement import com.intellij.psi.PsiMethod @@ -111,8 +112,14 @@ private fun KtElement.getConstructorCallDescriptor(): DeclarationDescriptor? { return null } +fun PsiElement.processDelegationCallConstructorUsages(scope: SearchScope, process: (KtCallElement) -> Boolean): Boolean { + val task = buildProcessDelegationCallConstructorUsagesTask(scope, process) + return task() +} + // should be executed under read-action, returns long-running part to be executed outside read-action fun PsiElement.buildProcessDelegationCallConstructorUsagesTask(scope: SearchScope, process: (KtCallElement) -> Boolean): () -> Boolean { + ApplicationManager.getApplication().assertReadAccessAllowed() val task1 = buildProcessDelegationCallKotlinConstructorUsagesTask(scope, process) val task2 = buildProcessDelegationCallJavaConstructorUsagesTask(scope, process) return { task1() && task2() } diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/changeSignature/KotlinChangeSignatureUsageProcessor.kt b/idea/src/org/jetbrains/kotlin/idea/refactoring/changeSignature/KotlinChangeSignatureUsageProcessor.kt index 5bf1708f167..e216c8c9208 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/changeSignature/KotlinChangeSignatureUsageProcessor.kt +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/changeSignature/KotlinChangeSignatureUsageProcessor.kt @@ -53,6 +53,7 @@ import org.jetbrains.kotlin.idea.search.ideaExtensions.KotlinReferencesSearchOpt import org.jetbrains.kotlin.idea.search.ideaExtensions.KotlinReferencesSearchParameters import org.jetbrains.kotlin.idea.search.restrictToKotlinSources import org.jetbrains.kotlin.idea.search.usagesSearch.buildProcessDelegationCallConstructorUsagesTask +import org.jetbrains.kotlin.idea.search.usagesSearch.processDelegationCallConstructorUsages import org.jetbrains.kotlin.idea.util.* import org.jetbrains.kotlin.incremental.components.NoLookupLocation import org.jetbrains.kotlin.kdoc.psi.impl.KDocName @@ -311,13 +312,13 @@ class KotlinChangeSignatureUsageProcessor : ChangeSignatureUsageProcessor { } } - functionPsi.buildProcessDelegationCallConstructorUsagesTask(functionPsi.useScope) { + functionPsi.processDelegationCallConstructorUsages(functionPsi.useScope) { when (it) { is KtConstructorDelegationCall -> result.add(KotlinConstructorDelegationCallUsage(it, changeInfo)) is KtSuperTypeCallEntry -> result.add(KotlinFunctionCallUsage(it, functionUsageInfo)) } true - }.invoke() + } } private fun processInternalReferences(functionUsageInfo: KotlinCallableDefinitionUsage<*>, visitor: KtTreeVisitor) { diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/safeDelete/KotlinSafeDeleteProcessor.kt b/idea/src/org/jetbrains/kotlin/idea/refactoring/safeDelete/KotlinSafeDeleteProcessor.kt index 4997af7e111..1f321d30efa 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/safeDelete/KotlinSafeDeleteProcessor.kt +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/safeDelete/KotlinSafeDeleteProcessor.kt @@ -44,6 +44,7 @@ import org.jetbrains.kotlin.idea.refactoring.formatClass import org.jetbrains.kotlin.idea.refactoring.formatFunction import org.jetbrains.kotlin.idea.references.KtReference import org.jetbrains.kotlin.idea.search.usagesSearch.buildProcessDelegationCallConstructorUsagesTask +import org.jetbrains.kotlin.idea.search.usagesSearch.processDelegationCallConstructorUsages import org.jetbrains.kotlin.lexer.KtTokens import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.psiUtil.getNonStrictParentOfType @@ -179,12 +180,12 @@ class KotlinSafeDeleteProcessor : JavaSafeDeleteProcessor() { else -> return } for (constructor in constructors) { - constructor.buildProcessDelegationCallConstructorUsagesTask(constructor.useScope) { + constructor.processDelegationCallConstructorUsages(constructor.useScope) { if (!getIgnoranceCondition().value(it)) { usages.add(SafeDeleteReferenceSimpleDeleteUsageInfo(it, element, false)) } true - }.invoke() + } } } diff --git a/idea/src/org/jetbrains/kotlin/idea/search/ideaExtensions/KotlinConstructorDelegationCallReferenceSearcher.kt b/idea/src/org/jetbrains/kotlin/idea/search/ideaExtensions/KotlinConstructorDelegationCallReferenceSearcher.kt index c5b16e5a498..d8b0f5cf2f6 100644 --- a/idea/src/org/jetbrains/kotlin/idea/search/ideaExtensions/KotlinConstructorDelegationCallReferenceSearcher.kt +++ b/idea/src/org/jetbrains/kotlin/idea/search/ideaExtensions/KotlinConstructorDelegationCallReferenceSearcher.kt @@ -20,15 +20,16 @@ import com.intellij.openapi.application.QueryExecutorBase import com.intellij.psi.PsiReference import com.intellij.psi.search.searches.MethodReferencesSearch.SearchParameters import com.intellij.util.Processor -import org.jetbrains.kotlin.idea.search.usagesSearch.buildProcessDelegationCallConstructorUsagesTask +import org.jetbrains.kotlin.idea.references.mainReference +import org.jetbrains.kotlin.idea.search.usagesSearch.processDelegationCallConstructorUsages class KotlinConstructorDelegationCallReferenceSearcher() : QueryExecutorBase(true) { override fun processQuery(queryParameters: SearchParameters, consumer: Processor) { val method = queryParameters.method if (!method.isConstructor) return - method.buildProcessDelegationCallConstructorUsagesTask(method.useScope.intersectWith(queryParameters.effectiveSearchScope)) { - it.calleeExpression?.reference?.let { consumer.process(it) } ?: true - }.invoke() + method.processDelegationCallConstructorUsages(method.useScope.intersectWith(queryParameters.effectiveSearchScope)) { + it.calleeExpression?.mainReference?.let { consumer.process(it) } ?: true + } } } \ No newline at end of file