idea-core.Utils: add extension to FqName to support root prefix
This commit is contained in:
@@ -17,10 +17,12 @@ import org.jetbrains.kotlin.idea.resolve.frontendService
|
|||||||
import org.jetbrains.kotlin.idea.util.getImplicitReceiversWithInstanceToExpression
|
import org.jetbrains.kotlin.idea.util.getImplicitReceiversWithInstanceToExpression
|
||||||
import org.jetbrains.kotlin.idea.util.getResolutionScope
|
import org.jetbrains.kotlin.idea.util.getResolutionScope
|
||||||
import org.jetbrains.kotlin.name.FqName
|
import org.jetbrains.kotlin.name.FqName
|
||||||
|
import org.jetbrains.kotlin.name.parentOrNull
|
||||||
import org.jetbrains.kotlin.psi.*
|
import org.jetbrains.kotlin.psi.*
|
||||||
import org.jetbrains.kotlin.psi.psiUtil.*
|
import org.jetbrains.kotlin.psi.psiUtil.*
|
||||||
import org.jetbrains.kotlin.resolve.BindingContext
|
import org.jetbrains.kotlin.resolve.BindingContext
|
||||||
import org.jetbrains.kotlin.resolve.DelegatingBindingTrace
|
import org.jetbrains.kotlin.resolve.DelegatingBindingTrace
|
||||||
|
import org.jetbrains.kotlin.resolve.QualifiedExpressionResolver
|
||||||
import org.jetbrains.kotlin.resolve.bindingContextUtil.getDataFlowInfoBefore
|
import org.jetbrains.kotlin.resolve.bindingContextUtil.getDataFlowInfoBefore
|
||||||
import org.jetbrains.kotlin.resolve.calls.CallResolver
|
import org.jetbrains.kotlin.resolve.calls.CallResolver
|
||||||
import org.jetbrains.kotlin.resolve.calls.context.BasicCallResolutionContext
|
import org.jetbrains.kotlin.resolve.calls.context.BasicCallResolutionContext
|
||||||
@@ -158,6 +160,19 @@ fun FqName.quoteSegmentsIfNeeded(): String {
|
|||||||
|
|
||||||
fun FqName.quoteIfNeeded() = FqName(quoteSegmentsIfNeeded())
|
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 {
|
fun isEnumCompanionPropertyWithEntryConflict(element: PsiElement, expectedName: String): Boolean {
|
||||||
if (element !is KtProperty) return false
|
if (element !is KtProperty) return false
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user