render type correctly in html for TYPE_INFERENCE_UPPER_BOUND_VIOLATED error

This commit is contained in:
Svetlana Isakova
2013-01-14 14:35:26 +04:00
parent dfc45cc21e
commit b2823c5966
6 changed files with 68 additions and 9 deletions
@@ -277,15 +277,18 @@ public class Renderers {
.table(newTable().
descriptor(inferenceErrorData.descriptor));
JetType type = ConstraintsUtil.getValue(inferenceErrorData.constraintSystem.getTypeConstraints(typeParameterDescriptor));
JetType inferredValueForTypeParameter = ConstraintsUtil.getValue(inferenceErrorData.constraintSystem.getTypeConstraints(typeParameterDescriptor));
assert inferredValueForTypeParameter != null;
JetType upperBound = typeParameterDescriptor.getUpperBoundsAsType();
JetType substitute = inferenceErrorData.constraintSystem.getResultingSubstitutor().substitute(upperBound, Variance.INVARIANT);
JetType upperBoundWithSubstitutedInferredTypes = inferenceErrorData.constraintSystem.getResultingSubstitutor().substitute(upperBound, Variance.INVARIANT);
assert upperBoundWithSubstitutedInferredTypes != null;
Renderer<JetType> typeRenderer = result.getTypeRenderer();
result.text(newText()
.normal(" is not satisfied: inferred type ")
.error(type)
.error(typeRenderer.render(inferredValueForTypeParameter))
.normal(" is not a subtype of ")
.strong(substitute));
.strong(typeRenderer.render(upperBoundWithSubstitutedInferredTypes)));
return result;
}
@@ -152,6 +152,11 @@ public class TabledDescriptorRenderer {
return result.toString();
}
@NotNull
public Renderer<JetType> getTypeRenderer() {
return Renderers.RENDER_TYPE;
}
protected void renderText(TextRenderer textRenderer, StringBuilder result) {
for (TextElement element : textRenderer.elements) {
result.append(element.text);
@@ -179,7 +184,7 @@ public class TabledDescriptorRenderer {
boolean hasReceiver = receiverType != null;
if (hasReceiver) {
result.append("receiver: ");
result.append(Renderers.RENDER_TYPE.render(receiverType));
result.append(getTypeRenderer().render(receiverType));
result.append(" arguments: ");
}
if (argumentTypes.isEmpty()) {
@@ -190,7 +195,7 @@ public class TabledDescriptorRenderer {
result.append("(");
for (Iterator<JetType> iterator = argumentTypes.iterator(); iterator.hasNext(); ) {
JetType argumentType = iterator.next();
String renderedArgument = Renderers.RENDER_TYPE.render(argumentType);
String renderedArgument = getTypeRenderer().render(argumentType);
result.append(renderedArgument);
if (iterator.hasNext()) {