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