diff --git a/js/js.translator/src/org/jetbrains/k2js/translate/declaration/ClassTranslator.java b/js/js.translator/src/org/jetbrains/k2js/translate/declaration/ClassTranslator.java index 3d64c80696f..2b844c2c901 100644 --- a/js/js.translator/src/org/jetbrains/k2js/translate/declaration/ClassTranslator.java +++ b/js/js.translator/src/org/jetbrains/k2js/translate/declaration/ClassTranslator.java @@ -19,6 +19,7 @@ package org.jetbrains.k2js.translate.declaration; import com.google.dart.compiler.backend.js.ast.*; import com.intellij.util.SmartList; import org.jetbrains.annotations.NotNull; +import org.jetbrains.jet.backend.common.CodegenUtil; import org.jetbrains.jet.codegen.bridges.Bridge; import org.jetbrains.jet.codegen.bridges.BridgesPackage; import org.jetbrains.jet.lang.descriptors.*; @@ -147,6 +148,8 @@ public final class ClassTranslator extends AbstractTranslator { invocationArguments.add(function); } + generateTraitMethods(properties); + if (!DescriptorUtils.isTrait(descriptor)) { for (DeclarationDescriptor memberDescriptor : descriptor.getDefaultType().getMemberScope().getAllDescriptors()) { if (memberDescriptor instanceof FunctionDescriptor) { @@ -286,6 +289,16 @@ public final class ClassTranslator extends AbstractTranslator { properties.add(generateDelegateCall(fromDescriptor, toDescriptor, JsLiteral.THIS, context())); } + private void generateTraitMethods(@NotNull List properties) { + if (isTrait()) return; + + for(Map.Entry entry : CodegenUtil.getTraitMethods(descriptor).entrySet()) { + if (!areNamesEqual(entry.getKey(), entry.getValue())) { + properties.add(generateDelegateCall(entry.getValue(), entry.getKey(), JsLiteral.THIS, context())); + } + } + } + private boolean areNamesEqual(@NotNull FunctionDescriptor first, @NotNull FunctionDescriptor second) { JsName firstName = context().getNameForDescriptor(first); JsName secondName = context().getNameForDescriptor(second);