[PL][JS] Add test for handling external declarations
^KT-57378
This commit is contained in:
committed by
Space Team
parent
4afc5315ca
commit
b5ad5edc08
@@ -0,0 +1,25 @@
|
||||
function ExternalClassInheritedFromAbstractExternalClass() {}
|
||||
ExternalClassInheritedFromAbstractExternalClass.prototype = Object.create(AbstractExternalClass.prototype);
|
||||
ExternalClassInheritedFromAbstractExternalClass.prototype.abstractFunction = function() {
|
||||
return "ExternalClassInheritedFromAbstractExternalClass.abstractFunction";
|
||||
}
|
||||
ExternalClassInheritedFromAbstractExternalClass.prototype.removedAbstractFunction = function() {
|
||||
return "ExternalClassInheritedFromAbstractExternalClass.removedAbstractFunction";
|
||||
}
|
||||
|
||||
function OpenExternalClass() {}
|
||||
OpenExternalClass.prototype.function = function() {
|
||||
return "OpenExternalClass.function"
|
||||
}
|
||||
|
||||
function ExternalInterfaceInheritedFromOpenExternalClass() {}
|
||||
ExternalInterfaceInheritedFromOpenExternalClass.prototype = Object.create(OpenExternalClass.prototype);
|
||||
ExternalInterfaceInheritedFromOpenExternalClass.prototype.abstractFunction = function() {
|
||||
throw new Error("Calling abstract function ExternalInterfaceInheritedFromOpenExternalClass.abstractFunction");
|
||||
}
|
||||
|
||||
function ExternalClassInheritedFromExternalInterfaceInheritedFromOpenExternalClass() {}
|
||||
ExternalClassInheritedFromExternalInterfaceInheritedFromOpenExternalClass.prototype = Object.create(ExternalInterfaceInheritedFromOpenExternalClass.prototype);
|
||||
ExternalClassInheritedFromExternalInterfaceInheritedFromOpenExternalClass.prototype.abstractFunction = function() {
|
||||
return "ExternalClassInheritedFromExternalInterfaceInheritedFromOpenExternalClass.abstractFunction"
|
||||
}
|
||||
@@ -0,0 +1,38 @@
|
||||
@Suppress("ABSTRACT_CLASS_MEMBER_NOT_IMPLEMENTED")
|
||||
external class ExternalClassInheritedFromAbstractExternalClass : AbstractExternalClass {
|
||||
// override fun abstractFunction(): String
|
||||
override fun removedAbstractFunction(): String
|
||||
}
|
||||
|
||||
fun ExternalClassInheritedFromAbstractExternalClass.callRemovedFunction() = removedFunction()
|
||||
|
||||
class RegularClassInheritedFromAbstractExternalClass : AbstractExternalClass() {
|
||||
override fun abstractFunction() = "RegularClassInheritedFromAbstractExternalClass.abstractFunction"
|
||||
override fun removedAbstractFunction() = "RegularClassInheritedFromAbstractExternalClass.removedAbstractFunction"
|
||||
}
|
||||
|
||||
fun RegularClassInheritedFromAbstractExternalClass.callRemovedFunction() = removedFunction()
|
||||
|
||||
open external class OpenExternalClass {
|
||||
fun function(): String
|
||||
}
|
||||
|
||||
@Suppress("INTERFACE_WITH_SUPERCLASS")
|
||||
external interface ExternalInterfaceInheritedFromOpenExternalClass : OpenExternalClass {
|
||||
fun abstractFunction(): String
|
||||
}
|
||||
|
||||
external class ExternalClassInheritedFromExternalInterfaceInheritedFromOpenExternalClass : ExternalInterfaceInheritedFromOpenExternalClass {
|
||||
override fun abstractFunction(): String
|
||||
}
|
||||
|
||||
class RegularClassInheritedFromExternalInterfaceInheritedFromOpenExternalClass :
|
||||
ExternalInterfaceInheritedFromOpenExternalClass,
|
||||
/* Note: Have to explicitly inherit from 'OpenExternalClass' becase otherwise JS codegen sees that
|
||||
* class 'RegularClassInheritedFromExternalInterfaceInheritedFromOpenExternalClass' is inherited only from
|
||||
* interface 'ExternalInterfaceInheritedFromOpenExternalClass' and does not figure out that a bridge has to be
|
||||
* generated for function 'function' inherited from 'OpenExternalClass'.
|
||||
*/
|
||||
OpenExternalClass() {
|
||||
override fun abstractFunction(): String = "RegularClassInheritedFromExternalInterfaceInheritedFromOpenExternalClass.abstractFunction"
|
||||
}
|
||||
@@ -0,0 +1,2 @@
|
||||
STEP 0:
|
||||
dependencies: stdlib, lib1
|
||||
Reference in New Issue
Block a user