JS backend: add generateTraitMethods into ClassTranslator

This commit is contained in:
Michael Nedzelsky
2014-10-06 13:31:35 +04:00
parent 6d1b89bba3
commit 8cafea9f5a
@@ -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<JsPropertyInitializer> properties) {
if (isTrait()) return;
for(Map.Entry<FunctionDescriptor, FunctionDescriptor> 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);