From 8900411fb18d835e13db3c6bdcd2af698cb8e24e Mon Sep 17 00:00:00 2001 From: "Vitaliy.Bibaev" Date: Tue, 21 Nov 2017 17:46:59 +0300 Subject: [PATCH] Add util function to extract type name without generic parameters --- .../debugger/streams/kotlin/psi/KotlinPsiUtil.kt | 10 +++++++++- .../kotlin/psi/impl/KotlinCollectionChainBuilder.kt | 5 ++--- .../streams/kotlin/psi/impl/PackageBasedCallChecker.kt | 4 ++-- 3 files changed, 13 insertions(+), 6 deletions(-) diff --git a/idea/idea-jvm/src/com/intellij/debugger/streams/kotlin/psi/KotlinPsiUtil.kt b/idea/idea-jvm/src/com/intellij/debugger/streams/kotlin/psi/KotlinPsiUtil.kt index cf7b9f19e02..3a0dcdd3b8e 100644 --- a/idea/idea-jvm/src/com/intellij/debugger/streams/kotlin/psi/KotlinPsiUtil.kt +++ b/idea/idea-jvm/src/com/intellij/debugger/streams/kotlin/psi/KotlinPsiUtil.kt @@ -6,7 +6,9 @@ import org.jetbrains.kotlin.psi.KtCallExpression import org.jetbrains.kotlin.psi.KtDotQualifiedExpression import org.jetbrains.kotlin.psi.KtExpression import org.jetbrains.kotlin.renderer.DescriptorRenderer +import org.jetbrains.kotlin.renderer.DescriptorRendererModifier import org.jetbrains.kotlin.resolve.calls.callUtil.getResolvedCall +import org.jetbrains.kotlin.resolve.descriptorUtil.fqNameSafe import org.jetbrains.kotlin.resolve.scopes.receivers.ReceiverValue import org.jetbrains.kotlin.types.KotlinType @@ -15,8 +17,14 @@ import org.jetbrains.kotlin.types.KotlinType */ object KotlinPsiUtil { - fun getTypeName(type: KotlinType): String = DescriptorRenderer.FQ_NAMES_IN_TYPES.renderType(type) + private val WITH_TYPES_RENDERER = DescriptorRenderer.withOptions { modifiers = DescriptorRendererModifier.ALL } + fun getTypeName(type: KotlinType): String = WITH_TYPES_RENDERER.renderType(type) + + fun getTypeWithoutTypeParameters(type: KotlinType): String { + val descriptor = type.constructor.declarationDescriptor ?: return getTypeName(type) + return descriptor.fqNameSafe.asString() + } } fun KtExpression.resolveType(): KotlinType = diff --git a/idea/idea-jvm/src/com/intellij/debugger/streams/kotlin/psi/impl/KotlinCollectionChainBuilder.kt b/idea/idea-jvm/src/com/intellij/debugger/streams/kotlin/psi/impl/KotlinCollectionChainBuilder.kt index 4bcc187e7ec..c769d7d81c3 100644 --- a/idea/idea-jvm/src/com/intellij/debugger/streams/kotlin/psi/impl/KotlinCollectionChainBuilder.kt +++ b/idea/idea-jvm/src/com/intellij/debugger/streams/kotlin/psi/impl/KotlinCollectionChainBuilder.kt @@ -1,9 +1,9 @@ // Copyright 2000-2017 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file. package com.intellij.debugger.streams.kotlin.psi.impl +import com.intellij.debugger.streams.kotlin.psi.KotlinPsiUtil import com.intellij.debugger.streams.kotlin.psi.previousCall import com.intellij.debugger.streams.kotlin.psi.receiverType -import org.jetbrains.kotlin.js.descriptorUtils.getJetTypeFqName import org.jetbrains.kotlin.psi.KtCallExpression /** @@ -18,8 +18,7 @@ class KotlinCollectionChainBuilder private fun isCollectionTransformationCall(expression: KtCallExpression): Boolean { val receiverType = expression.receiverType() ?: return false - val receiverTypeName = receiverType.getJetTypeFqName(false) - return SUPPORTED_RECEIVERS.contains(receiverTypeName) + return SUPPORTED_RECEIVERS.contains(KotlinPsiUtil.getTypeWithoutTypeParameters(receiverType)) } override val existenceChecker: ExistenceChecker = object : ExistenceChecker() { diff --git a/idea/idea-jvm/src/com/intellij/debugger/streams/kotlin/psi/impl/PackageBasedCallChecker.kt b/idea/idea-jvm/src/com/intellij/debugger/streams/kotlin/psi/impl/PackageBasedCallChecker.kt index ac854d246f0..c9fc30127a0 100644 --- a/idea/idea-jvm/src/com/intellij/debugger/streams/kotlin/psi/impl/PackageBasedCallChecker.kt +++ b/idea/idea-jvm/src/com/intellij/debugger/streams/kotlin/psi/impl/PackageBasedCallChecker.kt @@ -1,11 +1,11 @@ // Copyright 2000-2017 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file. package com.intellij.debugger.streams.kotlin.psi.impl +import com.intellij.debugger.streams.kotlin.psi.KotlinPsiUtil import com.intellij.debugger.streams.kotlin.psi.StreamCallChecker import com.intellij.debugger.streams.kotlin.psi.receiverType import com.intellij.debugger.streams.kotlin.psi.resolveType import com.intellij.openapi.util.text.StringUtil -import org.jetbrains.kotlin.js.descriptorUtils.getJetTypeFqName import org.jetbrains.kotlin.psi.KtCallExpression import org.jetbrains.kotlin.types.KotlinType @@ -33,7 +33,7 @@ class PackageBasedCallChecker(private val supportedPackage: String) : StreamCall } private fun isSupportedType(type: KotlinType): Boolean { - val typeName = type.getJetTypeFqName(false) + val typeName = KotlinPsiUtil.getTypeWithoutTypeParameters(type) return StringUtil.getPackageName(typeName).startsWith(supportedPackage) } } \ No newline at end of file