JS backend: add generateTraitMethods into ClassTranslator
This commit is contained in:
@@ -19,6 +19,7 @@ package org.jetbrains.k2js.translate.declaration;
|
|||||||
import com.google.dart.compiler.backend.js.ast.*;
|
import com.google.dart.compiler.backend.js.ast.*;
|
||||||
import com.intellij.util.SmartList;
|
import com.intellij.util.SmartList;
|
||||||
import org.jetbrains.annotations.NotNull;
|
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.Bridge;
|
||||||
import org.jetbrains.jet.codegen.bridges.BridgesPackage;
|
import org.jetbrains.jet.codegen.bridges.BridgesPackage;
|
||||||
import org.jetbrains.jet.lang.descriptors.*;
|
import org.jetbrains.jet.lang.descriptors.*;
|
||||||
@@ -147,6 +148,8 @@ public final class ClassTranslator extends AbstractTranslator {
|
|||||||
invocationArguments.add(function);
|
invocationArguments.add(function);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
generateTraitMethods(properties);
|
||||||
|
|
||||||
if (!DescriptorUtils.isTrait(descriptor)) {
|
if (!DescriptorUtils.isTrait(descriptor)) {
|
||||||
for (DeclarationDescriptor memberDescriptor : descriptor.getDefaultType().getMemberScope().getAllDescriptors()) {
|
for (DeclarationDescriptor memberDescriptor : descriptor.getDefaultType().getMemberScope().getAllDescriptors()) {
|
||||||
if (memberDescriptor instanceof FunctionDescriptor) {
|
if (memberDescriptor instanceof FunctionDescriptor) {
|
||||||
@@ -286,6 +289,16 @@ public final class ClassTranslator extends AbstractTranslator {
|
|||||||
properties.add(generateDelegateCall(fromDescriptor, toDescriptor, JsLiteral.THIS, context()));
|
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) {
|
private boolean areNamesEqual(@NotNull FunctionDescriptor first, @NotNull FunctionDescriptor second) {
|
||||||
JsName firstName = context().getNameForDescriptor(first);
|
JsName firstName = context().getNameForDescriptor(first);
|
||||||
JsName secondName = context().getNameForDescriptor(second);
|
JsName secondName = context().getNameForDescriptor(second);
|
||||||
|
|||||||
Reference in New Issue
Block a user