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
@@ -21,6 +21,7 @@ import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.lang.descriptors.FunctionDescriptor;
import org.jetbrains.jet.lang.descriptors.ValueParameterDescriptor;
import org.jetbrains.jet.lang.diagnostics.rendering.Renderer;
import org.jetbrains.jet.lang.diagnostics.rendering.TabledDescriptorRenderer;
import org.jetbrains.jet.lang.diagnostics.rendering.TabledDescriptorRenderer.TableRenderer.DescriptorRow;
import org.jetbrains.jet.lang.diagnostics.rendering.TabledDescriptorRenderer.TableRenderer.FunctionArgumentsRow;
@@ -38,6 +39,13 @@ import static org.jetbrains.jet.plugin.highlighter.IdeRenderers.strong;
public class HtmlTabledDescriptorRenderer extends TabledDescriptorRenderer {
@NotNull
@Override
public Renderer<JetType> getTypeRenderer() {
return IdeRenderers.HTML_RENDER_TYPE;
}
@Override
protected void renderText(TextRenderer textRenderer, StringBuilder result) {
for (TextRenderer.TextElement element : textRenderer.elements) {
@@ -107,7 +115,7 @@ public class HtmlTabledDescriptorRenderer extends TabledDescriptorRenderer {
result.append("</table>");
}
private static void renderFunctionArguments(
private void renderFunctionArguments(
@Nullable JetType receiverType,
@NotNull List<JetType> argumentTypes,
Predicate<ConstraintPosition> isErrorPosition,
@@ -121,7 +129,7 @@ public class HtmlTabledDescriptorRenderer extends TabledDescriptorRenderer {
if (isErrorPosition.apply(ConstraintPosition.RECEIVER_POSITION)) {
error = true;
}
receiver = "receiver: " + strong(IdeRenderers.HTML_RENDER_TYPE.render(receiverType), error);
receiver = "receiver: " + strong(getTypeRenderer().render(receiverType), error);
}
td(result, receiver);
td(result, hasReceiver ? "arguments: " : "");
@@ -138,7 +146,7 @@ public class HtmlTabledDescriptorRenderer extends TabledDescriptorRenderer {
if (isErrorPosition.apply(ConstraintPosition.getValueParameterPosition(i))) {
error = true;
}
String renderedArgument = IdeRenderers.HTML_RENDER_TYPE.render(argumentType);
String renderedArgument = getTypeRenderer().render(argumentType);
tdRight(result, strong(renderedArgument, error) + (iterator.hasNext() ? strong(",") : ""));
i++;
@@ -0,0 +1,7 @@
package i
fun foo<R, T: List<R>>(r: R, list: T) {}
fun test1(i: Int, collection: Collection<Int>) {
foo(i, collection)
}
@@ -0,0 +1,32 @@
<!-- upperBoundViolated1 -->
<html>
Type parameter bound for <b>
T</b>
in <table>
<tr>
<td width="10%">
</td>
<td align="right" colspan="2" style="white-space:nowrap;font-weight:bold;">
<b>
fun</b>
&lt;R, T : jet.List&lt;R&gt;>
foo</td>
<td style="white-space:nowrap;font-weight:bold;">
(</td>
<td align="right" style="white-space:nowrap;font-weight:bold;">
r : R,</td>
<td align="right" style="white-space:nowrap;font-weight:bold;">
list : T</td>
<td style="white-space:nowrap;font-weight:bold;">
)</td>
<td style="white-space:nowrap;font-weight:bold;">
: Unit</td>
</tr>
</table>
is not satisfied: inferred type <font color=red>
<b>
jet.Collection&lt;jet.Int&gt;</b>
</font>
is not a subtype of <b>
jet.List&lt;jet.Int&gt;</b>
</html>
@@ -102,4 +102,8 @@ public class DiagnosticMessageTest extends JetLiteFixture {
public void testInaccessibleOuterClassExpression() throws Exception {
doTest("inaccessibleOuterClassExpression", 1, Errors.INACCESSIBLE_OUTER_CLASS_EXPRESSION);
}
public void testUpperBoundViolated() throws Exception {
doTest("upperBoundViolated", 1, Errors.TYPE_INFERENCE_UPPER_BOUND_VIOLATED);
}
}