diff --git a/js/js.translator/src/org/jetbrains/k2js/translate/context/StaticContext.java b/js/js.translator/src/org/jetbrains/k2js/translate/context/StaticContext.java index 6fd01fefcbe..c9ed94ee6da 100644 --- a/js/js.translator/src/org/jetbrains/k2js/translate/context/StaticContext.java +++ b/js/js.translator/src/org/jetbrains/k2js/translate/context/StaticContext.java @@ -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()); diff --git a/js/js.translator/src/org/jetbrains/k2js/translate/context/TranslationContext.java b/js/js.translator/src/org/jetbrains/k2js/translate/context/TranslationContext.java index ee679c07e74..7a4166ba978 100644 --- a/js/js.translator/src/org/jetbrains/k2js/translate/context/TranslationContext.java +++ b/js/js.translator/src/org/jetbrains/k2js/translate/context/TranslationContext.java @@ -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); diff --git a/js/js.translator/src/org/jetbrains/k2js/translate/declaration/ClassTranslator.java b/js/js.translator/src/org/jetbrains/k2js/translate/declaration/ClassTranslator.java index d8dc7995179..90edbbd3234 100644 --- a/js/js.translator/src/org/jetbrains/k2js/translate/declaration/ClassTranslator.java +++ b/js/js.translator/src/org/jetbrains/k2js/translate/declaration/ClassTranslator.java @@ -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, 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, diff --git a/js/js.translator/src/org/jetbrains/k2js/translate/declaration/NamespaceDeclarationTranslator.java b/js/js.translator/src/org/jetbrains/k2js/translate/declaration/NamespaceDeclarationTranslator.java index 3ca18f22a1e..82ee5fc5668 100644 --- a/js/js.translator/src/org/jetbrains/k2js/translate/declaration/NamespaceDeclarationTranslator.java +++ b/js/js.translator/src/org/jetbrains/k2js/translate/declaration/NamespaceDeclarationTranslator.java @@ -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 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 { diff --git a/js/js.translator/src/org/jetbrains/k2js/translate/declaration/NamespaceTranslator.java b/js/js.translator/src/org/jetbrains/k2js/translate/declaration/NamespaceTranslator.java index 888ef786ea5..bdd5f16ea6b 100644 --- a/js/js.translator/src/org/jetbrains/k2js/translate/declaration/NamespaceTranslator.java +++ b/js/js.translator/src/org/jetbrains/k2js/translate/declaration/NamespaceTranslator.java @@ -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; } diff --git a/js/js.translator/src/org/jetbrains/k2js/translate/expression/PatternTranslator.java b/js/js.translator/src/org/jetbrains/k2js/translate/expression/PatternTranslator.java index 66e15c1dbb6..07f38c6115b 100644 --- a/js/js.translator/src/org/jetbrains/k2js/translate/expression/PatternTranslator.java +++ b/js/js.translator/src/org/jetbrains/k2js/translate/expression/PatternTranslator.java @@ -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 diff --git a/js/js.translator/src/org/jetbrains/k2js/translate/initializer/ClassInitializerTranslator.java b/js/js.translator/src/org/jetbrains/k2js/translate/initializer/ClassInitializerTranslator.java index 48e63de630e..cf645d17498 100644 --- a/js/js.translator/src/org/jetbrains/k2js/translate/initializer/ClassInitializerTranslator.java +++ b/js/js.translator/src/org/jetbrains/k2js/translate/initializer/ClassInitializerTranslator.java @@ -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 { diff --git a/js/js.translator/src/org/jetbrains/k2js/translate/reference/ReferenceTranslator.java b/js/js.translator/src/org/jetbrains/k2js/translate/reference/ReferenceTranslator.java index cb27dd22814..cec2c64ab02 100644 --- a/js/js.translator/src/org/jetbrains/k2js/translate/reference/ReferenceTranslator.java +++ b/js/js.translator/src/org/jetbrains/k2js/translate/reference/ReferenceTranslator.java @@ -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 diff --git a/js/js.translator/src/org/jetbrains/k2js/translate/utils/TranslationUtils.java b/js/js.translator/src/org/jetbrains/k2js/translate/utils/TranslationUtils.java index 3be7316cae6..23371f9ff52 100644 --- a/js/js.translator/src/org/jetbrains/k2js/translate/utils/TranslationUtils.java +++ b/js/js.translator/src/org/jetbrains/k2js/translate/utils/TranslationUtils.java @@ -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 translateExpressionList(@NotNull TranslationContext context, @NotNull List expressions) {