Extract 'PsiElement.hasJavaResolutionFacade()' (related to KT-28199)

This commit is contained in:
Mikhail Glukhikh
2018-12-24 15:00:57 +03:00
parent d599bb160f
commit 7d51be17c8
3 changed files with 6 additions and 2 deletions
@@ -149,6 +149,8 @@ private fun <T : DeclarationDescriptorWithSource> Collection<T>.findByJavaElemen
}
}
fun PsiElement.hasJavaResolutionFacade(): Boolean = this.originalElement.containingFile != null
fun PsiElement.javaResolutionFacade() =
KotlinCacheService.getInstance(project).getResolutionFacadeByFile(
this.originalElement.containingFile ?: reportCouldNotCreateJavaFacade(),
@@ -20,6 +20,7 @@ import com.intellij.openapi.application.QueryExecutorBase
import com.intellij.psi.PsiReference
import com.intellij.psi.search.searches.MethodReferencesSearch.SearchParameters
import org.jetbrains.kotlin.compatibility.ExecutorProcessor
import org.jetbrains.kotlin.idea.caches.resolve.util.hasJavaResolutionFacade
import org.jetbrains.kotlin.idea.references.mainReference
import org.jetbrains.kotlin.idea.search.usagesSearch.processDelegationCallConstructorUsages
@@ -27,7 +28,7 @@ class KotlinConstructorDelegationCallReferenceSearcher : QueryExecutorBase<PsiRe
override fun processQuery(queryParameters: SearchParameters, consumer: ExecutorProcessor<PsiReference>) {
val method = queryParameters.method
if (!method.isConstructor) return
if (method.originalElement.containingFile == null) return
if (!method.hasJavaResolutionFacade()) return
method.processDelegationCallConstructorUsages(method.useScope.intersectWith(queryParameters.effectiveSearchScope)) {
it.calleeExpression?.mainReference?.let { consumer.process(it) } ?: true
@@ -20,12 +20,13 @@ import com.intellij.openapi.application.QueryExecutorBase
import com.intellij.psi.PsiReference
import com.intellij.psi.search.searches.MethodReferencesSearch
import org.jetbrains.kotlin.compatibility.ExecutorProcessor
import org.jetbrains.kotlin.idea.caches.resolve.util.hasJavaResolutionFacade
import org.jetbrains.kotlin.idea.search.usagesSearch.operators.OperatorReferenceSearcher
class KotlinConventionMethodReferencesSearcher : QueryExecutorBase<PsiReference, MethodReferencesSearch.SearchParameters>(true) {
override fun processQuery(queryParameters: MethodReferencesSearch.SearchParameters, consumer: ExecutorProcessor<PsiReference>) {
val method = queryParameters.method
if (method.originalElement.containingFile == null) return
if (!method.hasJavaResolutionFacade()) return
val operatorSearcher = OperatorReferenceSearcher.create(
queryParameters.method,