Treat anonymous objects as classes (ClassKind.CLASS)
They're not objects per se, i.e. they're not singletons
This commit is contained in:
@@ -19,12 +19,13 @@ package org.jetbrains.k2js.translate.context;
|
||||
import com.google.dart.compiler.backend.js.ast.*;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.jet.lang.descriptors.ClassDescriptor;
|
||||
import org.jetbrains.jet.lang.descriptors.ClassKind;
|
||||
import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor;
|
||||
import org.jetbrains.jet.lang.descriptors.NamespaceDescriptor;
|
||||
import org.jetbrains.jet.lang.resolve.DescriptorUtils;
|
||||
import org.jetbrains.jet.plugin.JetLanguage;
|
||||
|
||||
import java.util.List;
|
||||
import static org.jetbrains.jet.lang.descriptors.ClassKind.TRAIT;
|
||||
|
||||
/**
|
||||
* Encapuslates different types of constants and naming conventions.
|
||||
@@ -267,19 +268,17 @@ public final class Namer {
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public JsInvocation classCreateInvocation(@NotNull ClassDescriptor descriptor, @NotNull List<JsExpression> arguments) {
|
||||
switch (descriptor.getKind()) {
|
||||
case TRAIT:
|
||||
return new JsInvocation(traitCreationMethodReference(), arguments);
|
||||
|
||||
case OBJECT:
|
||||
case CLASS_OBJECT:
|
||||
case ENUM_ENTRY:
|
||||
return new JsInvocation(objectCreationMethodReference(), arguments);
|
||||
|
||||
default:
|
||||
return new JsInvocation(classCreationMethodReference(), arguments);
|
||||
public JsExpression classCreateInvocation(@NotNull ClassDescriptor descriptor) {
|
||||
ClassKind kind = descriptor.getKind();
|
||||
if (kind == TRAIT) {
|
||||
return traitCreationMethodReference();
|
||||
}
|
||||
|
||||
if (kind.isSingleton() || DescriptorUtils.isAnonymousObject(descriptor)) {
|
||||
return objectCreationMethodReference();
|
||||
}
|
||||
|
||||
return classCreationMethodReference();
|
||||
}
|
||||
|
||||
@NotNull
|
||||
|
||||
@@ -37,8 +37,7 @@ import org.jetbrains.k2js.translate.utils.JsAstUtils;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
import static org.jetbrains.jet.lang.resolve.DescriptorUtils.getClassDescriptorForType;
|
||||
import static org.jetbrains.jet.lang.resolve.DescriptorUtils.getClassDescriptorForTypeConstructor;
|
||||
import static org.jetbrains.jet.lang.resolve.DescriptorUtils.*;
|
||||
import static org.jetbrains.jet.lang.types.TypeUtils.topologicallySortSuperclassesAndRecordAllInstances;
|
||||
import static org.jetbrains.k2js.translate.expression.LiteralFunctionTranslator.createPlace;
|
||||
import static org.jetbrains.k2js.translate.initializer.InitializerUtils.createClassObjectInitializer;
|
||||
@@ -121,7 +120,7 @@ public final class ClassTranslator extends AbstractTranslator {
|
||||
|
||||
@NotNull
|
||||
public JsInvocation translate(@NotNull TranslationContext declarationContext) {
|
||||
return context().namer().classCreateInvocation(descriptor, getClassCreateInvocationArguments(declarationContext));
|
||||
return new JsInvocation(context().namer().classCreateInvocation(descriptor), getClassCreateInvocationArguments(declarationContext));
|
||||
}
|
||||
|
||||
private boolean isTrait() {
|
||||
@@ -138,7 +137,7 @@ public final class ClassTranslator extends AbstractTranslator {
|
||||
if (!isTopLevelDeclaration) {
|
||||
qualifiedReference = null;
|
||||
}
|
||||
else if (descriptor.getKind().isSingleton()) {
|
||||
else if (descriptor.getKind().isSingleton() || isAnonymousObject(descriptor)) {
|
||||
qualifiedReference = null;
|
||||
declarationContext.literalFunctionTranslator().setDefinitionPlace(
|
||||
new NotNullLazyValue<Trinity<List<JsPropertyInitializer>, LabelGenerator, JsExpression>>() {
|
||||
|
||||
@@ -19,7 +19,6 @@ package org.jetbrains.k2js.translate.utils;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.jet.lang.descriptors.ClassDescriptor;
|
||||
import org.jetbrains.jet.lang.descriptors.ClassKind;
|
||||
import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor;
|
||||
import org.jetbrains.jet.lang.descriptors.annotations.AnnotationDescriptor;
|
||||
import org.jetbrains.jet.lang.resolve.DescriptorUtils;
|
||||
@@ -29,8 +28,6 @@ import static org.jetbrains.k2js.translate.utils.JsDescriptorUtils.getContaining
|
||||
|
||||
public final class AnnotationsUtils {
|
||||
|
||||
private static final String ENUMERABLE = "js.enumerable";
|
||||
|
||||
private AnnotationsUtils() {
|
||||
}
|
||||
|
||||
@@ -108,16 +105,6 @@ public final class AnnotationsUtils {
|
||||
return hasAnnotationOrInsideAnnotatedClass(descriptor, PredefinedAnnotation.NATIVE);
|
||||
}
|
||||
|
||||
public static boolean isEnumerable(@NotNull DeclarationDescriptor descriptor) {
|
||||
if (getAnnotationByName(descriptor, ENUMERABLE) != null) {
|
||||
return true;
|
||||
}
|
||||
ClassDescriptor containingClass = getContainingClass(descriptor);
|
||||
return containingClass != null &&
|
||||
((containingClass.getKind().equals(ClassKind.OBJECT) && containingClass.getName().isSpecial()) ||
|
||||
getAnnotationByName(containingClass, ENUMERABLE) != null);
|
||||
}
|
||||
|
||||
public static boolean isLibraryObject(@NotNull DeclarationDescriptor descriptor) {
|
||||
return hasAnnotationOrInsideAnnotatedClass(descriptor, PredefinedAnnotation.LIBRARY);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user