Refactoring: Drop obsolete KotlinFileReferencesResolver class

This commit is contained in:
Alexey Sedunov
2017-04-06 18:11:47 +03:00
parent 7f115343f9
commit f5d106a68f
6 changed files with 18 additions and 106 deletions
@@ -533,3 +533,7 @@ fun KtDeclaration.hasBody() = when (this) {
is KtProperty -> hasBody()
else -> false
}
fun KtExpression.referenceExpression(): KtReferenceExpression? =
(if (this is KtCallExpression) calleeExpression else this) as? KtReferenceExpression
@@ -1,92 +0,0 @@
/*
* Copyright 2010-2015 JetBrains s.r.o.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.jetbrains.kotlin.idea.codeInsight
import org.jetbrains.kotlin.idea.caches.resolve.getResolutionFacade
import org.jetbrains.kotlin.psi.*
import org.jetbrains.kotlin.resolve.BindingContext
import java.util.*
object KotlinFileReferencesResolver {
fun resolve(
element: KtElement,
resolveQualifiers: Boolean = true,
resolveShortNames: Boolean = true
): Map<KtReferenceExpression, BindingContext> {
return (element.containingFile as? KtFile)?.let { file ->
resolve(file, listOf(element), resolveQualifiers, resolveShortNames)
} ?: Collections.emptyMap()
}
fun resolve(
file: KtFile,
elements: Iterable<KtElement>? = null,
resolveQualifiers: Boolean = true,
resolveShortNames: Boolean = true
): Map<KtReferenceExpression, BindingContext> {
val visitor = ResolveAllReferencesVisitor(file, resolveQualifiers, resolveShortNames)
if (elements != null) {
elements.forEach { it.accept(visitor) }
}
else {
file.accept(visitor)
}
return visitor.result
}
private class ResolveAllReferencesVisitor(file: KtFile, val resolveQualifiers: Boolean, val resolveShortNames: Boolean) : KtTreeVisitorVoid() {
private val resolutionFacade = file.getResolutionFacade()
private val resolveMap = LinkedHashMap<KtReferenceExpression, BindingContext>()
val result: Map<KtReferenceExpression, BindingContext> = resolveMap
override fun visitUserType(userType: KtUserType) {
if (resolveQualifiers) {
userType.acceptChildren(this)
}
if (resolveShortNames || userType.qualifier != null) {
val referenceExpression = userType.referenceExpression
if (referenceExpression != null) {
resolveMap[referenceExpression] = resolutionFacade.analyze(referenceExpression)
}
}
}
override fun visitQualifiedExpression(expression: KtQualifiedExpression) {
val receiverExpression = expression.receiverExpression
if (resolveQualifiers || resolutionFacade.analyze(expression)[BindingContext.QUALIFIER, receiverExpression] == null) {
receiverExpression.accept(this)
}
val referenceExpression = expression.selectorExpression?.referenceExpression()
if (referenceExpression != null) {
resolveMap[referenceExpression] = resolutionFacade.analyze(referenceExpression)
}
expression.selectorExpression?.accept(this)
}
override fun visitSimpleNameExpression(expression: KtSimpleNameExpression) {
if (resolveShortNames) {
resolveMap[expression] = resolutionFacade.analyze(expression)
}
}
}
}
fun KtExpression.referenceExpression(): KtReferenceExpression? =
(if (this is KtCallExpression) calleeExpression else this) as? KtReferenceExpression
@@ -24,7 +24,6 @@ import org.jetbrains.kotlin.idea.caches.resolve.analyzeFully
import org.jetbrains.kotlin.idea.caches.resolve.getJavaMemberDescriptor
import org.jetbrains.kotlin.idea.caches.resolve.getResolutionFacade
import org.jetbrains.kotlin.idea.caches.resolve.resolveToDescriptor
import org.jetbrains.kotlin.idea.codeInsight.referenceExpression
import org.jetbrains.kotlin.idea.core.isVisible
import org.jetbrains.kotlin.idea.imports.canBeReferencedViaImport
import org.jetbrains.kotlin.idea.references.mainReference
@@ -33,6 +32,7 @@ import org.jetbrains.kotlin.platform.JavaToKotlinClassMap
import org.jetbrains.kotlin.psi.KtDotQualifiedExpression
import org.jetbrains.kotlin.psi.KtFile
import org.jetbrains.kotlin.psi.KtImportDirective
import org.jetbrains.kotlin.psi.psiUtil.referenceExpression
import java.util.*
@@ -46,7 +46,6 @@ import org.jetbrains.kotlin.idea.caches.resolve.analyze
import org.jetbrains.kotlin.idea.caches.resolve.getResolutionFacade
import org.jetbrains.kotlin.idea.caches.resolve.getResolveScope
import org.jetbrains.kotlin.idea.codeInsight.DescriptorToSourceUtilsIde
import org.jetbrains.kotlin.idea.codeInsight.referenceExpression
import org.jetbrains.kotlin.idea.core.KotlinIndicesHelper
import org.jetbrains.kotlin.idea.core.isVisible
import org.jetbrains.kotlin.idea.imports.canBeReferencedViaImport
@@ -60,10 +59,7 @@ import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.psi.*
import org.jetbrains.kotlin.psi.KtPsiUtil.isSelectorInQualified
import org.jetbrains.kotlin.psi.psiUtil.anyDescendantOfType
import org.jetbrains.kotlin.psi.psiUtil.getQualifiedExpressionForSelectorOrThis
import org.jetbrains.kotlin.psi.psiUtil.getStrictParentOfType
import org.jetbrains.kotlin.psi.psiUtil.isImportDirectiveExpression
import org.jetbrains.kotlin.psi.psiUtil.*
import org.jetbrains.kotlin.resolve.BindingContext
import org.jetbrains.kotlin.resolve.bindingContextUtil.getDataFlowInfoBefore
import org.jetbrains.kotlin.resolve.calls.callUtil.getParentCall
@@ -43,10 +43,10 @@ import org.jetbrains.kotlin.descriptors.*
import org.jetbrains.kotlin.idea.analysis.analyzeInContext
import org.jetbrains.kotlin.idea.caches.resolve.*
import org.jetbrains.kotlin.idea.codeInsight.DescriptorToSourceUtilsIde
import org.jetbrains.kotlin.idea.codeInsight.KotlinFileReferencesResolver
import org.jetbrains.kotlin.idea.core.compareDescriptors
import org.jetbrains.kotlin.idea.refactoring.*
import org.jetbrains.kotlin.idea.refactoring.changeSignature.usages.*
import org.jetbrains.kotlin.idea.refactoring.rename.noReceivers
import org.jetbrains.kotlin.idea.references.KtSimpleNameReference
import org.jetbrains.kotlin.idea.references.mainReference
import org.jetbrains.kotlin.idea.search.ideaExtensions.KotlinReferencesSearchOptions
@@ -701,9 +701,14 @@ class KotlinChangeSignatureUsageProcessor : ChangeSignatureUsageProcessor {
callable: PsiElement,
newReceiverInfo: KotlinParameterInfo?) {
if (newReceiverInfo != null && (callable is KtNamedFunction) && callable.bodyExpression != null) {
val noReceiverRefToContext = KotlinFileReferencesResolver.resolve(callable, true, true).filter {
val resolvedCall = it.key.getResolvedCall(it.value)
resolvedCall != null && resolvedCall.dispatchReceiver == null && resolvedCall.extensionReceiver == null
val originalContext = callable.analyzeFully()
val noReceiverRefs = ArrayList<KtSimpleNameExpression>()
callable.forEachDescendantOfType<KtSimpleNameExpression> {
val resolvedCall = it.getResolvedCall(originalContext) ?: return@forEachDescendantOfType
if (resolvedCall.noReceivers()) {
noReceiverRefs += it
}
}
val psiFactory = KtPsiFactory(callable.project)
@@ -715,7 +720,7 @@ class KotlinChangeSignatureUsageProcessor : ChangeSignatureUsageProcessor {
val originalOffset = callable.bodyExpression!!.textOffset
val newBody = functionWithReceiver.bodyExpression ?: return
for ((originalRef, originalContext) in noReceiverRefToContext.entries) {
for (originalRef in noReceiverRefs) {
val newRef = newBody
.findElementAt(originalRef.textOffset - originalOffset)
?.getNonStrictParentOfType<KtReferenceExpression>()
@@ -27,7 +27,6 @@ import org.jetbrains.kotlin.descriptors.ValueParameterDescriptor
import org.jetbrains.kotlin.idea.caches.resolve.analyze
import org.jetbrains.kotlin.idea.caches.resolve.getResolutionFacade
import org.jetbrains.kotlin.idea.codeInsight.DescriptorToSourceUtilsIde
import org.jetbrains.kotlin.idea.codeInsight.KotlinFileReferencesResolver
import org.jetbrains.kotlin.idea.core.compareDescriptors
import org.jetbrains.kotlin.idea.refactoring.introduce.ExtractableSubstringInfo
import org.jetbrains.kotlin.idea.refactoring.introduce.extractableSubstringInfo
@@ -196,10 +195,10 @@ data class ExtractionData(
val newReferences = body.collectDescendantsOfType<KtSimpleNameExpression> { it.resolveResult != null }
val context = body.analyze()
val referencesInfo = ArrayList<ResolvedReferenceInfo>()
val refToContextMap = KotlinFileReferencesResolver.resolve(body)
for (newRef in newReferences) {
val context = refToContextMap[newRef] ?: continue
val originalResolveResult = newRef.resolveResult ?: continue
val smartCast: KotlinType?