diff --git a/compiler/frontend/src/org/jetbrains/kotlin/psi/JetUserType.java b/compiler/frontend/src/org/jetbrains/kotlin/psi/JetUserType.java index 9647e60a493..e3d4e181acd 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/psi/JetUserType.java +++ b/compiler/frontend/src/org/jetbrains/kotlin/psi/JetUserType.java @@ -18,6 +18,7 @@ package org.jetbrains.kotlin.psi; import com.google.common.collect.Lists; import com.intellij.lang.ASTNode; +import com.intellij.psi.PsiElement; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.kotlin.lexer.JetTokens; @@ -80,6 +81,15 @@ public class JetUserType extends JetElementImplStub implemen return getStubOrPsiChild(JetStubElementTypes.USER_TYPE); } + public void deleteQualifier() { + JetUserType qualifier = getQualifier(); + assert qualifier != null; + PsiElement dot = findChildByType(JetTokens.DOT); + assert dot != null; + qualifier.delete(); + dot.delete(); + } + @Nullable public String getReferencedName() { JetNameReferenceExpression referenceExpression = getReferenceExpression(); diff --git a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/codeInsight/ShortenReferences.kt b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/codeInsight/ShortenReferences.kt index 666b3d4f5f3..a39b4804973 100644 --- a/idea/idea-analysis/src/org/jetbrains/kotlin/idea/codeInsight/ShortenReferences.kt +++ b/idea/idea-analysis/src/org/jetbrains/kotlin/idea/codeInsight/ShortenReferences.kt @@ -31,11 +31,9 @@ import java.util.Collections import org.jetbrains.kotlin.analyzer.analyzeInContext import org.jetbrains.kotlin.resolve.calls.callUtil.getCalleeExpressionIfAny import java.util.LinkedHashSet -import org.jetbrains.kotlin.psi.psiUtil.getQualifiedElement import org.jetbrains.kotlin.resolve.descriptorUtil.getImportableDescriptor import org.jetbrains.kotlin.idea.caches.resolve.ResolutionFacade import org.jetbrains.kotlin.psi.psiUtil.getStrictParentOfType -import org.jetbrains.kotlin.resolve.DescriptorUtils public object ShortenReferences { public fun process(element: JetElement) { @@ -138,7 +136,7 @@ public object ShortenReferences { protected fun bindingContext(element: JetElement): BindingContext = preResolveMap[element] ?: resolutionFacade.analyze(element) - protected abstract fun getShortenedElement(element: T): JetElement? + protected abstract fun shortenElement(element: T) override fun visitElement(element: PsiElement) { if (elementFilter(element) != FilterResult.SKIP) { @@ -148,7 +146,7 @@ public object ShortenReferences { public fun finish() { for (element in elementsToShorten) { - getShortenedElement(element)?.let { element.replace(it) } + shortenElement(element) } } } @@ -201,11 +199,8 @@ public object ShortenReferences { } } - override fun getShortenedElement(element: JetUserType): JetElement? { - val referenceExpression = element.getReferenceExpression() ?: return null - val typeArgumentList = element.getTypeArgumentList() - val text = referenceExpression.getText() + (if (typeArgumentList != null) typeArgumentList.getText() else "") - return JetPsiFactory(element).createType(text).getTypeElement()!! + override fun shortenElement(element: JetUserType) { + element.deleteQualifier() } } @@ -260,7 +255,9 @@ public object ShortenReferences { } } - override fun getShortenedElement(element: JetQualifiedExpression): JetElement = element.getSelectorExpression()!! + override fun shortenElement(element: JetQualifiedExpression) { + element.replace(element.getSelectorExpression()!!) + } } private fun DeclarationDescriptor.asString()