More elegant shortening of user type
This commit is contained in:
@@ -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()
|
||||||
|
|||||||
Reference in New Issue
Block a user