diff --git a/compiler/frontend/src/org/jetbrains/jet/resolve/DescriptorRenderer.java b/compiler/frontend/src/org/jetbrains/jet/resolve/DescriptorRenderer.java index ce13d5ff629..851c287c4c2 100644 --- a/compiler/frontend/src/org/jetbrains/jet/resolve/DescriptorRenderer.java +++ b/compiler/frontend/src/org/jetbrains/jet/resolve/DescriptorRenderer.java @@ -23,6 +23,7 @@ import org.jetbrains.jet.lang.diagnostics.rendering.Renderer; import org.jetbrains.jet.lang.resolve.DescriptorUtils; import org.jetbrains.jet.lang.resolve.name.FqName; import org.jetbrains.jet.lang.resolve.name.FqNameUnsafe; +import org.jetbrains.jet.lang.resolve.scopes.receivers.ReceiverDescriptor; import org.jetbrains.jet.lang.types.ErrorUtils; import org.jetbrains.jet.lang.types.JetType; import org.jetbrains.jet.lang.types.TypeProjection; @@ -43,7 +44,6 @@ public class DescriptorRenderer implements Renderer { return false; } }; - public static final DescriptorRenderer COMPACT = new DescriptorRenderer() { @Override protected boolean shouldRenderDefinedIn() { @@ -55,9 +55,23 @@ public class DescriptorRenderer implements Renderer { return false; } }; + public static final DescriptorRenderer STARTS_FROM_NAME = new DescriptorRenderer() { + @Override + protected boolean shouldRenderDefinedIn() { + return false; + } + @Override + protected boolean shouldRenderModifiers() { + return false; + } + + @Override + protected boolean shouldStartsFromName() { + return true; + } + }; public static final DescriptorRenderer TEXT = new DescriptorRenderer(); - public static final DescriptorRenderer DEBUG_TEXT = new DescriptorRenderer() { @Override protected boolean hasDefaultValue(ValueParameterDescriptor descriptor) { @@ -65,13 +79,8 @@ public class DescriptorRenderer implements Renderer { return descriptor.declaresDefaultValue(); } }; - public static final DescriptorRenderer HTML = new HtmlDescriptorRenderer(); - -//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// - - private final RenderDeclarationDescriptorVisitor rootVisitor = new RenderDeclarationDescriptorVisitor(); - + //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// protected final DeclarationDescriptorVisitor subVisitor = new RenderDeclarationDescriptorVisitor() { @Override public Void visitTypeParameterDescriptor(TypeParameterDescriptor descriptor, StringBuilder builder) { @@ -88,6 +97,16 @@ public class DescriptorRenderer implements Renderer { return null; } }; + private final RenderDeclarationDescriptorVisitor rootVisitor = new RenderDeclarationDescriptorVisitor(); + + private static List getOuterClassesNames(ClassDescriptor cd) { + ArrayList result = new ArrayList(); + while (cd.getContainingDeclaration() instanceof ClassifierDescriptor) { + result.add(cd.getName().getName()); + cd = (ClassDescriptor) cd.getContainingDeclaration(); + } + return result; + } protected boolean hasDefaultValue(ValueParameterDescriptor descriptor) { return descriptor.hasDefaultValue(); @@ -126,15 +145,6 @@ public class DescriptorRenderer implements Renderer { } } - private static List getOuterClassesNames(ClassDescriptor cd) { - ArrayList result = new ArrayList(); - while (cd.getContainingDeclaration() instanceof ClassifierDescriptor) { - result.add(cd.getName().getName()); - cd = (ClassDescriptor)cd.getContainingDeclaration(); - } - return result; - } - private String renderDefaultType(JetType type, boolean shortNamesOnly) { StringBuilder sb = new StringBuilder(); ClassifierDescriptor cd = type.getConstructor().getDeclarationDescriptor(); @@ -259,6 +269,10 @@ public class DescriptorRenderer implements Renderer { return true; } + protected boolean shouldStartsFromName() { + return false; + } + private void appendDefinedIn(DeclarationDescriptor declarationDescriptor, StringBuilder stringBuilder) { if (declarationDescriptor instanceof ModuleDescriptor) { stringBuilder.append(" is a module"); @@ -312,6 +326,24 @@ public class DescriptorRenderer implements Renderer { } } + public static class HtmlDescriptorRenderer extends DescriptorRenderer { + + @Override + protected String escape(String s) { + return s.replaceAll("<", "<").replaceAll(">", ">"); + } + + @Override + public String renderKeyword(String keyword) { + return "" + keyword + ""; + } + + @Override + public String renderMessage(String s) { + return "" + s + ""; + } + } + private class RenderDeclarationDescriptorVisitor implements DeclarationDescriptorVisitor { @Override @@ -333,7 +365,7 @@ public class DescriptorRenderer implements Renderer { protected Void visitVariableDescriptor(VariableDescriptor descriptor, StringBuilder builder, boolean skipValVar) { JetType type = descriptor.getType(); if (descriptor instanceof ValueParameterDescriptor) { - JetType varargElementType = ((ValueParameterDescriptor)descriptor).getVarargElementType(); + JetType varargElementType = ((ValueParameterDescriptor) descriptor).getVarargElementType(); if (varargElementType != null) { builder.append(renderKeyword("vararg")).append(" "); type = varargElementType; @@ -343,7 +375,7 @@ public class DescriptorRenderer implements Renderer { builder, skipValVar ? null : descriptor.isVar(), Collections.emptyList(), - ReceiverParameterDescriptor.NO_RECEIVER_PARAMETER, + ReceiverDescriptor.NO_RECEIVER, type); renderName(descriptor, builder); builder.append(" : ").append(escape(typeString)); @@ -354,11 +386,12 @@ public class DescriptorRenderer implements Renderer { @NotNull StringBuilder builder, @Nullable Boolean isVar, @NotNull List typeParameters, - @Nullable ReceiverParameterDescriptor receiver, - @Nullable JetType outType) { + @NotNull ReceiverDescriptor receiver, + @Nullable JetType outType + ) { String typeString = lt() + "no type>"; if (outType != null) { - if (isVar != null) { + if (isVar != null && !shouldStartsFromName()) { builder.append(renderKeyword(isVar ? "var" : "val")).append(" "); } typeString = renderType(outType); @@ -366,7 +399,7 @@ public class DescriptorRenderer implements Renderer { renderTypeParameters(typeParameters, builder); - if (receiver != null) { + if (receiver.exists()) { builder.append(escape(renderType(receiver.getType()))).append("."); } @@ -375,8 +408,10 @@ public class DescriptorRenderer implements Renderer { @Override public Void visitPropertyDescriptor(PropertyDescriptor descriptor, StringBuilder builder) { - renderVisibility(descriptor.getVisibility(), builder); - renderModality(descriptor.getModality(), builder); + if (!shouldStartsFromName()) { + renderVisibility(descriptor.getVisibility(), builder); + renderModality(descriptor.getModality(), builder); + } String typeString = renderPropertyPrefixAndComputeTypeString( builder, descriptor.isVar(), @@ -389,10 +424,11 @@ public class DescriptorRenderer implements Renderer { } private void renderVisibility(Visibility visibility, StringBuilder builder) { - if(!shouldRenderModifiers()) return; + if (!shouldRenderModifiers()) return; if ("package".equals(visibility.toString())) { builder.append("public/*package*/ "); - } else { + } + else { builder.append(renderKeyword(visibility.toString())).append(" "); } } @@ -416,16 +452,18 @@ public class DescriptorRenderer implements Renderer { @Override public Void visitFunctionDescriptor(FunctionDescriptor descriptor, StringBuilder builder) { - renderVisibility(descriptor.getVisibility(), builder); - renderModality(descriptor.getModality(), builder); - builder.append(renderKeyword("fun")).append(" "); - if (renderTypeParameters(descriptor.getTypeParameters(), builder)) { - builder.append(" "); - } + if (!shouldStartsFromName()) { + renderVisibility(descriptor.getVisibility(), builder); + renderModality(descriptor.getModality(), builder); + builder.append(renderKeyword("fun")).append(" "); + if (renderTypeParameters(descriptor.getTypeParameters(), builder)) { + builder.append(" "); + } - ReceiverParameterDescriptor receiver = descriptor.getReceiverParameter(); - if (receiver != null) { - builder.append(escape(renderType(receiver.getType()))).append("."); + ReceiverDescriptor receiver = descriptor.getReceiverParameter(); + if (receiver.exists()) { + builder.append(escape(renderType(receiver.getType()))).append("."); + } } renderName(descriptor, builder); @@ -445,11 +483,6 @@ public class DescriptorRenderer implements Renderer { return visitFunctionDescriptor(descriptor, data); } - @Override - public Void visitReceiverParameterDescriptor(ReceiverParameterDescriptor descriptor, StringBuilder data) { - throw new UnsupportedOperationException("Don't render receiver parameters"); - } - private void renderWhereSuffix(@NotNull CallableMemberDescriptor callable, @NotNull StringBuilder builder) { boolean first = true; for (TypeParameterDescriptor typeParameter : callable.getTypeParameters()) { @@ -556,16 +589,20 @@ public class DescriptorRenderer implements Renderer { } public void renderClassDescriptor(ClassDescriptor descriptor, StringBuilder builder, String keyword) { - if (descriptor.getKind() != ClassKind.CLASS_OBJECT) { - renderVisibility(descriptor.getVisibility(), builder); + boolean isNotClassObject = descriptor.getKind() != ClassKind.CLASS_OBJECT; + if (!shouldStartsFromName()) { + if (isNotClassObject) { + renderVisibility(descriptor.getVisibility(), builder); + if (descriptor.getKind() != ClassKind.TRAIT && descriptor.getKind() != ClassKind.OBJECT) { + renderModality(descriptor.getModality(), builder); + } + } + builder.append(renderKeyword(keyword)); + if (isNotClassObject) { + builder.append(" "); + } } - if (descriptor.getKind() != ClassKind.TRAIT && descriptor.getKind() != ClassKind.OBJECT - && descriptor.getKind() != ClassKind.CLASS_OBJECT) { - renderModality(descriptor.getModality(), builder); - } - builder.append(renderKeyword(keyword)); - if (descriptor.getKind() != ClassKind.CLASS_OBJECT) { - builder.append(" "); + if (isNotClassObject) { renderName(descriptor, builder); renderTypeParameters(descriptor.getTypeConstructor().getParameters(), builder); } @@ -628,22 +665,4 @@ public class DescriptorRenderer implements Renderer { } } } - - public static class HtmlDescriptorRenderer extends DescriptorRenderer { - - @Override - protected String escape(String s) { - return s.replaceAll("<", "<").replaceAll(">", ">"); - } - - @Override - public String renderKeyword(String keyword) { - return "" + keyword + ""; - } - - @Override - public String renderMessage(String s) { - return "" + s + ""; - } - } } diff --git a/idea/src/org/jetbrains/jet/plugin/codeInsight/DescriptorClassMember.java b/idea/src/org/jetbrains/jet/plugin/codeInsight/DescriptorClassMember.java index e5efa7e1b8d..525bd438d51 100644 --- a/idea/src/org/jetbrains/jet/plugin/codeInsight/DescriptorClassMember.java +++ b/idea/src/org/jetbrains/jet/plugin/codeInsight/DescriptorClassMember.java @@ -83,7 +83,7 @@ public class DescriptorClassMember implements ClassMemberWithElement { @Override public String getText() { - return DescriptorRenderer.TEXT.render(myDescriptor); + return DescriptorRenderer.STARTS_FROM_NAME.render(myDescriptor); } public DeclarationDescriptor getDescriptor() {