Approximating flexible types in descriptor renderer
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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<DeclarationDescriptor> {
|
||||
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();
|
||||
|
||||
@@ -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<JetType, JetType> typeNormalizer = new Function1<JetType, JetType>() {
|
||||
@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<JetType, JetType> 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);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -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<JetType, JetType> typeNormalizer;
|
||||
private final boolean shortNames;
|
||||
private final boolean withDefinedIn;
|
||||
private final Set<DescriptorRenderer.Modifier> modifiers;
|
||||
@@ -98,7 +99,8 @@ public class DescriptorRendererImpl implements DescriptorRenderer {
|
||||
boolean withoutTypeParameters,
|
||||
boolean receiverAfterName,
|
||||
boolean renderClassObjectName,
|
||||
boolean withoutSuperTypes
|
||||
boolean withoutSuperTypes,
|
||||
Function1<JetType, JetType> 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 + ")?";
|
||||
|
||||
Reference in New Issue
Block a user