idea-core.Utils: add extension to FqName to support root prefix

This commit is contained in:
Dmitry Gridin
2019-09-05 17:08:36 +07:00
parent 953aaadee1
commit 0c81173b71
@@ -17,10 +17,12 @@ import org.jetbrains.kotlin.idea.resolve.frontendService
import org.jetbrains.kotlin.idea.util.getImplicitReceiversWithInstanceToExpression
import org.jetbrains.kotlin.idea.util.getResolutionScope
import org.jetbrains.kotlin.name.FqName
import org.jetbrains.kotlin.name.parentOrNull
import org.jetbrains.kotlin.psi.*
import org.jetbrains.kotlin.psi.psiUtil.*
import org.jetbrains.kotlin.resolve.BindingContext
import org.jetbrains.kotlin.resolve.DelegatingBindingTrace
import org.jetbrains.kotlin.resolve.QualifiedExpressionResolver
import org.jetbrains.kotlin.resolve.bindingContextUtil.getDataFlowInfoBefore
import org.jetbrains.kotlin.resolve.calls.CallResolver
import org.jetbrains.kotlin.resolve.calls.context.BasicCallResolutionContext
@@ -158,6 +160,19 @@ fun FqName.quoteSegmentsIfNeeded(): String {
fun FqName.quoteIfNeeded() = FqName(quoteSegmentsIfNeeded())
fun FqName.withRootPrefixIfNeeded(targetElement: KtElement? = null) =
if (canAddRootPrefix() && targetElement?.canAddRootPrefix() != false)
FqName(QualifiedExpressionResolver.ROOT_PREFIX_FOR_IDE_RESOLUTION_MODE_WITH_DOT + asString())
else
this
fun FqName.canAddRootPrefix(): Boolean =
!asString().startsWith(QualifiedExpressionResolver.ROOT_PREFIX_FOR_IDE_RESOLUTION_MODE_WITH_DOT) && !thisOrParentIsRoot()
fun FqName.thisOrParentIsRoot(): Boolean = parentOrNull()?.isRoot != false
fun KtElement.canAddRootPrefix(): Boolean = getParentOfTypes2<KtImportDirective, KtPackageDirective>() == null
fun isEnumCompanionPropertyWithEntryConflict(element: PsiElement, expectedName: String): Boolean {
if (element !is KtProperty) return false