Report errors for type parameters of properties that are not used in receiver types

This commit is contained in:
Pavel V. Talanov
2015-10-12 14:18:45 +03:00
parent b5537e7d42
commit be15399313
6 changed files with 101 additions and 0 deletions
@@ -0,0 +1,33 @@
// !DIAGNOSTICS: -REDUNDANT_PROJECTION -CONFLICTING_PROJECTION
interface G
val <T> T.a: Int
get() = 3
val <T1, T2> Map<T1, T2>.b: String
get() = "asds"
val <<!TYPE_PARAMETER_OF_PROPERTY_NOT_USED_IN_RECEIVER!>T : G<!>> G.c: Int get() = 5
val <<!TYPE_PARAMETER_OF_PROPERTY_NOT_USED_IN_RECEIVER!>T1<!>, T2, T3> List<Map<T2, T3>>.d: Int get() = 6
val <<!TYPE_PARAMETER_OF_PROPERTY_NOT_USED_IN_RECEIVER!>T: Any<!>> G.e: T?
get() = null
val <T> List<Map<Int, Map<String, T>>>.f: Int get() = 7
val <T> List<Map<Int, Map<String, out T>>>.g: Int get() = 7
val <T> List<Map<Int, Map<String, in T>>>.h: Int get() = 7
val <T> List<Map<T, Map<T, T>>>.i: Int get() = 7
var <<!TYPE_PARAMETER_OF_PROPERTY_NOT_USED_IN_RECEIVER!>T1<!>, <!TYPE_PARAMETER_OF_PROPERTY_NOT_USED_IN_RECEIVER!>T2<!>, <!TYPE_PARAMETER_OF_PROPERTY_NOT_USED_IN_RECEIVER!>T3<!>, <!TYPE_PARAMETER_OF_PROPERTY_NOT_USED_IN_RECEIVER!>T4<!>> p = 1
class C<T1, T2> {
val <<!TYPE_PARAMETER_OF_PROPERTY_NOT_USED_IN_RECEIVER!>E<!>> T1.a: Int get() = 3
val <<!TYPE_PARAMETER_OF_PROPERTY_NOT_USED_IN_RECEIVER!>E<!>> T2.b: Int get() = 3
val <E> E.c: Int get() = 3
val <<!TYPE_PARAMETER_OF_PROPERTY_NOT_USED_IN_RECEIVER!>E<!>> Map<T1, T2>.d: Int get() = 3
val <E> Map<T1, E>.e: Int get() = 3
}
@@ -0,0 +1,30 @@
package
public var </*0*/ T1, /*1*/ T2, /*2*/ T3, /*3*/ T4> p: kotlin.Int
public val </*0*/ T> T.a: kotlin.Int
public val </*0*/ T1, /*1*/ T2> kotlin.Map<T1, T2>.b: kotlin.String
public val </*0*/ T : G> G.c: kotlin.Int
public val </*0*/ T1, /*1*/ T2, /*2*/ T3> kotlin.List<kotlin.Map<T2, T3>>.d: kotlin.Int
public val </*0*/ T : kotlin.Any> G.e: T?
public val </*0*/ T> kotlin.List<kotlin.Map<kotlin.Int, kotlin.Map<kotlin.String, T>>>.f: kotlin.Int
public val </*0*/ T> kotlin.List<kotlin.Map<kotlin.Int, kotlin.Map<kotlin.String, out T>>>.g: kotlin.Int
public val </*0*/ T> kotlin.List<kotlin.Map<kotlin.Int, kotlin.Map<kotlin.String, in T>>>.h: kotlin.Int
public val </*0*/ T> kotlin.List<kotlin.Map<T, kotlin.Map<T, T>>>.i: kotlin.Int
public final class C</*0*/ T1, /*1*/ T2> {
public constructor C</*0*/ T1, /*1*/ T2>()
public final val </*0*/ E> T1.a: kotlin.Int
public final val </*0*/ E> T2.b: kotlin.Int
public final val </*0*/ E> E.c: kotlin.Int
public final val </*0*/ E> kotlin.Map<T1, T2>.d: kotlin.Int
public final val </*0*/ E> kotlin.Map<T1, E>.e: kotlin.Int
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
public interface G {
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}