From 7ba297db81592e04c17aa3a4ead18d41f92e17bf Mon Sep 17 00:00:00 2001 From: Mikhail Glukhikh Date: Tue, 17 Nov 2015 11:46:25 +0300 Subject: [PATCH] ThisReceiver converted to Kotlin --- .../kotlin/resolve/calls/resolvedCallUtil.kt | 2 +- .../resolve/calls/AbstractResolvedCallsTest.kt | 2 +- .../resolve/scopes/receivers/ClassReceiver.kt | 2 +- .../{ThisReceiver.java => ThisReceiver.kt} | 13 +++++-------- .../jetbrains/kotlin/idea/util/extensionsUtils.kt | 2 +- .../jetbrains/kotlin/idea/util/ShortenReferences.kt | 2 +- .../completion/DataFlowInfoUtilForCompletion.kt | 2 +- .../src/org/jetbrains/kotlin/idea/core/Utils.kt | 2 +- .../handlers/KotlinFindClassUsagesHandler.kt | 4 ++-- .../changeSignature/KotlinParameterInfo.kt | 2 +- .../introduce/extractionEngine/ExtractionData.kt | 2 +- .../KotlinIntroduceParameterHandler.kt | 4 ++-- .../util/psi/patternMatching/KotlinPsiUnifier.kt | 4 ++-- 13 files changed, 20 insertions(+), 23 deletions(-) rename core/descriptors/src/org/jetbrains/kotlin/resolve/scopes/receivers/{ThisReceiver.java => ThisReceiver.kt} (66%) diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/resolvedCallUtil.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/resolvedCallUtil.kt index cfa2f34e1ba..5bd55a8265f 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/resolvedCallUtil.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/calls/resolvedCallUtil.kt @@ -55,7 +55,7 @@ private fun ResolvedCall<*>.hasThisOrNoDispatchReceiver( var dispatchReceiverDescriptor: DeclarationDescriptor? = null if (dispatchReceiverValue is ThisReceiver) { // foo() -- implicit receiver - dispatchReceiverDescriptor = dispatchReceiverValue.getDeclarationDescriptor() + dispatchReceiverDescriptor = dispatchReceiverValue.declarationDescriptor } else if (dispatchReceiverValue is ExpressionReceiver && considerExplicitReceivers) { val expression = KtPsiUtil.deparenthesize(dispatchReceiverValue.expression) diff --git a/compiler/tests/org/jetbrains/kotlin/resolve/calls/AbstractResolvedCallsTest.kt b/compiler/tests/org/jetbrains/kotlin/resolve/calls/AbstractResolvedCallsTest.kt index 7d17041e7dc..4c619d693ad 100644 --- a/compiler/tests/org/jetbrains/kotlin/resolve/calls/AbstractResolvedCallsTest.kt +++ b/compiler/tests/org/jetbrains/kotlin/resolve/calls/AbstractResolvedCallsTest.kt @@ -78,7 +78,7 @@ public abstract class AbstractResolvedCallsTest : KotlinLiteFixture() { private fun ReceiverValue.getText() = when (this) { is ExpressionReceiver -> "${expression.getText()} {${getType()}}" is ClassReceiver -> "Class{${getType()}}" - is ExtensionReceiver -> "${getType()}Ext{${getDeclarationDescriptor().getText()}}" + is ExtensionReceiver -> "${getType()}Ext{${declarationDescriptor.getText()}}" else -> toString() } diff --git a/core/descriptors/src/org/jetbrains/kotlin/resolve/scopes/receivers/ClassReceiver.kt b/core/descriptors/src/org/jetbrains/kotlin/resolve/scopes/receivers/ClassReceiver.kt index 99c39f5603c..487d5e9883c 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/resolve/scopes/receivers/ClassReceiver.kt +++ b/core/descriptors/src/org/jetbrains/kotlin/resolve/scopes/receivers/ClassReceiver.kt @@ -28,7 +28,7 @@ open class ClassReceiver(override val classDescriptor: ClassDescriptor) : Expres override fun getType() = classDescriptor.defaultType - override fun getDeclarationDescriptor() = classDescriptor + override val declarationDescriptor = classDescriptor override fun equals(other: Any?) = classDescriptor == (other as? ClassReceiver)?.classDescriptor diff --git a/core/descriptors/src/org/jetbrains/kotlin/resolve/scopes/receivers/ThisReceiver.java b/core/descriptors/src/org/jetbrains/kotlin/resolve/scopes/receivers/ThisReceiver.kt similarity index 66% rename from core/descriptors/src/org/jetbrains/kotlin/resolve/scopes/receivers/ThisReceiver.java rename to core/descriptors/src/org/jetbrains/kotlin/resolve/scopes/receivers/ThisReceiver.kt index aa7d3f6df57..8ec6ff6a761 100644 --- a/core/descriptors/src/org/jetbrains/kotlin/resolve/scopes/receivers/ThisReceiver.java +++ b/core/descriptors/src/org/jetbrains/kotlin/resolve/scopes/receivers/ThisReceiver.kt @@ -14,16 +14,13 @@ * limitations under the License. */ -package org.jetbrains.kotlin.resolve.scopes.receivers; +package org.jetbrains.kotlin.resolve.scopes.receivers -import org.jetbrains.annotations.NotNull; -import org.jetbrains.kotlin.descriptors.DeclarationDescriptor; +import org.jetbrains.kotlin.descriptors.DeclarationDescriptor /** - * Describes a "this" receiver + * Describes an implicit "this" receiver */ -public interface ThisReceiver extends ReceiverValue { - @NotNull - DeclarationDescriptor getDeclarationDescriptor(); +interface ThisReceiver : ReceiverValue { + val declarationDescriptor: DeclarationDescriptor } - diff --git a/idea/ide-common/src/org/jetbrains/kotlin/idea/util/extensionsUtils.kt b/idea/ide-common/src/org/jetbrains/kotlin/idea/util/extensionsUtils.kt index b9ab4b341f1..bb3b0b63549 100644 --- a/idea/ide-common/src/org/jetbrains/kotlin/idea/util/extensionsUtils.kt +++ b/idea/ide-common/src/org/jetbrains/kotlin/idea/util/extensionsUtils.kt @@ -109,7 +109,7 @@ public fun ReceiverValue.getThisReceiverOwner(bindingContext: BindingContext): D bindingContext[BindingContext.REFERENCE_TARGET, thisRef] } - is ThisReceiver -> this.getDeclarationDescriptor() + is ThisReceiver -> this.declarationDescriptor else -> null } diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/util/ShortenReferences.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/util/ShortenReferences.kt index 604832d64b4..e56746a1305 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/util/ShortenReferences.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/util/ShortenReferences.kt @@ -361,7 +361,7 @@ public class ShortenReferences(val options: (KtElement) -> Options = { Options.D } as? ThisReceiver ?: return false val thisTarget = receiver.getInstanceReference().targets(bindingContext).singleOrNull() - if (newReceiver.getDeclarationDescriptor().asString() != thisTarget?.asString()) return false + if (newReceiver.declarationDescriptor.asString() != thisTarget?.asString()) return false } if (!targetsMatch && targetsWhenShort.any { it !is ClassDescriptor && it !is PackageViewDescriptor }) { diff --git a/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/DataFlowInfoUtilForCompletion.kt b/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/DataFlowInfoUtilForCompletion.kt index 2a40ad4d990..fb4d872cc4f 100644 --- a/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/DataFlowInfoUtilForCompletion.kt +++ b/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/DataFlowInfoUtilForCompletion.kt @@ -29,7 +29,7 @@ fun renderDataFlowValue(value: DataFlowValue): String? { fun renderId(id: Any?): String? { return when (id) { is KtExpression -> id.getText() - is ThisReceiver -> "this@${id.getDeclarationDescriptor().getName()}" + is ThisReceiver -> "this@${id.declarationDescriptor.getName()}" is VariableDescriptor -> id.getName().asString() is PackageViewDescriptor -> id.fqName.asString() is com.intellij.openapi.util.Pair<*, *> -> renderId(id.first) + "." + renderId(id.second) diff --git a/idea/idea-core/src/org/jetbrains/kotlin/idea/core/Utils.kt b/idea/idea-core/src/org/jetbrains/kotlin/idea/core/Utils.kt index 70fc5a7b0db..ce8e379a39e 100644 --- a/idea/idea-core/src/org/jetbrains/kotlin/idea/core/Utils.kt +++ b/idea/idea-core/src/org/jetbrains/kotlin/idea/core/Utils.kt @@ -91,7 +91,7 @@ public fun Call.mapArgumentsToParameters(targetDescriptor: CallableDescriptor): public fun ThisReceiver.asExpression(resolutionScope: LexicalScope, psiFactory: KtPsiFactory): KtExpression? { val expressionFactory = resolutionScope.getImplicitReceiversWithInstanceToExpression() .entrySet() - .firstOrNull { it.key.getContainingDeclaration() == this.getDeclarationDescriptor() } + .firstOrNull { it.key.getContainingDeclaration() == this.declarationDescriptor } ?.value ?: return null return expressionFactory.createExpression(psiFactory) } diff --git a/idea/src/org/jetbrains/kotlin/idea/findUsages/handlers/KotlinFindClassUsagesHandler.kt b/idea/src/org/jetbrains/kotlin/idea/findUsages/handlers/KotlinFindClassUsagesHandler.kt index 894d364c759..7ad3cca111b 100644 --- a/idea/src/org/jetbrains/kotlin/idea/findUsages/handlers/KotlinFindClassUsagesHandler.kt +++ b/idea/src/org/jetbrains/kotlin/idea/findUsages/handlers/KotlinFindClassUsagesHandler.kt @@ -163,8 +163,8 @@ public class KotlinFindClassUsagesHandler( val bindingContext = element.analyze() val resolvedCall = bindingContext[BindingContext.CALL, element]?.getResolvedCall(bindingContext) ?: return - if ((resolvedCall.getDispatchReceiver() as? ClassReceiver)?.getDeclarationDescriptor() == companionObjectDescriptor - || (resolvedCall.getExtensionReceiver() as? ClassReceiver)?.getDeclarationDescriptor() == companionObjectDescriptor) { + if ((resolvedCall.getDispatchReceiver() as? ClassReceiver)?.declarationDescriptor == companionObjectDescriptor + || (resolvedCall.getExtensionReceiver() as? ClassReceiver)?.declarationDescriptor == companionObjectDescriptor) { element.getReferences().forEach { if (!stop && !processor.process(it)) { stop = true diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/changeSignature/KotlinParameterInfo.kt b/idea/src/org/jetbrains/kotlin/idea/refactoring/changeSignature/KotlinParameterInfo.kt index bce222156fa..7ea601c6518 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/changeSignature/KotlinParameterInfo.kt +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/changeSignature/KotlinParameterInfo.kt @@ -82,7 +82,7 @@ public class KotlinParameterInfo @JvmOverloads constructor ( } private fun selfReceiverOrNull(receiver: ThisReceiver?): DeclarationDescriptor? { - return selfReceiverOrNull(receiver?.getDeclarationDescriptor()) + return selfReceiverOrNull(receiver?.declarationDescriptor) } private fun getRelevantDescriptor( diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/extractionEngine/ExtractionData.kt b/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/extractionEngine/ExtractionData.kt index 67ab581528a..35f54958da0 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/extractionEngine/ExtractionData.kt +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/extractionEngine/ExtractionData.kt @@ -210,7 +210,7 @@ data class ExtractionData( smartCast = originalContext[BindingContext.SMARTCAST, smartCastTarget] possibleTypes = getPossibleTypes(smartCastTarget, originalResolveResult.resolvedCall, originalContext) val receiverDescriptor = - (originalResolveResult.resolvedCall?.getDispatchReceiver() as? ThisReceiver)?.getDeclarationDescriptor() + (originalResolveResult.resolvedCall?.getDispatchReceiver() as? ThisReceiver)?.declarationDescriptor if (smartCast == null && !DescriptorUtils.isCompanionObject(receiverDescriptor) && qualifiedExpression.getReceiverExpression() !is KtSuperExpression) continue diff --git a/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/introduceParameter/KotlinIntroduceParameterHandler.kt b/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/introduceParameter/KotlinIntroduceParameterHandler.kt index f000c8e15ff..a46773f4c52 100644 --- a/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/introduceParameter/KotlinIntroduceParameterHandler.kt +++ b/idea/src/org/jetbrains/kotlin/idea/refactoring/introduce/introduceParameter/KotlinIntroduceParameterHandler.kt @@ -394,8 +394,8 @@ private fun findInternalUsagesOfParametersAndReceiver( val bindingContext = element.analyze() val resolvedCall = element.getResolvedCall(bindingContext) ?: return - if ((resolvedCall.getExtensionReceiver() as? ThisReceiver)?.getDeclarationDescriptor() == targetDescriptor || - (resolvedCall.getDispatchReceiver() as? ThisReceiver)?.getDeclarationDescriptor() == targetDescriptor) { + if ((resolvedCall.getExtensionReceiver() as? ThisReceiver)?.declarationDescriptor == targetDescriptor || + (resolvedCall.getDispatchReceiver() as? ThisReceiver)?.declarationDescriptor == targetDescriptor) { usages.putValue(receiverTypeRef, resolvedCall.getCall().getCallElement()) } } diff --git a/idea/src/org/jetbrains/kotlin/idea/util/psi/patternMatching/KotlinPsiUnifier.kt b/idea/src/org/jetbrains/kotlin/idea/util/psi/patternMatching/KotlinPsiUnifier.kt index c59c428ee65..bc36ff1217d 100644 --- a/idea/src/org/jetbrains/kotlin/idea/util/psi/patternMatching/KotlinPsiUnifier.kt +++ b/idea/src/org/jetbrains/kotlin/idea/util/psi/patternMatching/KotlinPsiUnifier.kt @@ -134,7 +134,7 @@ public class KotlinPsiUnifier( doUnify(rv1.expression, rv2.expression) == MATCHED rv1 is ThisReceiver && rv2 is ThisReceiver -> - matchDescriptors(rv1.getDeclarationDescriptor(), rv2.getDeclarationDescriptor()) + matchDescriptors(rv1.declarationDescriptor, rv2.declarationDescriptor) else -> rv1 == rv2 @@ -215,7 +215,7 @@ public class KotlinPsiUnifier( if (implicitReceiver == null || thisExpression == null) return false return matchDescriptors( - implicitReceiver.getDeclarationDescriptor(), + implicitReceiver.declarationDescriptor, thisExpression.getAdjustedResolvedCall()?.getCandidateDescriptor()?.getContainingDeclaration() ) }