Fix override conflicts with different return types
This commit is contained in:
committed by
Pavel Punegov
parent
f2e3c91f79
commit
066bff2004
+1
-1
@@ -160,7 +160,7 @@ private val FunctionDescriptor.signature: String
|
|||||||
when {
|
when {
|
||||||
this.typeParameters.isNotEmpty() -> "Generic"
|
this.typeParameters.isNotEmpty() -> "Generic"
|
||||||
returnType.let { it != null && it.isValueType() } -> "ValueType"
|
returnType.let { it != null && it.isValueType() } -> "ValueType"
|
||||||
returnType.let { it != null && !KotlinBuiltIns.isUnitOrNullableUnit(it) } -> "Reference"
|
returnType.let { it != null && !KotlinBuiltIns.isUnitOrNullableUnit(it) } -> typeToHashString(returnType!!)
|
||||||
else -> ""
|
else -> ""
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -907,6 +907,10 @@ task bridges_special(type: RunKonanTest) {
|
|||||||
source = "codegen/bridges/special.kt"
|
source = "codegen/bridges/special.kt"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
task returnTypeSignature(type: RunKonanTest) {
|
||||||
|
source = "codegen/bridges/returnTypeSignature.kt"
|
||||||
|
}
|
||||||
|
|
||||||
task classDelegation_method(type: RunKonanTest) {
|
task classDelegation_method(type: RunKonanTest) {
|
||||||
goldValue = "OKOK\n"
|
goldValue = "OKOK\n"
|
||||||
source = "codegen/classDelegation/method.kt"
|
source = "codegen/classDelegation/method.kt"
|
||||||
|
|||||||
@@ -0,0 +1,29 @@
|
|||||||
|
package codegen.bridges.signature
|
||||||
|
|
||||||
|
import kotlin.test.*
|
||||||
|
|
||||||
|
class A { }
|
||||||
|
|
||||||
|
class B { }
|
||||||
|
|
||||||
|
class C { }
|
||||||
|
|
||||||
|
interface Parser<in IN: Any, out OUT: Any> {
|
||||||
|
fun parse(source: IN): OUT
|
||||||
|
}
|
||||||
|
|
||||||
|
interface MultiParser<in IN: Any, out OUT: Any> {
|
||||||
|
fun parse(source: IN): Collection<OUT>
|
||||||
|
}
|
||||||
|
|
||||||
|
interface ExtendsInterface<T: Any>: Parser<A, T>, MultiParser<B, T> {
|
||||||
|
override fun parse(source: B): Collection<T> = ArrayList<T>()
|
||||||
|
}
|
||||||
|
|
||||||
|
abstract class AbstractClass(): ExtendsInterface<C> {
|
||||||
|
public override fun parse(source: A): C = C()
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test fun runTest() {
|
||||||
|
val array = object : AbstractClass() { }.parse(B())
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user