Humanize type mismatch diagnostic caused by type projections

#KT-10581 Fixed
This commit is contained in:
Denis Zharkov
2016-01-15 12:22:44 +03:00
parent 0c52960d7a
commit e9693e987f
60 changed files with 796 additions and 111 deletions
@@ -0,0 +1,6 @@
// !DIAGNOSTICS_NUMBER: 1
// !DIAGNOSTICS: MEMBER_PROJECTED_OUT
fun foo(x: MutableCollection<out CharSequence>) {
x.add("")
}
@@ -0,0 +1,2 @@
<!-- expectedNothingDueToProjections1 -->
Out-projected type 'kotlin.MutableCollection<out kotlin.CharSequence>' prohibits the use of 'public abstract fun add(element: E): kotlin.Boolean defined in kotlin.MutableCollection'
@@ -0,0 +1,6 @@
// !DIAGNOSTICS_NUMBER: 1
// !DIAGNOSTICS: TYPE_MISMATCH_DUE_TO_TYPE_PROJECTIONS
fun foo(x: MutableCollection<out CharSequence>, y: MutableCollection<CharSequence>) {
x.addAll(y)
}
@@ -0,0 +1,17 @@
<!-- typeMismatchDueToProjections1 -->
<html>
Type mismatch.
<table>
<tr>
<td>Required:</td>
<td>kotlin.Collection<`kotlin.Nothing></td>
</tr>
<tr>
<td>Found:</td>
<td>kotlin.MutableCollection<`kotlin.CharSequence></td>
</tr>
</table>
<br />
Projected type kotlin.MutableCollection<`out kotlin.CharSequence> restricts use of <br />
<b>public</b> <b>abstract</b> <b>fun</b> addAll(elements: kotlin.Collection<`E>): kotlin.Boolean <i>defined in</i> kotlin.MutableCollection
</html>
@@ -0,0 +1,11 @@
// !DIAGNOSTICS_NUMBER: 1
// !DIAGNOSTICS: TYPE_MISMATCH_DUE_TO_TYPE_PROJECTIONS
interface A<T>
interface B<E> {
fun foo(x: A<in E>)
}
fun foo(x: B<in CharSequence>, y: A<CharSequence>) {
x.foo(y)
}
@@ -0,0 +1,17 @@
<!-- typeMismatchDueToProjectionsIn1 -->
<html>
Type mismatch.
<table>
<tr>
<td>Required:</td>
<td>A<`kotlin.Any?></td>
</tr>
<tr>
<td>Found:</td>
<td>A<`kotlin.CharSequence></td>
</tr>
</table>
<br />
Projected type B<`in kotlin.CharSequence> restricts use of <br />
<b>public</b> <b>abstract</b> <b>fun</b> foo(x: A<`in E>): kotlin.Unit <i>defined in</i> B
</html>
@@ -0,0 +1,7 @@
// !DIAGNOSTICS_NUMBER: 1
// !DIAGNOSTICS: TYPE_MISMATCH_DUE_TO_TYPE_PROJECTIONS
// !MESSAGE_TYPE: TEXT
fun foo(x: MutableCollection<out CharSequence>, y: MutableCollection<CharSequence>) {
x.addAll(y)
}
@@ -0,0 +1,2 @@
<!-- typeMismatchDueToProjectionsTxt1 -->
Type mismatch: inferred type is kotlin.MutableCollection<kotlin.CharSequence> but kotlin.Collection<kotlin.Nothing> was expected. Projected type kotlin.MutableCollection<out kotlin.CharSequence> restricts use of public abstract fun addAll(elements: kotlin.Collection<E>): kotlin.Boolean defined in kotlin.MutableCollection