diff --git a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/kotlinSignature/SignaturesPropagationData.java b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/kotlinSignature/SignaturesPropagationData.java index 7d84015dd5a..054393ec1cc 100644 --- a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/kotlinSignature/SignaturesPropagationData.java +++ b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/kotlinSignature/SignaturesPropagationData.java @@ -608,7 +608,7 @@ public class SignaturesPropagationData { boolean annotatedAsNotNull = howThisTypeIsUsed != TYPE_ARGUMENT && !TypeUtils.isNullableType(autoType); if (annotatedAsNotNull && someSupersNotCovariantNullable) { - DescriptorRenderer renderer = DescriptorRenderer.SOURCE_CODE_SHORT_NAMES_IN_TYPES; + DescriptorRenderer renderer = DescriptorRenderer.SHORT_NAMES_IN_TYPES; reportError("In superclass type is nullable: " + typesFromSuper + ", in subclass it is not: " + renderer.renderType(autoType)); return true; } diff --git a/core/descriptors/src/org/jetbrains/jet/lang/resolve/ImportPath.java b/core/descriptors/src/org/jetbrains/jet/lang/resolve/ImportPath.java index 42c3721229b..9c2a23a7862 100644 --- a/core/descriptors/src/org/jetbrains/jet/lang/resolve/ImportPath.java +++ b/core/descriptors/src/org/jetbrains/jet/lang/resolve/ImportPath.java @@ -51,7 +51,7 @@ public final class ImportPath { } public String getPathStr() { - return DescriptorRenderer.SOURCE_CODE.renderFqName(fqName) + (isAllUnder ? ".*" : ""); + return DescriptorRenderer.FQ_NAMES_IN_TYPES.renderFqName(fqName) + (isAllUnder ? ".*" : ""); } @Override diff --git a/core/descriptors/src/org/jetbrains/jet/renderer/DescriptorRenderer.java b/core/descriptors/src/org/jetbrains/jet/renderer/DescriptorRenderer.java index 3d528df488c..f55f8748a7f 100644 --- a/core/descriptors/src/org/jetbrains/jet/renderer/DescriptorRenderer.java +++ b/core/descriptors/src/org/jetbrains/jet/renderer/DescriptorRenderer.java @@ -21,7 +21,6 @@ import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor; import org.jetbrains.jet.lang.descriptors.FunctionDescriptor; import org.jetbrains.jet.lang.descriptors.ValueParameterDescriptor; import org.jetbrains.jet.lang.descriptors.annotations.AnnotationDescriptor; -import org.jetbrains.jet.lang.resolve.name.FqName; import org.jetbrains.jet.lang.resolve.name.FqNameBase; import org.jetbrains.jet.lang.resolve.name.Name; import org.jetbrains.jet.lang.types.JetType; @@ -32,22 +31,6 @@ import java.util.List; public interface DescriptorRenderer extends Renderer { DescriptorRenderer COMPACT_WITH_MODIFIERS = new DescriptorRendererBuilder().setWithDefinedIn(false).build(); - DescriptorRenderer SOURCE_CODE = new DescriptorRendererBuilder() - .setNormalizedVisibilities(true) - .setWithDefinedIn(false) - .setShortNames(false) - .setShowInternalKeyword(false) - .setOverrideRenderingPolicy(OverrideRenderingPolicy.RENDER_OVERRIDE) - .setUnitReturnType(false).build(); - - DescriptorRenderer SOURCE_CODE_SHORT_NAMES_IN_TYPES = new DescriptorRendererBuilder() - .setNormalizedVisibilities(true) - .setWithDefinedIn(false) - .setShortNames(true) - .setShowInternalKeyword(false) - .setOverrideRenderingPolicy(OverrideRenderingPolicy.RENDER_OVERRIDE) - .setUnitReturnType(false).build(); - DescriptorRenderer COMPACT = new DescriptorRendererBuilder() .setWithDefinedIn(false) .setModifiers().build(); diff --git a/core/descriptors/src/org/jetbrains/jet/renderer/DescriptorRendererBuilder.java b/core/descriptors/src/org/jetbrains/jet/renderer/DescriptorRendererBuilder.java index 266848db7fd..a60f7d55615 100644 --- a/core/descriptors/src/org/jetbrains/jet/renderer/DescriptorRendererBuilder.java +++ b/core/descriptors/src/org/jetbrains/jet/renderer/DescriptorRendererBuilder.java @@ -16,9 +16,11 @@ package org.jetbrains.jet.renderer; +import kotlin.Function1; import kotlin.KotlinPackage; import org.jetbrains.annotations.NotNull; import org.jetbrains.jet.lang.resolve.name.FqName; +import org.jetbrains.jet.lang.types.JetType; import java.util.Collection; import java.util.Collections; @@ -43,6 +45,12 @@ public class DescriptorRendererBuilder { private boolean withoutFunctionParameterNames = false; private boolean withoutTypeParameters = false; private boolean withoutSuperTypes = false; + private Function1 typeNormalizer = new Function1() { + @Override + public JetType invoke(JetType type) { + return type; + } + }; @NotNull private DescriptorRenderer.OverrideRenderingPolicy overrideRenderingPolicy = DescriptorRenderer.OverrideRenderingPolicy.RENDER_OPEN; @@ -201,6 +209,12 @@ public class DescriptorRendererBuilder { return this; } + @NotNull + public DescriptorRendererBuilder setTypeNormalizer(@NotNull Function1 typeNormalizer) { + this.typeNormalizer = typeNormalizer; + return this; + } + @NotNull public DescriptorRenderer build() { return new DescriptorRendererImpl( @@ -208,7 +222,7 @@ public class DescriptorRendererBuilder { normalizedVisibilities, showInternalKeyword, prettyFunctionTypes, uninferredTypeParameterAsName, overrideRenderingPolicy, valueParametersHandler, textFormat, excludedAnnotationClasses, includePropertyConstant, includeSynthesizedParameterNames, withoutFunctionParameterNames, withoutTypeParameters, receiverAfterName, - renderClassObjectName, withoutSuperTypes); + renderClassObjectName, withoutSuperTypes, typeNormalizer); } } diff --git a/core/descriptors/src/org/jetbrains/jet/renderer/DescriptorRendererImpl.java b/core/descriptors/src/org/jetbrains/jet/renderer/DescriptorRendererImpl.java index 32719d524dd..ed258d3e5d8 100644 --- a/core/descriptors/src/org/jetbrains/jet/renderer/DescriptorRendererImpl.java +++ b/core/descriptors/src/org/jetbrains/jet/renderer/DescriptorRendererImpl.java @@ -46,6 +46,7 @@ import static org.jetbrains.jet.lang.types.TypeUtils.CANT_INFER_LAMBDA_PARAM_TYP import static org.jetbrains.jet.lang.types.TypeUtils.DONT_CARE; public class DescriptorRendererImpl implements DescriptorRenderer { + private final Function1 typeNormalizer; private final boolean shortNames; private final boolean withDefinedIn; private final Set modifiers; @@ -98,7 +99,8 @@ public class DescriptorRendererImpl implements DescriptorRenderer { boolean withoutTypeParameters, boolean receiverAfterName, boolean renderClassObjectName, - boolean withoutSuperTypes + boolean withoutSuperTypes, + Function1 typeNormalizer ) { this.shortNames = shortNames; this.withDefinedIn = withDefinedIn; @@ -123,6 +125,7 @@ public class DescriptorRendererImpl implements DescriptorRenderer { this.receiverAfterName = receiverAfterName; this.renderClassObjectName = renderClassObjectName; this.withoutSuperTypes = withoutSuperTypes; + this.typeNormalizer = typeNormalizer; } /* FORMATTING */ @@ -293,19 +296,24 @@ public class DescriptorRendererImpl implements DescriptorRenderer { @NotNull @Override public String renderType(@NotNull JetType type) { + return renderNormalizedType(typeNormalizer.invoke(type)); + } + + @NotNull + private String renderNormalizedType(@NotNull JetType type) { if (type.isFlexible()) { if (!debugMode) { return renderFlexibleType(type); } else { - return "(" + renderType(type.getLowerBound()) + ".." + renderType(type.getUpperBound()) + ")"; + return "(" + renderNormalizedType(type.getLowerBound()) + ".." + renderNormalizedType(type.getUpperBound()) + ")"; } } return renderInflexibleType(type); } private String renderInflexibleType(@NotNull JetType type) { - assert !type.isFlexible() : "Flexible types not allowed here: " + renderType(type); + assert !type.isFlexible() : "Flexible types not allowed here: " + renderNormalizedType(type); if (type == CANT_INFER_LAMBDA_PARAM_TYPE || type == DONT_CARE) { return "???"; @@ -364,7 +372,7 @@ public class DescriptorRendererImpl implements DescriptorRenderer { kotlinPrefix + "Array<(out) " ); if (array != null) return array; - return "(" + renderType(lower) + ".." + renderType(upper) + ")"; + return "(" + renderNormalizedType(lower) + ".." + renderNormalizedType(upper) + ")"; } @Nullable @@ -438,7 +446,7 @@ public class DescriptorRendererImpl implements DescriptorRenderer { if (typeProjection.getProjectionKind() != Variance.INVARIANT) { builder.append(typeProjection.getProjectionKind()).append(" "); } - builder.append(renderType(typeProjection.getType())); + builder.append(renderNormalizedType(typeProjection.getType())); if (iterator.hasNext()) { builder.append(", "); } @@ -451,14 +459,14 @@ public class DescriptorRendererImpl implements DescriptorRenderer { JetType receiverType = KotlinBuiltIns.getInstance().getReceiverType(type); if (receiverType != null) { - sb.append(renderType(receiverType)); + sb.append(renderNormalizedType(receiverType)); sb.append("."); } sb.append("("); appendTypeProjections(KotlinBuiltIns.getInstance().getParameterTypeProjectionsFromFunctionType(type), sb); sb.append(") ").append(arrow()).append(" "); - sb.append(renderType(KotlinBuiltIns.getInstance().getReturnTypeFromFunctionType(type))); + sb.append(renderNormalizedType(KotlinBuiltIns.getInstance().getReturnTypeFromFunctionType(type))); if (type.isNullable()) { return "(" + sb + ")?"; diff --git a/idea/src/org/jetbrains/jet/plugin/actions/JetAddFunctionToClassifierAction.java b/idea/src/org/jetbrains/jet/plugin/actions/JetAddFunctionToClassifierAction.java index 499c49037e1..1f835a08f4e 100644 --- a/idea/src/org/jetbrains/jet/plugin/actions/JetAddFunctionToClassifierAction.java +++ b/idea/src/org/jetbrains/jet/plugin/actions/JetAddFunctionToClassifierAction.java @@ -42,6 +42,7 @@ import org.jetbrains.jet.lang.types.lang.KotlinBuiltIns; import org.jetbrains.jet.plugin.JetBundle; import org.jetbrains.jet.plugin.codeInsight.DescriptorToDeclarationUtil; import org.jetbrains.jet.plugin.codeInsight.ShortenReferences; +import org.jetbrains.jet.plugin.util.IdeDescriptorRenderers; import org.jetbrains.jet.renderer.DescriptorRenderer; import javax.swing.*; @@ -74,7 +75,7 @@ public class JetAddFunctionToClassifierAction implements QuestionAction { @NotNull final ClassDescriptor typeDescriptor, @NotNull final FunctionDescriptor functionDescriptor ) { - final String signatureString = DescriptorRenderer.SOURCE_CODE.render(functionDescriptor); + final String signatureString = IdeDescriptorRenderers.SOURCE_CODE.render(functionDescriptor); PsiDocumentManager.getInstance(project).commitAllDocuments(); @@ -158,7 +159,7 @@ public class JetAddFunctionToClassifierAction implements QuestionAction { public String getTextFor(FunctionDescriptor functionDescriptor) { ClassDescriptor type = (ClassDescriptor) functionDescriptor.getContainingDeclaration(); return JetBundle.message("add.function.to.type.action.single", - DescriptorRenderer.SOURCE_CODE_SHORT_NAMES_IN_TYPES.render(functionDescriptor), + IdeDescriptorRenderers.SOURCE_CODE_SHORT_NAMES_IN_TYPES.render(functionDescriptor), type.getName().toString()); } }; diff --git a/idea/src/org/jetbrains/jet/plugin/codeInsight/CodeInsightUtils.java b/idea/src/org/jetbrains/jet/plugin/codeInsight/CodeInsightUtils.java index 65275a2e979..9226d3d2c58 100644 --- a/idea/src/org/jetbrains/jet/plugin/codeInsight/CodeInsightUtils.java +++ b/idea/src/org/jetbrains/jet/plugin/codeInsight/CodeInsightUtils.java @@ -30,6 +30,8 @@ import org.jetbrains.annotations.Nullable; import org.jetbrains.jet.lang.psi.*; import org.jetbrains.jet.lang.types.JetType; import org.jetbrains.jet.lang.types.lang.KotlinBuiltIns; +import org.jetbrains.jet.plugin.util.IdeDescriptorRenderers; +import org.jetbrains.jet.renderer.DescriptorRenderer; import java.util.ArrayList; import java.util.List; diff --git a/idea/src/org/jetbrains/jet/plugin/codeInsight/KotlinCopyPasteReferenceProcessor.kt b/idea/src/org/jetbrains/jet/plugin/codeInsight/KotlinCopyPasteReferenceProcessor.kt index 5acc5286605..59633a62d2c 100644 --- a/idea/src/org/jetbrains/jet/plugin/codeInsight/KotlinCopyPasteReferenceProcessor.kt +++ b/idea/src/org/jetbrains/jet/plugin/codeInsight/KotlinCopyPasteReferenceProcessor.kt @@ -64,6 +64,7 @@ import org.jetbrains.jet.utils.* import org.jetbrains.jet.renderer.DescriptorRenderer import org.jetbrains.jet.lang.resolve.descriptorUtil.isExtension import com.intellij.openapi.progress.ProcessCanceledException +import org.jetbrains.jet.plugin.util.IdeDescriptorRenderers //NOTE: this class is based on CopyPasteReferenceProcessor and JavaCopyPasteReferenceProcessor public class KotlinCopyPasteReferenceProcessor() : CopyPastePostProcessor() { @@ -332,7 +333,7 @@ public class KotlinCopyPasteReferenceProcessor() : CopyPastePostProcessor if (descriptor.getKind() != ClassKind.CLASS_OBJECT) qualifiedNameForSourceCode(descriptor) else qualifierName(descriptor.getContainingDeclaration()) - is PackageViewDescriptor -> DescriptorRenderer.SOURCE_CODE.renderFqName(descriptor.getFqName()) - is PackageFragmentDescriptor -> DescriptorRenderer.SOURCE_CODE.renderFqName(descriptor.fqName) + is PackageViewDescriptor -> IdeDescriptorRenderers.SOURCE_CODE.renderFqName(descriptor.getFqName()) + is PackageFragmentDescriptor -> IdeDescriptorRenderers.SOURCE_CODE.renderFqName(descriptor.fqName) else -> null } diff --git a/idea/src/org/jetbrains/jet/plugin/completion/NamedParametersCompletion.kt b/idea/src/org/jetbrains/jet/plugin/completion/NamedParametersCompletion.kt index 55f858edb11..f6232d03b87 100644 --- a/idea/src/org/jetbrains/jet/plugin/completion/NamedParametersCompletion.kt +++ b/idea/src/org/jetbrains/jet/plugin/completion/NamedParametersCompletion.kt @@ -38,6 +38,7 @@ import org.jetbrains.jet.lang.psi.psiUtil.getCallNameExpression import com.intellij.psi.PsiElement import com.intellij.codeInsight.completion.InsertHandler import org.jetbrains.jet.lang.resolve.name.Name +import org.jetbrains.jet.plugin.util.IdeDescriptorRenderers object NamedParametersCompletion { private val positionFilter = AndFilter( @@ -109,7 +110,7 @@ object NamedParametersCompletion { } val editor = context.getEditor() - val text = DescriptorRenderer.SOURCE_CODE.renderName(parameterName) + " = " + val text = IdeDescriptorRenderers.SOURCE_CODE.renderName(parameterName) + " = " editor.getDocument().replaceString(context.getStartOffset(), context.getTailOffset(), text) editor.getCaretModel().moveToOffset(context.getStartOffset() + text.length) } diff --git a/idea/src/org/jetbrains/jet/plugin/completion/handlers/BaseDeclarationInsertHandler.kt b/idea/src/org/jetbrains/jet/plugin/completion/handlers/BaseDeclarationInsertHandler.kt index 26c4ac4a091..9ecac7ee1d1 100644 --- a/idea/src/org/jetbrains/jet/plugin/completion/handlers/BaseDeclarationInsertHandler.kt +++ b/idea/src/org/jetbrains/jet/plugin/completion/handlers/BaseDeclarationInsertHandler.kt @@ -20,15 +20,15 @@ import com.intellij.codeInsight.completion.InsertHandler import com.intellij.codeInsight.lookup.LookupElement import com.intellij.codeInsight.completion.InsertionContext import org.jetbrains.jet.plugin.completion.DeclarationLookupObject -import org.jetbrains.jet.renderer.DescriptorRenderer import com.intellij.openapi.util.TextRange +import org.jetbrains.jet.plugin.util.IdeDescriptorRenderers open class BaseDeclarationInsertHandler : InsertHandler { override fun handleInsert(context: InsertionContext, item: LookupElement) { val descriptor = (item.getObject() as? DeclarationLookupObject)?.descriptor if (descriptor != null) { val name = descriptor.getName() - val nameInCode = DescriptorRenderer.SOURCE_CODE.renderName(name) + val nameInCode = IdeDescriptorRenderers.SOURCE_CODE.renderName(name) val document = context.getDocument() val needEscaping = nameInCode != name.asString() // we check that text inserted matches the name because something else can be inserted by custom insert handler diff --git a/idea/src/org/jetbrains/jet/plugin/completion/handlers/GenerateLambda.kt b/idea/src/org/jetbrains/jet/plugin/completion/handlers/GenerateLambda.kt index ffa7dd9f573..02356f5b9b2 100644 --- a/idea/src/org/jetbrains/jet/plugin/completion/handlers/GenerateLambda.kt +++ b/idea/src/org/jetbrains/jet/plugin/completion/handlers/GenerateLambda.kt @@ -18,8 +18,6 @@ package org.jetbrains.jet.plugin.completion.handlers import com.intellij.openapi.command.CommandProcessor import com.intellij.codeInsight.completion.InsertionContext -import com.intellij.openapi.application.ApplicationManager -import com.intellij.openapi.util.Computable import com.intellij.codeInsight.template.TemplateManager import com.intellij.openapi.util.TextRange import com.intellij.codeInsight.template.Template @@ -43,6 +41,7 @@ import org.jetbrains.jet.lang.psi.JetFile import org.jetbrains.jet.plugin.caches.resolve.getLazyResolveSession import org.jetbrains.jet.plugin.util.application.runWriteAction import org.jetbrains.jet.plugin.refactoring.EmptyValidator +import org.jetbrains.jet.plugin.util.IdeDescriptorRenderers fun insertLambdaTemplate(context: InsertionContext, placeholderRange: TextRange, lambdaType: JetType) { val explicitParameterTypes = needExplicitParameterTypes(context, placeholderRange, lambdaType) @@ -118,7 +117,7 @@ private fun buildTemplate(lambdaType: JetType, explicitParameterTypes: Boolean, //TODO: check for names in scope template.addVariable(ParameterNameExpression(JetNameSuggester.suggestNames(parameterType, EmptyValidator, "p")), true) if (explicitParameterTypes) { - template.addTextSegment(": " + DescriptorRenderer.SOURCE_CODE.renderType(parameterType)) + template.addTextSegment(": " + IdeDescriptorRenderers.SOURCE_CODE.renderType(parameterType)) } } diff --git a/idea/src/org/jetbrains/jet/plugin/completion/smart/MultipleArgumentsItemProvider.kt b/idea/src/org/jetbrains/jet/plugin/completion/smart/MultipleArgumentsItemProvider.kt index 4e89f0168e2..64c56bb3ce2 100644 --- a/idea/src/org/jetbrains/jet/plugin/completion/smart/MultipleArgumentsItemProvider.kt +++ b/idea/src/org/jetbrains/jet/plugin/completion/smart/MultipleArgumentsItemProvider.kt @@ -21,7 +21,6 @@ import org.jetbrains.jet.lang.psi.JetExpression import com.intellij.codeInsight.lookup.LookupElement import org.jetbrains.jet.lang.types.checker.JetTypeChecker import com.intellij.ui.LayeredIcon -import org.jetbrains.jet.renderer.DescriptorRenderer import com.intellij.codeInsight.lookup.LookupElementBuilder import org.jetbrains.jet.plugin.completion.Tail import org.jetbrains.jet.plugin.completion.ItemPriority @@ -34,8 +33,9 @@ import org.jetbrains.jet.lang.descriptors.ValueParameterDescriptor import org.jetbrains.jet.plugin.JetDescriptorIconProvider import org.jetbrains.jet.lang.descriptors.VariableDescriptor import org.jetbrains.jet.plugin.completion.PositionalArgumentExpectedInfo -import org.jetbrains.jet.plugin.completion.assignPriority import java.util.ArrayList +import org.jetbrains.jet.plugin.util.IdeDescriptorRenderers +import org.jetbrains.jet.plugin.completion.assignPriority class MultipleArgumentsItemProvider(val bindingContext: BindingContext, val typesWithAutoCasts: (DeclarationDescriptor) -> Iterable) { @@ -75,7 +75,7 @@ class MultipleArgumentsItemProvider(val bindingContext: BindingContext, compoundIcon.setIcon(firstIcon, 1, 0, 0) return LookupElementBuilder - .create(variables.map { DescriptorRenderer.SOURCE_CODE.renderName(it.getName()) }.joinToString(", ")) + .create(variables.map { IdeDescriptorRenderers.SOURCE_CODE.renderName(it.getName()) }.joinToString(", ")) .withIcon(compoundIcon) .addTail(Tail.RPARENTH) //TODO: support square brackets .assignPriority(ItemPriority.MULTIPLE_ARGUMENTS_ITEM) diff --git a/idea/src/org/jetbrains/jet/plugin/completion/smart/SmartCompletion.kt b/idea/src/org/jetbrains/jet/plugin/completion/smart/SmartCompletion.kt index aa5fe78fcfa..0a4415259a7 100644 --- a/idea/src/org/jetbrains/jet/plugin/completion/smart/SmartCompletion.kt +++ b/idea/src/org/jetbrains/jet/plugin/completion/smart/SmartCompletion.kt @@ -33,6 +33,7 @@ import com.intellij.psi.util.PsiTreeUtil import org.jetbrains.jet.plugin.caches.resolve.getLazyResolveSession import org.jetbrains.jet.renderer.DescriptorRenderer import org.jetbrains.jet.lang.psi.psiUtil.getReceiverExpression +import org.jetbrains.jet.plugin.util.IdeDescriptorRenderers class SmartCompletion(val expression: JetSimpleNameExpression, val resolveSession: ResolveSessionForBodies, @@ -296,7 +297,7 @@ class SmartCompletion(val expression: JetSimpleNameExpression, val typeArgs = jetType.getArguments() var itemText = lookupString + DescriptorRenderer.SHORT_NAMES_IN_TYPES.renderTypeArguments(typeArgs) - val typeText = DescriptorUtils.getFqName(classifier).toString() + DescriptorRenderer.SOURCE_CODE.renderTypeArguments(typeArgs) + val typeText = DescriptorUtils.getFqName(classifier).toString() + IdeDescriptorRenderers.SOURCE_CODE.renderTypeArguments(typeArgs) val insertHandler: InsertHandler = object : InsertHandler { override fun handleInsert(context: InsertionContext, item: LookupElement) { diff --git a/idea/src/org/jetbrains/jet/plugin/completion/smart/StaticMembers.kt b/idea/src/org/jetbrains/jet/plugin/completion/smart/StaticMembers.kt index 6199fcd24dc..e185f7a3768 100644 --- a/idea/src/org/jetbrains/jet/plugin/completion/smart/StaticMembers.kt +++ b/idea/src/org/jetbrains/jet/plugin/completion/smart/StaticMembers.kt @@ -32,6 +32,7 @@ import org.jetbrains.jet.plugin.completion.ExpectedInfo import org.jetbrains.jet.plugin.util.makeNotNullable import org.jetbrains.jet.plugin.completion.qualifiedNameForSourceCode import org.jetbrains.jet.lang.resolve.descriptorUtil.isExtension +import org.jetbrains.jet.plugin.util.IdeDescriptorRenderers // adds java static members, enum members and members from class object class StaticMembers(val bindingContext: BindingContext, val resolveSession: ResolveSessionForBodies) { @@ -133,7 +134,7 @@ class StaticMembers(val bindingContext: BindingContext, val resolveSession: Reso } override fun handleInsert(context: InsertionContext) { - var text = qualifierText + "." + DescriptorRenderer.SOURCE_CODE.renderName(memberDescriptor.getName()) + var text = qualifierText + "." + IdeDescriptorRenderers.SOURCE_CODE.renderName(memberDescriptor.getName()) context.getDocument().replaceString(context.getStartOffset(), context.getTailOffset(), text) context.setTailOffset(context.getStartOffset() + text.length) diff --git a/idea/src/org/jetbrains/jet/plugin/completion/smart/TypeInstantiationItems.kt b/idea/src/org/jetbrains/jet/plugin/completion/smart/TypeInstantiationItems.kt index 8ff32f528c8..fc4354d5235 100644 --- a/idea/src/org/jetbrains/jet/plugin/completion/smart/TypeInstantiationItems.kt +++ b/idea/src/org/jetbrains/jet/plugin/completion/smart/TypeInstantiationItems.kt @@ -35,7 +35,7 @@ import org.jetbrains.jet.plugin.completion.handlers.CaretPosition import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor import org.jetbrains.jet.lang.descriptors.Visibilities import org.jetbrains.jet.plugin.util.makeNotNullable -import org.jetbrains.jet.lang.resolve.DescriptorUtils +import org.jetbrains.jet.plugin.util.IdeDescriptorRenderers class TypeInstantiationItems(val resolveSession: ResolveSessionForBodies, val visibilityFilter: (DeclarationDescriptor) -> Boolean) { public fun addToCollection(collection: MutableCollection, expectedInfos: Collection) { @@ -70,7 +70,7 @@ class TypeInstantiationItems(val resolveSession: ResolveSessionForBodies, val vi var itemText = lookupString + DescriptorRenderer.SHORT_NAMES_IN_TYPES.renderTypeArguments(typeArgs) val insertHandler: InsertHandler - val typeText = qualifiedNameForSourceCode(classifier) + DescriptorRenderer.SOURCE_CODE.renderTypeArguments(typeArgs) + val typeText = qualifiedNameForSourceCode(classifier) + IdeDescriptorRenderers.SOURCE_CODE.renderTypeArguments(typeArgs) if (isAbstract) { val constructorParenthesis = if (classifier.getKind() != ClassKind.TRAIT) "()" else "" itemText += constructorParenthesis diff --git a/idea/src/org/jetbrains/jet/plugin/intentions/MakeTypeExplicitInLambdaIntention.kt b/idea/src/org/jetbrains/jet/plugin/intentions/MakeTypeExplicitInLambdaIntention.kt index e485c5d8fee..c567e0c5569 100644 --- a/idea/src/org/jetbrains/jet/plugin/intentions/MakeTypeExplicitInLambdaIntention.kt +++ b/idea/src/org/jetbrains/jet/plugin/intentions/MakeTypeExplicitInLambdaIntention.kt @@ -20,11 +20,11 @@ import org.jetbrains.jet.lang.psi.JetFunctionLiteralExpression import com.intellij.openapi.editor.Editor import org.jetbrains.jet.plugin.project.AnalyzerFacadeWithCache import org.jetbrains.jet.lang.resolve.BindingContext -import org.jetbrains.jet.renderer.DescriptorRenderer import org.jetbrains.jet.lang.types.ErrorUtils import org.jetbrains.jet.lang.psi.JetPsiFactory import com.intellij.psi.PsiWhiteSpace import org.jetbrains.jet.plugin.codeInsight.ShortenReferences +import org.jetbrains.jet.plugin.util.IdeDescriptorRenderers public class MakeTypeExplicitInLambdaIntention : JetSelfTargetingIntention( "make.type.explicit.in.lambda", javaClass()) { @@ -61,7 +61,7 @@ public class MakeTypeExplicitInLambdaIntention : JetSelfTargetingIntention "" + descriptor.getName() + - ": " + DescriptorRenderer.SOURCE_CODE.renderType(descriptor.getType()) + ": " + IdeDescriptorRenderers.SOURCE_CODE.renderType(descriptor.getType()) }).makeString(", ", "(", ")") val psiFactory = JetPsiFactory(element) val newParameterList = psiFactory.createParameterList(parameterString) @@ -87,7 +87,7 @@ public class MakeTypeExplicitInLambdaIntention : JetSelfTargetingIntention { FunctionDescriptor newFunction = functionsToAdd.get(0); ClassDescriptor supertype = (ClassDescriptor) newFunction.getContainingDeclaration(); return JetBundle.message("add.function.to.type.action.single", - DescriptorRenderer.SOURCE_CODE_SHORT_NAMES_IN_TYPES.render(newFunction), + IdeDescriptorRenderers.SOURCE_CODE_SHORT_NAMES_IN_TYPES.render(newFunction), supertype.getName().toString()); } else { diff --git a/idea/src/org/jetbrains/jet/plugin/quickfix/ChangeMemberFunctionSignatureFix.java b/idea/src/org/jetbrains/jet/plugin/quickfix/ChangeMemberFunctionSignatureFix.java index fb07b1939a6..a21d9bcfa56 100644 --- a/idea/src/org/jetbrains/jet/plugin/quickfix/ChangeMemberFunctionSignatureFix.java +++ b/idea/src/org/jetbrains/jet/plugin/quickfix/ChangeMemberFunctionSignatureFix.java @@ -50,6 +50,7 @@ import org.jetbrains.jet.lang.types.checker.JetTypeChecker; import org.jetbrains.jet.plugin.JetBundle; import org.jetbrains.jet.plugin.caches.resolve.ResolvePackage; import org.jetbrains.jet.plugin.codeInsight.ShortenReferences; +import org.jetbrains.jet.plugin.util.IdeDescriptorRenderers; import org.jetbrains.jet.renderer.DescriptorRenderer; import org.jetbrains.jet.renderer.DescriptorRendererBuilder; @@ -358,7 +359,7 @@ public class ChangeMemberFunctionSignatureFix extends JetHintAction() { @Override public String fun(JetType type) { - return DescriptorRenderer.FQ_NAMES_IN_TYPES.renderType(UtilPackage.approximateFlexibleTypes(type, true)); + return IdeDescriptorRenderers.SOURCE_CODE.renderType(type); } }, ", "); } diff --git a/idea/src/org/jetbrains/jet/plugin/refactoring/safeDelete/KotlinOverridingDialog.java b/idea/src/org/jetbrains/jet/plugin/refactoring/safeDelete/KotlinOverridingDialog.java index e94e1643cbe..32e3fda5ca3 100644 --- a/idea/src/org/jetbrains/jet/plugin/refactoring/safeDelete/KotlinOverridingDialog.java +++ b/idea/src/org/jetbrains/jet/plugin/refactoring/safeDelete/KotlinOverridingDialog.java @@ -41,6 +41,7 @@ import org.jetbrains.jet.lang.resolve.BindingContext; import org.jetbrains.jet.plugin.JetBundle; import org.jetbrains.jet.plugin.project.AnalyzerFacadeWithCache; import org.jetbrains.jet.plugin.refactoring.JetRefactoringUtil; +import org.jetbrains.jet.plugin.util.IdeDescriptorRenderers; import org.jetbrains.jet.renderer.DescriptorRenderer; import javax.swing.*; @@ -98,7 +99,7 @@ class KotlinOverridingDialog extends DialogWrapper { return JetBundle.message( "x.in.y", DescriptorRenderer.COMPACT.render(declarationDescriptor), - DescriptorRenderer.SOURCE_CODE_SHORT_NAMES_IN_TYPES.render(containingDescriptor) + IdeDescriptorRenderers.SOURCE_CODE_SHORT_NAMES_IN_TYPES.render(containingDescriptor) ); } } diff --git a/idea/src/org/jetbrains/jet/plugin/util/IdeDescriptorRenderers.java b/idea/src/org/jetbrains/jet/plugin/util/IdeDescriptorRenderers.java new file mode 100644 index 00000000000..0dd36546504 --- /dev/null +++ b/idea/src/org/jetbrains/jet/plugin/util/IdeDescriptorRenderers.java @@ -0,0 +1,52 @@ +/* + * Copyright 2010-2014 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.jetbrains.jet.plugin.util; + +import kotlin.Function1; +import org.jetbrains.jet.lang.types.JetType; +import org.jetbrains.jet.renderer.DescriptorRenderer; +import org.jetbrains.jet.renderer.DescriptorRendererBuilder; + +public class IdeDescriptorRenderers { + + public static final Function1 APPROXIMATE_FLEXIBLE_TYPES = new Function1() { + @Override + public JetType invoke(JetType type) { + return UtilPackage.approximateFlexibleTypes(type, true); + } + }; + + public static final DescriptorRenderer SOURCE_CODE = new DescriptorRendererBuilder() + .setNormalizedVisibilities(true) + .setWithDefinedIn(false) + .setShortNames(false) + .setShowInternalKeyword(false) + .setOverrideRenderingPolicy(DescriptorRenderer.OverrideRenderingPolicy.RENDER_OVERRIDE) + .setUnitReturnType(false) + .setTypeNormalizer(APPROXIMATE_FLEXIBLE_TYPES) + .build(); + + public static final DescriptorRenderer SOURCE_CODE_SHORT_NAMES_IN_TYPES = new DescriptorRendererBuilder() + .setNormalizedVisibilities(true) + .setWithDefinedIn(false) + .setShortNames(true) + .setShowInternalKeyword(false) + .setOverrideRenderingPolicy(DescriptorRenderer.OverrideRenderingPolicy.RENDER_OVERRIDE) + .setUnitReturnType(false) + .setTypeNormalizer(APPROXIMATE_FLEXIBLE_TYPES) + .build(); +} diff --git a/idea/src/org/jetbrains/jet/plugin/util/psi/patternMatching/JetPsiUnifier.kt b/idea/src/org/jetbrains/jet/plugin/util/psi/patternMatching/JetPsiUnifier.kt index d899f6342b7..92153dfa69d 100644 --- a/idea/src/org/jetbrains/jet/plugin/util/psi/patternMatching/JetPsiUnifier.kt +++ b/idea/src/org/jetbrains/jet/plugin/util/psi/patternMatching/JetPsiUnifier.kt @@ -88,6 +88,7 @@ import org.jetbrains.jet.lang.psi.JetProperty import org.jetbrains.jet.lang.psi.JetDelegatorToSuperClass import org.jetbrains.jet.lang.psi.JetDelegationSpecifier import org.jetbrains.jet.plugin.refactoring.getContextForContainingDeclarationBody +import org.jetbrains.jet.plugin.util.IdeDescriptorRenderers public trait UnificationResult { public enum class Status { @@ -564,7 +565,7 @@ public class JetPsiUnifier( fun resolveAndSortDeclarationsByDescriptor(declarations: List): List> { return declarations .map { it to it.bindingContext[BindingContext.DECLARATION_TO_DESCRIPTOR, it] } - .sortBy { it.second?.let { DescriptorRenderer.SOURCE_CODE.render(it) } ?: "" } + .sortBy { it.second?.let { IdeDescriptorRenderers.SOURCE_CODE.render(it) } ?: "" } } fun sortDeclarationsByElementType(declarations: List): List { diff --git a/idea/testData/codeInsight/overrideImplement/propagationKJK/foo/Impl.kt.after b/idea/testData/codeInsight/overrideImplement/propagationKJK/foo/Impl.kt.after index 35abf62d33b..6aff244c8b2 100644 --- a/idea/testData/codeInsight/overrideImplement/propagationKJK/foo/Impl.kt.after +++ b/idea/testData/codeInsight/overrideImplement/propagationKJK/foo/Impl.kt.after @@ -1,7 +1,7 @@ package foo class Impl : Bar() { - override fun f(): Any { + override fun f(): Any? { return super.f() } } diff --git a/idea/testData/copyPaste/conversion/SeveralMethodsSample.expected.kt b/idea/testData/copyPaste/conversion/SeveralMethodsSample.expected.kt index 0e2793845ee..b50aec96701 100644 --- a/idea/testData/copyPaste/conversion/SeveralMethodsSample.expected.kt +++ b/idea/testData/copyPaste/conversion/SeveralMethodsSample.expected.kt @@ -11,7 +11,7 @@ class A { if (declarationDescriptor is CallableMemberDescriptor) { val containingDescriptor = declarationDescriptor.getContainingDeclaration() if (containingDescriptor is ClassDescriptor) { - return JetBundle.message("x.in.y", DescriptorRenderer.COMPACT.render(declarationDescriptor), DescriptorRenderer.SOURCE_CODE_SHORT_NAMES_IN_TYPES.render(containingDescriptor)) + return JetBundle.message("x.in.y", DescriptorRenderer.COMPACT.render(declarationDescriptor), IdeDescriptorRenderers.SOURCE_CODE_SHORT_NAMES_IN_TYPES.render(containingDescriptor)) } } } diff --git a/idea/testData/copyPaste/conversion/SeveralMethodsSample.java b/idea/testData/copyPaste/conversion/SeveralMethodsSample.java index dfdde6dc6d4..d6107245742 100644 --- a/idea/testData/copyPaste/conversion/SeveralMethodsSample.java +++ b/idea/testData/copyPaste/conversion/SeveralMethodsSample.java @@ -12,7 +12,7 @@ class A { return JetBundle.message( "x.in.y", DescriptorRenderer.COMPACT.render(declarationDescriptor), - DescriptorRenderer.SOURCE_CODE_SHORT_NAMES_IN_TYPES.render(containingDescriptor) + IdeDescriptorRenderers.SOURCE_CODE_SHORT_NAMES_IN_TYPES.render(containingDescriptor) ); } }