JS backend: remove wrong usages program().getStringLiteral(). Use context().getNameForDescriptor()

This commit is contained in:
Erokhin Stanislav
2013-09-28 11:51:58 +04:00
parent 71cfa86f19
commit 8e940244af
7 changed files with 17 additions and 44 deletions
@@ -20,11 +20,9 @@ import com.google.dart.compiler.backend.js.ast.*;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.jet.lang.descriptors.ClassDescriptor; import org.jetbrains.jet.lang.descriptors.ClassDescriptor;
import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor; import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor;
import org.jetbrains.jet.lang.descriptors.Named;
import org.jetbrains.jet.lang.descriptors.NamespaceDescriptor; import org.jetbrains.jet.lang.descriptors.NamespaceDescriptor;
import org.jetbrains.jet.lang.resolve.DescriptorUtils; import org.jetbrains.jet.lang.resolve.DescriptorUtils;
import org.jetbrains.jet.plugin.JetLanguage; import org.jetbrains.jet.plugin.JetLanguage;
import org.jetbrains.jet.lang.resolve.name.Name;
/** /**
* Encapuslates different types of constants and naming conventions. * Encapuslates different types of constants and naming conventions.
@@ -56,14 +54,6 @@ public final class Namer {
private static final String DELEGATE_POSTFIX = "$delegate"; private static final String DELEGATE_POSTFIX = "$delegate";
private static final String PROPERTY_METADATA = "PropertyMetadata"; private static final String PROPERTY_METADATA = "PropertyMetadata";
private static final Named CLASS_OBJECT_INITIALIZER_NAMED = new Named() {
@NotNull
@Override
public Name getName() {
return Name.identifier(CLASS_OBJECT_INITIALIZER);
}
};
@NotNull @NotNull
public static String getReceiverParameterName() { public static String getReceiverParameterName() {
return RECEIVER_PARAMETER_NAME; return RECEIVER_PARAMETER_NAME;
@@ -119,8 +109,8 @@ public final class Namer {
} }
@NotNull @NotNull
public static Named getNamedForClassObjectInitializer() { public static String getNameForClassObjectInitializer() {
return CLASS_OBJECT_INITIALIZER_NAMED; return CLASS_OBJECT_INITIALIZER;
} }
@NotNull @NotNull
@@ -22,7 +22,6 @@ import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.Nullable;
import org.jetbrains.jet.lang.descriptors.CallableDescriptor; import org.jetbrains.jet.lang.descriptors.CallableDescriptor;
import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor; import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor;
import org.jetbrains.jet.lang.descriptors.Named;
import org.jetbrains.jet.lang.psi.JetExpression; import org.jetbrains.jet.lang.psi.JetExpression;
import org.jetbrains.jet.lang.resolve.BindingContext; import org.jetbrains.jet.lang.resolve.BindingContext;
import org.jetbrains.k2js.translate.declaration.ClassDeclarationTranslator; import org.jetbrains.k2js.translate.declaration.ClassDeclarationTranslator;
@@ -177,11 +176,6 @@ public class TranslationContext {
return staticContext.declarePropertyOrPropertyAccessorName(descriptor, name, fresh); return staticContext.declarePropertyOrPropertyAccessorName(descriptor, name, fresh);
} }
@NotNull
public JsStringLiteral nameToLiteral(@NotNull Named named) {
return program().getStringLiteral(named.getName().asString());
}
@NotNull @NotNull
public JsNameRef getQualifiedReference(@NotNull DeclarationDescriptor descriptor) { public JsNameRef getQualifiedReference(@NotNull DeclarationDescriptor descriptor) {
return staticContext.getQualifiedReference(descriptor); return staticContext.getQualifiedReference(descriptor);
@@ -33,7 +33,6 @@ import org.jetbrains.jet.utils.DFS;
import org.jetbrains.k2js.translate.context.Namer; import org.jetbrains.k2js.translate.context.Namer;
import org.jetbrains.k2js.translate.context.TranslationContext; import org.jetbrains.k2js.translate.context.TranslationContext;
import org.jetbrains.k2js.translate.general.AbstractTranslator; import org.jetbrains.k2js.translate.general.AbstractTranslator;
import org.jetbrains.k2js.translate.initializer.InitializerUtils;
import java.util.Collection; import java.util.Collection;
import java.util.Iterator; import java.util.Iterator;
@@ -256,6 +255,6 @@ public final class ClassDeclarationTranslator extends AbstractTranslator {
} }
} }
return InitializerUtils.createPropertyInitializer(descriptor, value, context()); return new JsPropertyInitializer(context.getNameForDescriptor(descriptor).makeRef(), value);
} }
} }
@@ -31,7 +31,6 @@ import org.jetbrains.jet.lang.psi.JetParameter;
import org.jetbrains.jet.lang.types.JetType; import org.jetbrains.jet.lang.types.JetType;
import org.jetbrains.jet.lang.types.TypeConstructor; import org.jetbrains.jet.lang.types.TypeConstructor;
import org.jetbrains.k2js.translate.LabelGenerator; import org.jetbrains.k2js.translate.LabelGenerator;
import org.jetbrains.k2js.translate.context.Namer;
import org.jetbrains.k2js.translate.context.TranslationContext; import org.jetbrains.k2js.translate.context.TranslationContext;
import org.jetbrains.k2js.translate.general.AbstractTranslator; import org.jetbrains.k2js.translate.general.AbstractTranslator;
import org.jetbrains.k2js.translate.initializer.ClassInitializerTranslator; import org.jetbrains.k2js.translate.initializer.ClassInitializerTranslator;
@@ -42,7 +41,7 @@ import java.util.*;
import static org.jetbrains.jet.lang.resolve.DescriptorUtils.*; import static org.jetbrains.jet.lang.resolve.DescriptorUtils.*;
import static org.jetbrains.jet.lang.types.TypeUtils.topologicallySortSuperclassesAndRecordAllInstances; import static org.jetbrains.jet.lang.types.TypeUtils.topologicallySortSuperclassesAndRecordAllInstances;
import static org.jetbrains.k2js.translate.expression.LiteralFunctionTranslator.createPlace; import static org.jetbrains.k2js.translate.expression.LiteralFunctionTranslator.createPlace;
import static org.jetbrains.k2js.translate.initializer.InitializerUtils.createPropertyInitializer; import static org.jetbrains.k2js.translate.initializer.InitializerUtils.createClassObjectInitializer;
import static org.jetbrains.k2js.translate.utils.BindingUtils.getClassDescriptor; import static org.jetbrains.k2js.translate.utils.BindingUtils.getClassDescriptor;
import static org.jetbrains.k2js.translate.utils.BindingUtils.getPropertyDescriptorForConstructorParameter; import static org.jetbrains.k2js.translate.utils.BindingUtils.getPropertyDescriptorForConstructorParameter;
import static org.jetbrains.k2js.translate.utils.JsDescriptorUtils.getContainingClass; import static org.jetbrains.k2js.translate.utils.JsDescriptorUtils.getContainingClass;
@@ -213,7 +212,7 @@ public final class ClassTranslator extends AbstractTranslator {
invocation.getArguments().add(new JsObjectLiteral(enumEntryList, true)); invocation.getArguments().add(new JsObjectLiteral(enumEntryList, true));
JsFunction fun = simpleReturnFunction(declarationContext.getScopeForDescriptor(descriptor), invocation); JsFunction fun = simpleReturnFunction(declarationContext.getScopeForDescriptor(descriptor), invocation);
staticProperties.add(createPropertyInitializer(Namer.getNamedForClassObjectInitializer(), fun, declarationContext)); staticProperties.add(createClassObjectInitializer(fun, declarationContext));
} else { } else {
assert enumEntryList.isEmpty(): "Only enum class may have enum entry. Class kind is: " + descriptor.getKind(); assert enumEntryList.isEmpty(): "Only enum class may have enum entry. Class kind is: " + descriptor.getKind();
} }
@@ -21,11 +21,12 @@ import com.google.dart.compiler.backend.js.ast.JsFunction;
import com.google.dart.compiler.backend.js.ast.JsPropertyInitializer; import com.google.dart.compiler.backend.js.ast.JsPropertyInitializer;
import com.intellij.util.SmartList; import com.intellij.util.SmartList;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.jetbrains.jet.lang.descriptors.*; import org.jetbrains.jet.lang.descriptors.ClassDescriptor;
import org.jetbrains.jet.lang.descriptors.FunctionDescriptor;
import org.jetbrains.jet.lang.descriptors.Modality;
import org.jetbrains.jet.lang.descriptors.PropertyDescriptor;
import org.jetbrains.jet.lang.psi.*; import org.jetbrains.jet.lang.psi.*;
import org.jetbrains.jet.lang.resolve.name.Name;
import org.jetbrains.jet.lang.types.JetType; import org.jetbrains.jet.lang.types.JetType;
import org.jetbrains.k2js.translate.context.Namer;
import org.jetbrains.k2js.translate.context.TranslationContext; import org.jetbrains.k2js.translate.context.TranslationContext;
import org.jetbrains.k2js.translate.general.Translation; import org.jetbrains.k2js.translate.general.Translation;
import org.jetbrains.k2js.translate.general.TranslatorVisitor; import org.jetbrains.k2js.translate.general.TranslatorVisitor;
@@ -36,7 +37,7 @@ import org.jetbrains.k2js.translate.utils.TranslationUtils;
import java.util.Collection; import java.util.Collection;
import java.util.List; import java.util.List;
import static org.jetbrains.k2js.translate.initializer.InitializerUtils.createPropertyInitializer; import static org.jetbrains.k2js.translate.initializer.InitializerUtils.createClassObjectInitializer;
import static org.jetbrains.k2js.translate.utils.BindingUtils.getClassDescriptor; import static org.jetbrains.k2js.translate.utils.BindingUtils.getClassDescriptor;
import static org.jetbrains.k2js.translate.utils.BindingUtils.getFunctionDescriptor; import static org.jetbrains.k2js.translate.utils.BindingUtils.getFunctionDescriptor;
@@ -69,9 +70,7 @@ public class DeclarationBodyVisitor extends TranslatorVisitor<Void> {
} }
@Override @Override
public Void visitEnumEntry( public Void visitEnumEntry(@NotNull JetEnumEntry enumEntry, TranslationContext data) {
@NotNull final JetEnumEntry enumEntry, TranslationContext data
) {
JsExpression jsEnumEntryCreation; JsExpression jsEnumEntryCreation;
ClassDescriptor descriptor = getClassDescriptor(data.bindingContext(), enumEntry); ClassDescriptor descriptor = getClassDescriptor(data.bindingContext(), enumEntry);
Collection<JetType> supertypes = descriptor.getTypeConstructor().getSupertypes(); Collection<JetType> supertypes = descriptor.getTypeConstructor().getSupertypes();
@@ -81,16 +80,7 @@ public class DeclarationBodyVisitor extends TranslatorVisitor<Void> {
assert supertypes.size() == 1 : "Simple Enum entry must have one supertype"; assert supertypes.size() == 1 : "Simple Enum entry must have one supertype";
jsEnumEntryCreation = new ClassInitializerTranslator(enumEntry, data).generateEnumEntryInstanceCreation(supertypes.iterator().next()); jsEnumEntryCreation = new ClassInitializerTranslator(enumEntry, data).generateEnumEntryInstanceCreation(supertypes.iterator().next());
} }
Named named = new Named() { enumEntryList.add(new JsPropertyInitializer(data.getNameForDescriptor(descriptor).makeRef(), jsEnumEntryCreation));
@NotNull
@Override
public Name getName() {
String name = enumEntry.getName();
assert name != null : "Enum entry name must be not null";
return Name.identifier(name);
}
};
enumEntryList.add(new JsPropertyInitializer(data.nameToLiteral(named), jsEnumEntryCreation));
return null; return null;
} }
@@ -104,7 +94,7 @@ public class DeclarationBodyVisitor extends TranslatorVisitor<Void> {
JsExpression value = ClassTranslator.generateClassCreation(declaration, descriptor, context); JsExpression value = ClassTranslator.generateClassCreation(declaration, descriptor, context);
JsFunction fun = TranslationUtils.simpleReturnFunction(context.getScopeForDescriptor(descriptor), value); JsFunction fun = TranslationUtils.simpleReturnFunction(context.getScopeForDescriptor(descriptor), value);
staticResult.add(createPropertyInitializer(Namer.getNamedForClassObjectInitializer(), fun, context)); staticResult.add(createClassObjectInitializer(fun, context));
return null; return null;
} }
@@ -74,7 +74,7 @@ public final class PropertyTranslator extends AbstractTranslator {
List<JsPropertyInitializer> to; List<JsPropertyInitializer> to;
if (!JsDescriptorUtils.isExtension(descriptor)) { if (!JsDescriptorUtils.isExtension(descriptor)) {
to = new SmartList<JsPropertyInitializer>(); to = new SmartList<JsPropertyInitializer>();
result.add(new JsPropertyInitializer(context().nameToLiteral(descriptor), new JsObjectLiteral(to, true))); result.add(new JsPropertyInitializer(context().getNameForDescriptor(descriptor).makeRef(), new JsObjectLiteral(to, true)));
} }
else { else {
to = result; to = result;
@@ -69,7 +69,8 @@ public final class InitializerUtils {
initializers.add(expression.makeStmt()); initializers.add(expression.makeStmt());
} }
public static JsPropertyInitializer createPropertyInitializer(Named named, JsExpression value, TranslationContext context) { public static JsPropertyInitializer createClassObjectInitializer(JsExpression value, TranslationContext context) {
return new JsPropertyInitializer(context.nameToLiteral(named), value); JsStringLiteral classObjectInitStr = context.program().getStringLiteral(Namer.getNameForClassObjectInitializer());
return new JsPropertyInitializer(classObjectInitStr, value);
} }
} }