Override/implement members dialog: no qualified type names in signatures but qualified owner class names (+ moved a method)

This commit is contained in:
Valentin Kipyatkov
2015-05-29 21:30:13 +03:00
parent 54b3fc9e37
commit d74ac4d08a
7 changed files with 40 additions and 14 deletions
@@ -25,8 +25,8 @@ import com.intellij.psi.codeStyle.CodeStyleManager
import com.intellij.psi.impl.source.codeStyle.CodeEditUtil import com.intellij.psi.impl.source.codeStyle.CodeEditUtil
import org.jetbrains.kotlin.lexer.JetTokens import org.jetbrains.kotlin.lexer.JetTokens
import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.name.renderName
import org.jetbrains.kotlin.psi.psiUtil.* import org.jetbrains.kotlin.psi.psiUtil.*
import org.jetbrains.kotlin.renderer.render
import java.util.ArrayList import java.util.ArrayList
import java.util.HashMap import java.util.HashMap
import java.util.LinkedHashMap import java.util.LinkedHashMap
@@ -82,7 +82,7 @@ private val SUPPORTED_ARGUMENT_TYPES = listOf(
PsiElementArgumentType<JetExpression>(javaClass()), PsiElementArgumentType<JetExpression>(javaClass()),
PsiElementArgumentType<JetTypeReference>(javaClass()), PsiElementArgumentType<JetTypeReference>(javaClass()),
PlainTextArgumentType<String>(javaClass(), toPlainText = { it }), PlainTextArgumentType<String>(javaClass(), toPlainText = { it }),
PlainTextArgumentType<Name>(javaClass(), toPlainText = { it.renderName() }), PlainTextArgumentType<Name>(javaClass(), toPlainText = { it.render() }),
PsiChildRangeArgumentType PsiChildRangeArgumentType
) )
@@ -16,8 +16,6 @@
package org.jetbrains.kotlin.name package org.jetbrains.kotlin.name
import org.jetbrains.kotlin.renderer.DescriptorRenderer
public fun FqName.isSubpackageOf(packageName: FqName): Boolean { public fun FqName.isSubpackageOf(packageName: FqName): Boolean {
return when { return when {
this == packageName -> true this == packageName -> true
@@ -78,5 +76,3 @@ public fun isValidJavaFqName(qualifiedName: String?): Boolean {
return state != State.AFTER_DOT return state != State.AFTER_DOT
} }
public fun Name.renderName(): String = DescriptorRenderer.COMPACT.renderName(this)
@@ -16,7 +16,12 @@
package org.jetbrains.kotlin.renderer package org.jetbrains.kotlin.renderer
import org.jetbrains.kotlin.descriptors.* import org.jetbrains.kotlin.descriptors.ClassDescriptor
import org.jetbrains.kotlin.descriptors.ClassifierDescriptor
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
import org.jetbrains.kotlin.descriptors.PackageFragmentDescriptor
import org.jetbrains.kotlin.name.FqNameBase
import org.jetbrains.kotlin.name.Name
public fun qualifiedNameForSourceCode(descriptor: ClassifierDescriptor): String { public fun qualifiedNameForSourceCode(descriptor: ClassifierDescriptor): String {
val nameString = DescriptorRenderer.COMPACT.renderName(descriptor.getName()) val nameString = DescriptorRenderer.COMPACT.renderName(descriptor.getName())
@@ -30,3 +35,7 @@ private fun qualifierName(descriptor: DeclarationDescriptor): String? = when (de
else -> null else -> null
} }
public fun Name.render(): String = DescriptorRenderer.COMPACT.renderName(this)
public fun FqNameBase.render(): String = DescriptorRenderer.COMPACT.renderFqName(this)
@@ -21,10 +21,10 @@ import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
import org.jetbrains.kotlin.descriptors.PropertyAccessorDescriptor import org.jetbrains.kotlin.descriptors.PropertyAccessorDescriptor
import org.jetbrains.kotlin.descriptors.ReceiverParameterDescriptor import org.jetbrains.kotlin.descriptors.ReceiverParameterDescriptor
import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.name.renderName
import org.jetbrains.kotlin.psi.JetExpression import org.jetbrains.kotlin.psi.JetExpression
import org.jetbrains.kotlin.psi.JetFunctionLiteral import org.jetbrains.kotlin.psi.JetFunctionLiteral
import org.jetbrains.kotlin.psi.JetPsiFactory import org.jetbrains.kotlin.psi.JetPsiFactory
import org.jetbrains.kotlin.renderer.render
import org.jetbrains.kotlin.resolve.DescriptorToSourceUtils import org.jetbrains.kotlin.resolve.DescriptorToSourceUtils
import org.jetbrains.kotlin.resolve.DescriptorUtils import org.jetbrains.kotlin.resolve.DescriptorUtils
import org.jetbrains.kotlin.resolve.scopes.JetScope import org.jetbrains.kotlin.resolve.scopes.JetScope
@@ -60,7 +60,7 @@ public fun JetScope.getImplicitReceiversWithInstanceToExpression(): Map<Receiver
for ((index, receiver) in receivers.withIndex()) { for ((index, receiver) in receivers.withIndex()) {
val owner = receiver.getContainingDeclaration() val owner = receiver.getContainingDeclaration()
val (expressionText, isImmediateThis) = if (owner in outerDeclarationsWithInstance) { val (expressionText, isImmediateThis) = if (owner in outerDeclarationsWithInstance) {
val thisWithLabel = thisQualifierName(receiver)?.let { "this@${it.renderName()}" } val thisWithLabel = thisQualifierName(receiver)?.let { "this@${it.render()}" }
if (index == 0) if (index == 0)
(thisWithLabel ?: "this") to true (thisWithLabel ?: "this") to true
else else
@@ -32,11 +32,11 @@ import org.jetbrains.kotlin.idea.util.FuzzyType
import org.jetbrains.kotlin.idea.util.findLabelAndCall import org.jetbrains.kotlin.idea.util.findLabelAndCall
import org.jetbrains.kotlin.idea.util.getImplicitReceiversWithInstanceToExpression import org.jetbrains.kotlin.idea.util.getImplicitReceiversWithInstanceToExpression
import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.name.renderName
import org.jetbrains.kotlin.psi.* import org.jetbrains.kotlin.psi.*
import org.jetbrains.kotlin.psi.psiUtil.parents import org.jetbrains.kotlin.psi.psiUtil.parents
import org.jetbrains.kotlin.psi.psiUtil.parentsWithSelf import org.jetbrains.kotlin.psi.psiUtil.parentsWithSelf
import org.jetbrains.kotlin.renderer.DescriptorRenderer import org.jetbrains.kotlin.renderer.DescriptorRenderer
import org.jetbrains.kotlin.renderer.render
import org.jetbrains.kotlin.resolve.BindingContext import org.jetbrains.kotlin.resolve.BindingContext
import org.jetbrains.kotlin.resolve.DescriptorToSourceUtils import org.jetbrains.kotlin.resolve.DescriptorToSourceUtils
import org.jetbrains.kotlin.resolve.DescriptorUtils import org.jetbrains.kotlin.resolve.DescriptorUtils
@@ -266,7 +266,7 @@ private fun createKeywordWithLabelElement(keyword: String, label: Name?, addSpac
} }
private fun createKeywordWithLabelElement(keyword: String, label: Name?): LookupElementBuilder { private fun createKeywordWithLabelElement(keyword: String, label: Name?): LookupElementBuilder {
val labelInCode = label?.renderName() val labelInCode = label?.render()
var element = LookupElementBuilder.create(KeywordLookupObject, if (label == null) keyword else "$keyword@$labelInCode") var element = LookupElementBuilder.create(KeywordLookupObject, if (label == null) keyword else "$keyword@$labelInCode")
element = element.withPresentableText(keyword) element = element.withPresentableText(keyword)
element = element.withBoldness(true) element = element.withBoldness(true)
@@ -25,12 +25,17 @@ import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiMember; import com.intellij.psi.PsiMember;
import com.intellij.psi.util.PsiTreeUtil; import com.intellij.psi.util.PsiTreeUtil;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.kotlin.descriptors.ClassDescriptor;
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor; import org.jetbrains.kotlin.descriptors.DeclarationDescriptor;
import org.jetbrains.kotlin.idea.JetDescriptorIconProvider; import org.jetbrains.kotlin.idea.JetDescriptorIconProvider;
import org.jetbrains.kotlin.psi.JetClass; import org.jetbrains.kotlin.psi.JetClass;
import org.jetbrains.kotlin.psi.JetDeclaration; import org.jetbrains.kotlin.psi.JetDeclaration;
import org.jetbrains.kotlin.psi.JetNamedDeclaration; import org.jetbrains.kotlin.psi.JetNamedDeclaration;
import org.jetbrains.kotlin.renderer.DescriptorRenderer; import org.jetbrains.kotlin.renderer.DescriptorRenderer;
import org.jetbrains.kotlin.renderer.DescriptorRendererBuilder;
import org.jetbrains.kotlin.renderer.NameShortness;
import org.jetbrains.kotlin.renderer.RendererPackage;
import org.jetbrains.kotlin.resolve.DescriptorUtils;
import javax.swing.*; import javax.swing.*;
@@ -42,12 +47,28 @@ public class DescriptorClassMember extends MemberChooserObjectBase implements Cl
@NotNull @NotNull
private final PsiElement myPsiElement; private final PsiElement myPsiElement;
private static final DescriptorRenderer MEMBER_RENDERER = new DescriptorRendererBuilder()
.setWithDefinedIn(false)
.setModifiers()
.setStartFromName(true)
.setNameShortness(NameShortness.SHORT)
.build();
public DescriptorClassMember(@NotNull PsiElement element, @NotNull DeclarationDescriptor descriptor) { public DescriptorClassMember(@NotNull PsiElement element, @NotNull DeclarationDescriptor descriptor) {
super(DescriptorRenderer.STARTS_FROM_NAME.render(descriptor), getIcon(element, descriptor)); super(getText(descriptor), getIcon(element, descriptor));
myPsiElement = element; myPsiElement = element;
myDescriptor = descriptor; myDescriptor = descriptor;
} }
private static String getText(DeclarationDescriptor descriptor) {
if (descriptor instanceof ClassDescriptor) {
return RendererPackage.render(DescriptorUtils.getFqNameSafe(descriptor));
}
else {
return MEMBER_RENDERER.render(descriptor);
}
}
private static Icon getIcon(PsiElement element, DeclarationDescriptor declarationDescriptor) { private static Icon getIcon(PsiElement element, DeclarationDescriptor declarationDescriptor) {
if (element.isValid()) { if (element.isValid()) {
boolean isClass = element instanceof PsiClass || element instanceof JetClass; boolean isClass = element instanceof PsiClass || element instanceof JetClass;
@@ -41,9 +41,9 @@ import org.jetbrains.kotlin.idea.util.ShortenReferences
import org.jetbrains.kotlin.idea.core.moveFunctionLiteralOutsideParentheses import org.jetbrains.kotlin.idea.core.moveFunctionLiteralOutsideParentheses
import org.jetbrains.kotlin.lexer.JetTokens import org.jetbrains.kotlin.lexer.JetTokens
import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.name.renderName
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.renderer.render
import org.jetbrains.kotlin.resolve.BindingContext import org.jetbrains.kotlin.resolve.BindingContext
import org.jetbrains.kotlin.resolve.CompileTimeConstantUtils import org.jetbrains.kotlin.resolve.CompileTimeConstantUtils
import org.jetbrains.kotlin.resolve.DescriptorUtils import org.jetbrains.kotlin.resolve.DescriptorUtils
@@ -621,7 +621,7 @@ public abstract class DeprecatedSymbolUsageFixBase(
assert(usages.all { expression.isAncestor(it, strict = true) }) assert(usages.all { expression.isAncestor(it, strict = true) })
fun replaceUsages(name: Name) { fun replaceUsages(name: Name) {
val nameInCode = psiFactory.createExpression(name.renderName()) val nameInCode = psiFactory.createExpression(name.render())
for (usage in usages) { for (usage in usages) {
usage.replace(nameInCode) usage.replace(nameInCode)
} }