JS backend: improve and move getQualifiedReference function from TranslationUtils to TranslationContext and StaticContext.
(cherry picked from commit fa3db43)
This commit is contained in:
@@ -126,11 +126,6 @@ public final class StaticContext {
|
||||
return ecmaVersion == EcmaVersion.v5;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public EcmaVersion getEcmaVersion() {
|
||||
return ecmaVersion;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public JsProgram getProgram() {
|
||||
return program;
|
||||
@@ -171,6 +166,28 @@ public final class StaticContext {
|
||||
return function;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public JsNameRef getQualifiedReference(@NotNull DeclarationDescriptor descriptor) {
|
||||
ClassDescriptor classDescriptor;
|
||||
if (descriptor instanceof ConstructorDescriptor) {
|
||||
classDescriptor = ((ConstructorDescriptor) descriptor).getContainingDeclaration();
|
||||
}
|
||||
else if (descriptor instanceof ClassDescriptor) {
|
||||
classDescriptor = (ClassDescriptor) descriptor;
|
||||
}
|
||||
else {
|
||||
classDescriptor = null;
|
||||
}
|
||||
|
||||
if (classDescriptor != null) {
|
||||
JsNameRef reference = classDeclarationTranslator.getQualifiedReference((classDescriptor));
|
||||
if (reference != null) {
|
||||
return reference;
|
||||
}
|
||||
}
|
||||
return new JsNameRef(getNameForDescriptor(descriptor), getQualifierForDescriptor(descriptor));
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public JsName getNameForDescriptor(@NotNull DeclarationDescriptor descriptor) {
|
||||
JsName name = names.get(descriptor.getOriginal());
|
||||
|
||||
@@ -181,6 +181,11 @@ public class TranslationContext {
|
||||
return program().getStringLiteral(named.getName().asString());
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public JsNameRef getQualifiedReference(@NotNull DeclarationDescriptor descriptor) {
|
||||
return staticContext.getQualifiedReference(descriptor);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public JsNameRef getQualifierForDescriptor(@NotNull DeclarationDescriptor descriptor) {
|
||||
return staticContext.getQualifierForDescriptor(descriptor);
|
||||
|
||||
@@ -50,7 +50,6 @@ 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.JsDescriptorUtils.getContainingClass;
|
||||
import static org.jetbrains.k2js.translate.utils.PsiUtils.getPrimaryConstructorParameters;
|
||||
import static org.jetbrains.k2js.translate.utils.TranslationUtils.getQualifiedReference;
|
||||
import static org.jetbrains.k2js.translate.utils.TranslationUtils.simpleReturnFunction;
|
||||
|
||||
/**
|
||||
@@ -164,7 +163,7 @@ public final class ClassTranslator extends AbstractTranslator {
|
||||
});
|
||||
}
|
||||
else {
|
||||
qualifiedReference = getQualifiedReference(declarationContext, descriptor);
|
||||
qualifiedReference = declarationContext.getQualifiedReference(descriptor);
|
||||
declarationContext.literalFunctionTranslator().setDefinitionPlace(
|
||||
new NotNullLazyValue<Trinity<List<JsPropertyInitializer>, LabelGenerator, JsExpression>>() {
|
||||
@Override
|
||||
@@ -305,7 +304,7 @@ public final class ClassTranslator extends AbstractTranslator {
|
||||
}
|
||||
|
||||
// from library
|
||||
return getQualifiedReference(context(), superClassDescriptor);
|
||||
return context().getQualifiedReference(superClassDescriptor);
|
||||
}
|
||||
|
||||
private void translatePropertiesAsConstructorParameters(@NotNull TranslationContext classDeclarationContext,
|
||||
|
||||
+1
-2
@@ -32,7 +32,6 @@ import org.jetbrains.k2js.translate.utils.JsAstUtils;
|
||||
import java.util.*;
|
||||
|
||||
import static com.google.dart.compiler.backend.js.ast.JsVars.JsVar;
|
||||
import static org.jetbrains.k2js.translate.utils.TranslationUtils.getQualifiedReference;
|
||||
|
||||
public final class NamespaceDeclarationTranslator extends AbstractTranslator {
|
||||
private final Iterable<JetFile> files;
|
||||
@@ -114,7 +113,7 @@ public final class NamespaceDeclarationTranslator extends AbstractTranslator {
|
||||
) {
|
||||
if (context.isEcma5()) {
|
||||
return Arrays.asList(initializer == null ? JsLiteral.NULL : initializer,
|
||||
new JsDocComment(JsAstUtils.LENDS_JS_DOC_TAG, getQualifiedReference(context, descriptor)),
|
||||
new JsDocComment(JsAstUtils.LENDS_JS_DOC_TAG, context.getQualifiedReference(descriptor)),
|
||||
members);
|
||||
}
|
||||
else {
|
||||
|
||||
+6
-4
@@ -43,7 +43,6 @@ import static org.jetbrains.k2js.translate.expression.LiteralFunctionTranslator.
|
||||
import static org.jetbrains.k2js.translate.initializer.InitializerUtils.generateInitializerForDelegate;
|
||||
import static org.jetbrains.k2js.translate.initializer.InitializerUtils.generateInitializerForProperty;
|
||||
import static org.jetbrains.k2js.translate.utils.BindingUtils.getPropertyDescriptor;
|
||||
import static org.jetbrains.k2js.translate.utils.TranslationUtils.getQualifiedReference;
|
||||
|
||||
final class NamespaceTranslator extends AbstractTranslator {
|
||||
@NotNull
|
||||
@@ -73,7 +72,7 @@ final class NamespaceTranslator extends AbstractTranslator {
|
||||
defineInvocation = createDefinitionPlace(null, descriptorToDefineInvocation);
|
||||
}
|
||||
|
||||
return createPlace(getListFromPlace(defineInvocation), getQualifiedReference(context(), descriptor));
|
||||
return createPlace(getListFromPlace(defineInvocation), context().getQualifiedReference(descriptor));
|
||||
}
|
||||
};
|
||||
}
|
||||
@@ -106,7 +105,7 @@ final class NamespaceTranslator extends AbstractTranslator {
|
||||
initializer = visitor.initializer;
|
||||
if (!context().isEcma5()) {
|
||||
initializers.add(new JsInvocation(new JsNameRef("call", initializer),
|
||||
getQualifiedReference(context(), descriptor)).makeStmt());
|
||||
context().getQualifiedReference(descriptor)).makeStmt());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -178,7 +177,10 @@ final class NamespaceTranslator extends AbstractTranslator {
|
||||
|
||||
@Override
|
||||
public Void visitClass(@NotNull JetClass declaration, @NotNull TranslationContext context) {
|
||||
result.add(context.classDeclarationTranslator().translate(declaration, context));
|
||||
JsPropertyInitializer entry = context.classDeclarationTranslator().translate(declaration, context);
|
||||
if (entry != null) {
|
||||
result.add(entry);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
+9
-11
@@ -23,13 +23,16 @@ import com.google.dart.compiler.backend.js.ast.JsNameRef;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.jet.lang.descriptors.ClassDescriptor;
|
||||
import org.jetbrains.jet.lang.psi.*;
|
||||
import org.jetbrains.jet.lang.psi.JetExpression;
|
||||
import org.jetbrains.jet.lang.psi.JetIsExpression;
|
||||
import org.jetbrains.jet.lang.psi.JetTypeReference;
|
||||
import org.jetbrains.k2js.translate.context.TranslationContext;
|
||||
import org.jetbrains.k2js.translate.general.AbstractTranslator;
|
||||
import org.jetbrains.k2js.translate.general.Translation;
|
||||
import org.jetbrains.k2js.translate.utils.BindingUtils;
|
||||
import org.jetbrains.k2js.translate.utils.TranslationUtils;
|
||||
|
||||
import static org.jetbrains.k2js.translate.utils.BindingUtils.getTypeByReference;
|
||||
import static org.jetbrains.k2js.translate.utils.JsAstUtils.*;
|
||||
|
||||
public final class PatternTranslator extends AbstractTranslator {
|
||||
@@ -68,7 +71,7 @@ public final class PatternTranslator extends AbstractTranslator {
|
||||
private JsExpression translateAsIsCheck(@NotNull JsExpression expressionToMatch,
|
||||
@NotNull JetTypeReference typeReference) {
|
||||
JsInvocation isCheck = new JsInvocation(context().namer().isOperationReference(),
|
||||
expressionToMatch, getClassReference(typeReference));
|
||||
expressionToMatch, getClassNameReference(typeReference));
|
||||
if (isNullable(typeReference)) {
|
||||
return addNullCheck(expressionToMatch, isCheck);
|
||||
}
|
||||
@@ -79,7 +82,7 @@ public final class PatternTranslator extends AbstractTranslator {
|
||||
private JsExpression translateAsIntrinsicTypeCheck(@NotNull JsExpression expressionToMatch,
|
||||
@NotNull JetTypeReference typeReference) {
|
||||
JsExpression result = null;
|
||||
JsName className = getClassReference(typeReference).getName();
|
||||
JsName className = getClassNameReference(typeReference).getName();
|
||||
if (className.getIdent().equals("String")) {
|
||||
result = typeof(expressionToMatch, program().getStringLiteral("string"));
|
||||
}
|
||||
@@ -95,19 +98,14 @@ public final class PatternTranslator extends AbstractTranslator {
|
||||
}
|
||||
|
||||
private boolean isNullable(JetTypeReference typeReference) {
|
||||
return BindingUtils.getTypeByReference(bindingContext(), typeReference).isNullable();
|
||||
return getTypeByReference(bindingContext(), typeReference).isNullable();
|
||||
}
|
||||
|
||||
@NotNull
|
||||
private JsNameRef getClassReference(@NotNull JetTypeReference typeReference) {
|
||||
return getClassNameReferenceForTypeReference(typeReference);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
private JsNameRef getClassNameReferenceForTypeReference(@NotNull JetTypeReference typeReference) {
|
||||
private JsNameRef getClassNameReference(@NotNull JetTypeReference typeReference) {
|
||||
ClassDescriptor referencedClass = BindingUtils.getClassDescriptorForTypeReference
|
||||
(bindingContext(), typeReference);
|
||||
return TranslationUtils.getQualifiedReference(context(), referencedClass);
|
||||
return context().getQualifiedReference(referencedClass);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
|
||||
+1
-2
@@ -41,7 +41,6 @@ import static org.jetbrains.jet.lang.resolve.DescriptorUtils.getClassDescriptorF
|
||||
import static org.jetbrains.k2js.translate.utils.BindingUtils.*;
|
||||
import static org.jetbrains.k2js.translate.utils.JsAstUtils.convertToStatement;
|
||||
import static org.jetbrains.k2js.translate.utils.PsiUtils.getPrimaryConstructorParameters;
|
||||
import static org.jetbrains.k2js.translate.utils.TranslationUtils.getQualifiedReference;
|
||||
import static org.jetbrains.k2js.translate.utils.TranslationUtils.translateArgumentList;
|
||||
|
||||
public final class ClassInitializerTranslator extends AbstractTranslator {
|
||||
@@ -89,7 +88,7 @@ public final class ClassInitializerTranslator extends AbstractTranslator {
|
||||
} else {
|
||||
arguments = Collections.emptyList();
|
||||
}
|
||||
JsNameRef reference = getQualifiedReference(context(), getClassDescriptorForType(enumClassType));
|
||||
JsNameRef reference = context().getQualifiedReference(getClassDescriptorForType(enumClassType));
|
||||
if(context().isEcma5()) {
|
||||
return new JsInvocation(reference, arguments);
|
||||
} else {
|
||||
|
||||
+1
-6
@@ -17,7 +17,6 @@
|
||||
package org.jetbrains.k2js.translate.reference;
|
||||
|
||||
import com.google.dart.compiler.backend.js.ast.JsExpression;
|
||||
import com.google.dart.compiler.backend.js.ast.JsNameRef;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor;
|
||||
@@ -43,11 +42,7 @@ public final class ReferenceTranslator {
|
||||
public static JsExpression translateAsFQReference(@NotNull DeclarationDescriptor referencedDescriptor,
|
||||
@NotNull TranslationContext context) {
|
||||
JsExpression alias = context.getAliasForDescriptor(referencedDescriptor);
|
||||
if (alias != null) {
|
||||
return alias;
|
||||
}
|
||||
|
||||
return new JsNameRef(context.getNameForDescriptor(referencedDescriptor), context.getQualifierForDescriptor(referencedDescriptor));
|
||||
return alias != null ? alias : context.getQualifiedReference(referencedDescriptor);
|
||||
}
|
||||
|
||||
@NotNull
|
||||
|
||||
@@ -21,7 +21,6 @@ import com.intellij.openapi.util.Pair;
|
||||
import com.intellij.util.SmartList;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.jet.lang.descriptors.DeclarationDescriptor;
|
||||
import org.jetbrains.jet.lang.descriptors.FunctionDescriptor;
|
||||
import org.jetbrains.jet.lang.descriptors.PropertyDescriptor;
|
||||
import org.jetbrains.jet.lang.descriptors.PropertyGetterDescriptor;
|
||||
@@ -177,11 +176,6 @@ public final class TranslationUtils {
|
||||
return jsInitExpression;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public static JsNameRef getQualifiedReference(@NotNull TranslationContext context, @NotNull DeclarationDescriptor descriptor) {
|
||||
return new JsNameRef(context.getNameForDescriptor(descriptor), context.getQualifierForDescriptor(descriptor));
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public static List<JsExpression> translateExpressionList(@NotNull TranslationContext context,
|
||||
@NotNull List<JetExpression> expressions) {
|
||||
|
||||
Reference in New Issue
Block a user