Entries rendered without keywords before name

This commit is contained in:
Vladimir Rudev
2012-11-02 01:10:33 +04:00
committed by Nikolay Krasko
parent db42036d35
commit fc8fb744c7
2 changed files with 88 additions and 69 deletions
@@ -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<DeclarationDescriptor> {
return false;
}
};
public static final DescriptorRenderer COMPACT = new DescriptorRenderer() {
@Override
protected boolean shouldRenderDefinedIn() {
@@ -55,9 +55,23 @@ public class DescriptorRenderer implements Renderer<DeclarationDescriptor> {
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<DeclarationDescriptor> {
return descriptor.declaresDefaultValue();
}
};
public static final DescriptorRenderer HTML = new HtmlDescriptorRenderer();
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
private final RenderDeclarationDescriptorVisitor rootVisitor = new RenderDeclarationDescriptorVisitor();
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
protected final DeclarationDescriptorVisitor<Void, StringBuilder> subVisitor = new RenderDeclarationDescriptorVisitor() {
@Override
public Void visitTypeParameterDescriptor(TypeParameterDescriptor descriptor, StringBuilder builder) {
@@ -88,6 +97,16 @@ public class DescriptorRenderer implements Renderer<DeclarationDescriptor> {
return null;
}
};
private final RenderDeclarationDescriptorVisitor rootVisitor = new RenderDeclarationDescriptorVisitor();
private static List<String> getOuterClassesNames(ClassDescriptor cd) {
ArrayList<String> result = new ArrayList<String>();
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<DeclarationDescriptor> {
}
}
private static List<String> getOuterClassesNames(ClassDescriptor cd) {
ArrayList<String> result = new ArrayList<String>();
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<DeclarationDescriptor> {
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<DeclarationDescriptor> {
}
}
public static class HtmlDescriptorRenderer extends DescriptorRenderer {
@Override
protected String escape(String s) {
return s.replaceAll("<", "&lt;").replaceAll(">", "&gt;");
}
@Override
public String renderKeyword(String keyword) {
return "<b>" + keyword + "</b>";
}
@Override
public String renderMessage(String s) {
return "<i>" + s + "</i>";
}
}
private class RenderDeclarationDescriptorVisitor implements DeclarationDescriptorVisitor<Void, StringBuilder> {
@Override
@@ -333,7 +365,7 @@ public class DescriptorRenderer implements Renderer<DeclarationDescriptor> {
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<DeclarationDescriptor> {
builder,
skipValVar ? null : descriptor.isVar(),
Collections.<TypeParameterDescriptor>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<DeclarationDescriptor> {
@NotNull StringBuilder builder,
@Nullable Boolean isVar,
@NotNull List<TypeParameterDescriptor> 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<DeclarationDescriptor> {
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<DeclarationDescriptor> {
@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<DeclarationDescriptor> {
}
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<DeclarationDescriptor> {
@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<DeclarationDescriptor> {
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<DeclarationDescriptor> {
}
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<DeclarationDescriptor> {
}
}
}
public static class HtmlDescriptorRenderer extends DescriptorRenderer {
@Override
protected String escape(String s) {
return s.replaceAll("<", "&lt;").replaceAll(">", "&gt;");
}
@Override
public String renderKeyword(String keyword) {
return "<b>" + keyword + "</b>";
}
@Override
public String renderMessage(String s) {
return "<i>" + s + "</i>";
}
}
}
@@ -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() {