Fix for KT-2789: NoSuchMethodError when calling trait function with default arguments that returns generic type, KT-9428 Abstract method with one parameter and one default parameter produces NoSuchMethodError, KT-9924 NoSuchMethod when replacing generic with specific type
#KT-2789 Fixed #KT-9428 Fixed #KT-9924 Fixed
This commit is contained in:
@@ -0,0 +1,23 @@
|
||||
interface FooTrait<T> {
|
||||
fun make(size: Int = 16) : T
|
||||
|
||||
fun makeFromTraitImpl() : T = make()
|
||||
}
|
||||
|
||||
class FooClass : FooTrait<String> {
|
||||
override fun make(size: Int): String {
|
||||
return "$size"
|
||||
}
|
||||
}
|
||||
|
||||
fun box(): String {
|
||||
val explicitParam = FooClass().make(16)
|
||||
val defaultRes = FooClass().make()
|
||||
val defaultTraitRes = FooClass().makeFromTraitImpl()
|
||||
if (explicitParam != defaultRes) return "fail 1: ${explicitParam} != ${defaultRes}"
|
||||
if (explicitParam != "16") return "fail 2: ${explicitParam}"
|
||||
|
||||
if (explicitParam != defaultTraitRes) return "fail 3: ${explicitParam} != ${defaultTraitRes}"
|
||||
|
||||
return "OK"
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
open class Player(val name: String)
|
||||
open class SlashPlayer(name: String) : Player(name)
|
||||
|
||||
public abstract class Game<T : Player> {
|
||||
abstract fun getPlayer(name: String, create: Boolean = true): T?
|
||||
}
|
||||
|
||||
class SimpleGame : Game<SlashPlayer>() {
|
||||
override fun getPlayer(name: String, create: Boolean): SlashPlayer? {
|
||||
return if (create) {
|
||||
SlashPlayer(name)
|
||||
}
|
||||
else null
|
||||
}
|
||||
}
|
||||
|
||||
fun box(): String {
|
||||
val player1 = SimpleGame().getPlayer("fail", false)
|
||||
if (player1 != null) return "fail 1"
|
||||
|
||||
val player2 = SimpleGame().getPlayer("OK")
|
||||
return player2!!.name
|
||||
}
|
||||
@@ -0,0 +1,13 @@
|
||||
abstract class A<T> {
|
||||
abstract fun test(a: T, b:Boolean = false) : String
|
||||
}
|
||||
|
||||
class B : A<String>() {
|
||||
override fun test(a: String, b: Boolean): String {
|
||||
return a
|
||||
}
|
||||
}
|
||||
|
||||
fun box(): String {
|
||||
return B().test("OK")
|
||||
}
|
||||
Reference in New Issue
Block a user