dc42b20ae3
The new inference uses inferred intersection types normally, unlike the old inference.
However, intersection types in public declarations are approximated to supertype, which
potentially may give a less presice type, then it would be with the OI.
For non-related T1, T2 the NI approximates {T1 & T2} to Any in public declarations,
and if the OI was inferring T1 instead of the intersection type, it may lead to
less precise declaration type and related errors.
The solution is to remember an alternative for an intersection type when present.
Before approximation the alternative replaces the intersection type.
^KT-36249 Fixed
71 lines
3.4 KiB
Plaintext
Vendored
71 lines
3.4 KiB
Plaintext
Vendored
package
|
|
|
|
public fun </*0*/ S : Base> intersect(/*0*/ vararg elements: S /*kotlin.Array<out S>*/): S
|
|
public fun </*0*/ S> intersectNoBound(/*0*/ vararg elements: S /*kotlin.Array<out S>*/): S
|
|
public fun some(/*0*/ a: One, /*1*/ b: Two, /*2*/ c: Three): Base
|
|
public fun test(/*0*/ arg: Base, /*1*/ arg2: Base): kotlin.Unit
|
|
|
|
public interface Base {
|
|
public open fun base(): kotlin.Unit
|
|
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 Base2 : Base3 {
|
|
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 Base3 {
|
|
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 object O1 : One {
|
|
private constructor O1()
|
|
public open override /*1*/ /*fake_override*/ fun base(): kotlin.Unit
|
|
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 object O2 : Two {
|
|
private constructor O2()
|
|
public open override /*1*/ /*fake_override*/ fun base(): kotlin.Unit
|
|
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 object O3 : Three {
|
|
private constructor O3()
|
|
public open override /*1*/ /*fake_override*/ fun base(): kotlin.Unit
|
|
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 One : Base, Base2 {
|
|
public open override /*1*/ /*fake_override*/ fun base(): kotlin.Unit
|
|
public open override /*2*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
|
public open override /*2*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
|
public open override /*2*/ /*fake_override*/ fun toString(): kotlin.String
|
|
}
|
|
|
|
public interface Three : Base, Base3 {
|
|
public open override /*1*/ /*fake_override*/ fun base(): kotlin.Unit
|
|
public open override /*2*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
|
public open override /*2*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
|
public open override /*2*/ /*fake_override*/ fun toString(): kotlin.String
|
|
}
|
|
|
|
public interface Two : Base, Base2 {
|
|
public open override /*1*/ /*fake_override*/ fun base(): kotlin.Unit
|
|
public open override /*2*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
|
public open override /*2*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
|
public open override /*2*/ /*fake_override*/ fun toString(): kotlin.String
|
|
}
|