Refactoring: use DescriptionRenderer to generate overriding functions / properties.
This commit is contained in:
committed by
Andrey Breslav
parent
5b1f93b42e
commit
97796f9b0f
@@ -17,7 +17,6 @@
|
||||
package org.jetbrains.jet.renderer;
|
||||
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor;
|
||||
import org.jetbrains.jet.lang.descriptors.FunctionDescriptor;
|
||||
import org.jetbrains.jet.lang.descriptors.ValueParameterDescriptor;
|
||||
@@ -27,6 +26,20 @@ import org.jetbrains.jet.lang.types.JetType;
|
||||
public interface DescriptorRenderer extends Renderer<DeclarationDescriptor> {
|
||||
DescriptorRenderer COMPACT_WITH_MODIFIERS = new DescriptorRendererBuilder().setWithDefinedIn(false).build();
|
||||
|
||||
DescriptorRenderer SOURCE_CODE = new DescriptorRendererBuilder()
|
||||
.setNormalizedVisibilities(true)
|
||||
.setWithDefinedIn(false)
|
||||
.setShortNames(false)
|
||||
.setShowInternalKeyword(false)
|
||||
.setUnitReturnType(false).build();
|
||||
|
||||
DescriptorRenderer SOURCE_CODE_SHORT_NAMES_IN_TYPES = new DescriptorRendererBuilder()
|
||||
.setNormalizedVisibilities(true)
|
||||
.setWithDefinedIn(false)
|
||||
.setShortNames(true)
|
||||
.setShowInternalKeyword(false)
|
||||
.setUnitReturnType(false).build();
|
||||
|
||||
DescriptorRenderer COMPACT = new DescriptorRendererBuilder()
|
||||
.setWithDefinedIn(false)
|
||||
.setModifiers(false).build();
|
||||
|
||||
@@ -21,7 +21,6 @@ import org.jetbrains.jet.lang.resolve.name.FqName;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.Set;
|
||||
|
||||
public class DescriptorRendererBuilder {
|
||||
private boolean shortNames = false;
|
||||
@@ -31,6 +30,9 @@ public class DescriptorRendererBuilder {
|
||||
private boolean debugMode = false;
|
||||
private boolean classWithPrimaryConstructor = false;
|
||||
private boolean verbose = false;
|
||||
private boolean unitReturnType = true;
|
||||
private boolean normalizedVisibilities = false;
|
||||
private boolean showInternalKeyword = true;
|
||||
@NotNull
|
||||
private DescriptorRenderer.ValueParametersHandler valueParametersHandler = new DescriptorRenderer.DefaultValueParameterHandler();
|
||||
@NotNull
|
||||
@@ -76,6 +78,21 @@ public class DescriptorRendererBuilder {
|
||||
return this;
|
||||
}
|
||||
|
||||
public DescriptorRendererBuilder setUnitReturnType(boolean unitReturnType) {
|
||||
this.unitReturnType = unitReturnType;
|
||||
return this;
|
||||
}
|
||||
|
||||
public DescriptorRendererBuilder setNormalizedVisibilities(boolean normalizedVisibilities) {
|
||||
this.normalizedVisibilities = normalizedVisibilities;
|
||||
return this;
|
||||
}
|
||||
|
||||
public DescriptorRendererBuilder setShowInternalKeyword(boolean showInternalKeyword) {
|
||||
this.showInternalKeyword = showInternalKeyword;
|
||||
return this;
|
||||
}
|
||||
|
||||
public DescriptorRendererBuilder setValueParametersHandler(@NotNull DescriptorRenderer.ValueParametersHandler valueParametersHandler) {
|
||||
this.valueParametersHandler = valueParametersHandler;
|
||||
return this;
|
||||
@@ -93,6 +110,8 @@ public class DescriptorRendererBuilder {
|
||||
|
||||
public DescriptorRenderer build() {
|
||||
return new DescriptorRendererImpl(shortNames, withDefinedIn, modifiers, startFromName, debugMode, classWithPrimaryConstructor,
|
||||
verbose, valueParametersHandler, textFormat, excludedAnnotationClasses);
|
||||
verbose, unitReturnType, normalizedVisibilities, showInternalKeyword, valueParametersHandler,
|
||||
textFormat, excludedAnnotationClasses);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -55,6 +55,9 @@ public class DescriptorRendererImpl implements DescriptorRenderer {
|
||||
private final boolean debugMode;
|
||||
private final boolean classWithPrimaryConstructor;
|
||||
private final boolean verbose;
|
||||
private final boolean unitReturnType;
|
||||
private final boolean normalizedVisibilities;
|
||||
private final boolean showInternalKeyword;
|
||||
@NotNull
|
||||
private final ValueParametersHandler handler;
|
||||
@NotNull
|
||||
@@ -70,6 +73,9 @@ public class DescriptorRendererImpl implements DescriptorRenderer {
|
||||
boolean debugMode,
|
||||
boolean classWithPrimaryConstructor,
|
||||
boolean verbose,
|
||||
boolean unitReturnType,
|
||||
boolean normalizedVisibilities,
|
||||
boolean showInternalKeyword,
|
||||
@NotNull ValueParametersHandler handler,
|
||||
@NotNull TextFormat textFormat,
|
||||
@NotNull Collection<FqName> excludedAnnotationClasses
|
||||
@@ -81,6 +87,9 @@ public class DescriptorRendererImpl implements DescriptorRenderer {
|
||||
this.handler = handler;
|
||||
this.classWithPrimaryConstructor = classWithPrimaryConstructor;
|
||||
this.verbose = verbose;
|
||||
this.unitReturnType = unitReturnType;
|
||||
this.normalizedVisibilities = normalizedVisibilities;
|
||||
this.showInternalKeyword = showInternalKeyword;
|
||||
this.debugMode = debugMode;
|
||||
this.textFormat = textFormat;
|
||||
this.excludedAnnotationClasses = Sets.newHashSet(excludedAnnotationClasses);
|
||||
@@ -307,6 +316,10 @@ public class DescriptorRendererImpl implements DescriptorRenderer {
|
||||
|
||||
private void renderVisibility(@NotNull Visibility visibility, @NotNull StringBuilder builder) {
|
||||
if (!modifiers) return;
|
||||
if (normalizedVisibilities) {
|
||||
visibility = visibility.normalize();
|
||||
}
|
||||
if (!showInternalKeyword && visibility == Visibilities.INTERNAL) return;
|
||||
builder.append(renderKeyword(visibility.toString())).append(" ");
|
||||
}
|
||||
|
||||
@@ -325,19 +338,25 @@ public class DescriptorRendererImpl implements DescriptorRenderer {
|
||||
|
||||
private void renderModalityForCallable(@NotNull CallableMemberDescriptor callable, @NotNull StringBuilder builder) {
|
||||
if (!DescriptorUtils.isTopLevelDeclaration(callable) || callable.getModality() != Modality.FINAL) {
|
||||
if (overridesSomething(callable) && callable.getModality() == Modality.OPEN) return;
|
||||
renderModality(callable.getModality(), builder);
|
||||
}
|
||||
}
|
||||
|
||||
private boolean overridesSomething(CallableMemberDescriptor callable) {
|
||||
return !callable.getOverriddenDescriptors().isEmpty();
|
||||
}
|
||||
|
||||
private void renderOverrideAndMemberKind(@NotNull CallableMemberDescriptor callableMember, @NotNull StringBuilder builder) {
|
||||
if (verbose) {
|
||||
if (!callableMember.getOverriddenDescriptors().isEmpty()) {
|
||||
builder.append("override /*").append(callableMember.getOverriddenDescriptors().size()).append("*/ ");
|
||||
}
|
||||
if (callableMember.getKind() != CallableMemberDescriptor.Kind.DECLARATION) {
|
||||
builder.append("/*").append(callableMember.getKind().name().toLowerCase()).append("*/ ");
|
||||
if (overridesSomething(callableMember)) {
|
||||
builder.append("override ");
|
||||
if (verbose) {
|
||||
builder.append("/*").append(callableMember.getOverriddenDescriptors().size()).append("*/ ");
|
||||
}
|
||||
}
|
||||
if (verbose && callableMember.getKind() != CallableMemberDescriptor.Kind.DECLARATION) {
|
||||
builder.append("/*").append(callableMember.getKind().name().toLowerCase()).append("*/ ");
|
||||
}
|
||||
}
|
||||
|
||||
@NotNull
|
||||
@@ -443,7 +462,9 @@ public class DescriptorRendererImpl implements DescriptorRenderer {
|
||||
renderName(function, builder);
|
||||
renderValueParameters(function, builder);
|
||||
JetType returnType = function.getReturnType();
|
||||
builder.append(" : ").append(returnType == null ? "[NULL]" : escape(renderType(returnType)));
|
||||
if (unitReturnType || !KotlinBuiltIns.getInstance().isUnit(returnType)) {
|
||||
builder.append(": ").append(returnType == null ? "[NULL]" : escape(renderType(returnType)));
|
||||
}
|
||||
renderWhereSuffix(function.getTypeParameters(), builder);
|
||||
}
|
||||
|
||||
@@ -531,7 +552,7 @@ public class DescriptorRendererImpl implements DescriptorRenderer {
|
||||
}
|
||||
|
||||
renderName(variable, builder);
|
||||
builder.append(" : ").append(escape(renderType(typeToRender)));
|
||||
builder.append(": ").append(escape(renderType(typeToRender)));
|
||||
|
||||
if (verbose && varargElementType != null) {
|
||||
builder.append(" /*").append(escape(renderType(realType))).append("*/");
|
||||
@@ -555,7 +576,7 @@ public class DescriptorRendererImpl implements DescriptorRenderer {
|
||||
builder.append(escape(renderType(receiver.getType()))).append(".");
|
||||
}
|
||||
renderName(property, builder);
|
||||
builder.append(" : ").append(escape(renderType(property.getType())));
|
||||
builder.append(": ").append(escape(renderType(property.getType())));
|
||||
|
||||
renderWhereSuffix(property.getTypeParameters(), builder);
|
||||
}
|
||||
@@ -709,4 +730,4 @@ public class DescriptorRendererImpl implements DescriptorRenderer {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user