More elegant shortening of user type

This commit is contained in:
Valentin Kipyatkov
2015-01-27 10:28:18 +03:00
parent 3bc2f89a1b
commit 33f979768d
2 changed files with 17 additions and 10 deletions
@@ -18,6 +18,7 @@ package org.jetbrains.kotlin.psi;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import com.intellij.lang.ASTNode; import com.intellij.lang.ASTNode;
import com.intellij.psi.PsiElement;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
import org.jetbrains.kotlin.lexer.JetTokens; import org.jetbrains.kotlin.lexer.JetTokens;
@@ -80,6 +81,15 @@ public class JetUserType extends JetElementImplStub<KotlinUserTypeStub> implemen
return getStubOrPsiChild(JetStubElementTypes.USER_TYPE); 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 @Nullable
public String getReferencedName() { public String getReferencedName() {
JetNameReferenceExpression referenceExpression = getReferenceExpression(); JetNameReferenceExpression referenceExpression = getReferenceExpression();
@@ -31,11 +31,9 @@ import java.util.Collections
import org.jetbrains.kotlin.analyzer.analyzeInContext import org.jetbrains.kotlin.analyzer.analyzeInContext
import org.jetbrains.kotlin.resolve.calls.callUtil.getCalleeExpressionIfAny import org.jetbrains.kotlin.resolve.calls.callUtil.getCalleeExpressionIfAny
import java.util.LinkedHashSet import java.util.LinkedHashSet
import org.jetbrains.kotlin.psi.psiUtil.getQualifiedElement
import org.jetbrains.kotlin.resolve.descriptorUtil.getImportableDescriptor import org.jetbrains.kotlin.resolve.descriptorUtil.getImportableDescriptor
import org.jetbrains.kotlin.idea.caches.resolve.ResolutionFacade import org.jetbrains.kotlin.idea.caches.resolve.ResolutionFacade
import org.jetbrains.kotlin.psi.psiUtil.getStrictParentOfType import org.jetbrains.kotlin.psi.psiUtil.getStrictParentOfType
import org.jetbrains.kotlin.resolve.DescriptorUtils
public object ShortenReferences { public object ShortenReferences {
public fun process(element: JetElement) { public fun process(element: JetElement) {
@@ -138,7 +136,7 @@ public object ShortenReferences {
protected fun bindingContext(element: JetElement): BindingContext protected fun bindingContext(element: JetElement): BindingContext
= preResolveMap[element] ?: resolutionFacade.analyze(element) = preResolveMap[element] ?: resolutionFacade.analyze(element)
protected abstract fun getShortenedElement(element: T): JetElement? protected abstract fun shortenElement(element: T)
override fun visitElement(element: PsiElement) { override fun visitElement(element: PsiElement) {
if (elementFilter(element) != FilterResult.SKIP) { if (elementFilter(element) != FilterResult.SKIP) {
@@ -148,7 +146,7 @@ public object ShortenReferences {
public fun finish() { public fun finish() {
for (element in elementsToShorten) { 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? { override fun shortenElement(element: JetUserType) {
val referenceExpression = element.getReferenceExpression() ?: return null element.deleteQualifier()
val typeArgumentList = element.getTypeArgumentList()
val text = referenceExpression.getText() + (if (typeArgumentList != null) typeArgumentList.getText() else "")
return JetPsiFactory(element).createType(text).getTypeElement()!!
} }
} }
@@ -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() private fun DeclarationDescriptor.asString()