Support bridges in interfaces. Fix for KT-12416: Missed bridges in js backend

#KT-12416 Fixed
This commit is contained in:
Mikhael Bogdanov
2016-05-19 15:55:18 +03:00
parent c778af518b
commit bb59638039
12 changed files with 235 additions and 22 deletions
@@ -77,6 +77,8 @@ class ClassTranslator private constructor(
private fun isTrait(): Boolean = descriptor.kind == ClassKind.INTERFACE
private fun isAnnotation(): Boolean = descriptor.kind == ClassKind.ANNOTATION_CLASS
private fun generateClassCreateInvocationArguments() {
val properties = SmartList<JsPropertyInitializer>()
val staticProperties = SmartList<JsPropertyInitializer>()
@@ -369,7 +371,7 @@ class ClassTranslator private constructor(
}
private fun generatedBridgeMethods(properties: MutableList<JsPropertyInitializer>) {
if (isTrait()) return
if (isAnnotation()) return
generateBridgesToTraitImpl(properties)
@@ -387,7 +389,10 @@ class ClassTranslator private constructor(
private fun generateOtherBridges(properties: MutableList<JsPropertyInitializer>) {
for (memberDescriptor in descriptor.defaultType.memberScope.getContributedDescriptors()) {
if (memberDescriptor is FunctionDescriptor) {
val bridgesToGenerate = generateBridgesForFunctionDescriptor(memberDescriptor, identity())
val bridgesToGenerate = generateBridgesForFunctionDescriptor(memberDescriptor, identity()) {
//There is no DefaultImpls in js backend so if method non-abstract it should be recognized as non-abstract on bridges calculation
false
}
for (bridge in bridgesToGenerate) {
generateBridge(bridge, properties)