Fix override conflicts with different return types

This commit is contained in:
Pavel Punegov
2018-02-08 21:43:22 +03:00
committed by Pavel Punegov
parent f2e3c91f79
commit 066bff2004
3 changed files with 34 additions and 1 deletions
@@ -160,7 +160,7 @@ private val FunctionDescriptor.signature: String
when {
this.typeParameters.isNotEmpty() -> "Generic"
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 -> ""
}
+4
View File
@@ -907,6 +907,10 @@ task bridges_special(type: RunKonanTest) {
source = "codegen/bridges/special.kt"
}
task returnTypeSignature(type: RunKonanTest) {
source = "codegen/bridges/returnTypeSignature.kt"
}
task classDelegation_method(type: RunKonanTest) {
goldValue = "OKOK\n"
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())
}