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 org.jetbrains.kotlin.lexer.JetTokens
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.name.renderName
import org.jetbrains.kotlin.psi.psiUtil.*
import org.jetbrains.kotlin.renderer.render
import java.util.ArrayList
import java.util.HashMap
import java.util.LinkedHashMap
@@ -82,7 +82,7 @@ private val SUPPORTED_ARGUMENT_TYPES = listOf(
PsiElementArgumentType<JetExpression>(javaClass()),
PsiElementArgumentType<JetTypeReference>(javaClass()),
PlainTextArgumentType<String>(javaClass(), toPlainText = { it }),
PlainTextArgumentType<Name>(javaClass(), toPlainText = { it.renderName() }),
PlainTextArgumentType<Name>(javaClass(), toPlainText = { it.render() }),
PsiChildRangeArgumentType
)
@@ -16,8 +16,6 @@
package org.jetbrains.kotlin.name
import org.jetbrains.kotlin.renderer.DescriptorRenderer
public fun FqName.isSubpackageOf(packageName: FqName): Boolean {
return when {
this == packageName -> true
@@ -78,5 +76,3 @@ public fun isValidJavaFqName(qualifiedName: String?): Boolean {
return state != State.AFTER_DOT
}
public fun Name.renderName(): String = DescriptorRenderer.COMPACT.renderName(this)
@@ -16,7 +16,12 @@
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 {
val nameString = DescriptorRenderer.COMPACT.renderName(descriptor.getName())
@@ -30,3 +35,7 @@ private fun qualifierName(descriptor: DeclarationDescriptor): String? = when (de
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.ReceiverParameterDescriptor
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.name.renderName
import org.jetbrains.kotlin.psi.JetExpression
import org.jetbrains.kotlin.psi.JetFunctionLiteral
import org.jetbrains.kotlin.psi.JetPsiFactory
import org.jetbrains.kotlin.renderer.render
import org.jetbrains.kotlin.resolve.DescriptorToSourceUtils
import org.jetbrains.kotlin.resolve.DescriptorUtils
import org.jetbrains.kotlin.resolve.scopes.JetScope
@@ -60,7 +60,7 @@ public fun JetScope.getImplicitReceiversWithInstanceToExpression(): Map<Receiver
for ((index, receiver) in receivers.withIndex()) {
val owner = receiver.getContainingDeclaration()
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)
(thisWithLabel ?: "this") to true
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.getImplicitReceiversWithInstanceToExpression
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.name.renderName
import org.jetbrains.kotlin.psi.*
import org.jetbrains.kotlin.psi.psiUtil.parents
import org.jetbrains.kotlin.psi.psiUtil.parentsWithSelf
import org.jetbrains.kotlin.renderer.DescriptorRenderer
import org.jetbrains.kotlin.renderer.render
import org.jetbrains.kotlin.resolve.BindingContext
import org.jetbrains.kotlin.resolve.DescriptorToSourceUtils
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 {
val labelInCode = label?.renderName()
val labelInCode = label?.render()
var element = LookupElementBuilder.create(KeywordLookupObject, if (label == null) keyword else "$keyword@$labelInCode")
element = element.withPresentableText(keyword)
element = element.withBoldness(true)
@@ -25,12 +25,17 @@ import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiMember;
import com.intellij.psi.util.PsiTreeUtil;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.kotlin.descriptors.ClassDescriptor;
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor;
import org.jetbrains.kotlin.idea.JetDescriptorIconProvider;
import org.jetbrains.kotlin.psi.JetClass;
import org.jetbrains.kotlin.psi.JetDeclaration;
import org.jetbrains.kotlin.psi.JetNamedDeclaration;
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.*;
@@ -42,12 +47,28 @@ public class DescriptorClassMember extends MemberChooserObjectBase implements Cl
@NotNull
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) {
super(DescriptorRenderer.STARTS_FROM_NAME.render(descriptor), getIcon(element, descriptor));
super(getText(descriptor), getIcon(element, descriptor));
myPsiElement = element;
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) {
if (element.isValid()) {
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.lexer.JetTokens
import org.jetbrains.kotlin.name.Name
import org.jetbrains.kotlin.name.renderName
import org.jetbrains.kotlin.psi.*
import org.jetbrains.kotlin.psi.psiUtil.*
import org.jetbrains.kotlin.renderer.render
import org.jetbrains.kotlin.resolve.BindingContext
import org.jetbrains.kotlin.resolve.CompileTimeConstantUtils
import org.jetbrains.kotlin.resolve.DescriptorUtils
@@ -621,7 +621,7 @@ public abstract class DeprecatedSymbolUsageFixBase(
assert(usages.all { expression.isAncestor(it, strict = true) })
fun replaceUsages(name: Name) {
val nameInCode = psiFactory.createExpression(name.renderName())
val nameInCode = psiFactory.createExpression(name.render())
for (usage in usages) {
usage.replace(nameInCode)
}