From ecdf8a998555ee698e26087c864e3bb2f95dcc4f Mon Sep 17 00:00:00 2001 From: Alexey Andreev Date: Fri, 10 Feb 2017 20:14:29 +0300 Subject: [PATCH] JS: import external declarations, reference them by aliases, not by FQN --- .../js/translate/context/StaticContext.java | 2 +- .../translate/context/TranslationContext.java | 6 ------ .../reference/ReferenceTranslator.java | 17 +++++++++-------- 3 files changed, 10 insertions(+), 15 deletions(-) diff --git a/js/js.translator/src/org/jetbrains/kotlin/js/translate/context/StaticContext.java b/js/js.translator/src/org/jetbrains/kotlin/js/translate/context/StaticContext.java index c4fd5c69fb1..3f7281589fc 100644 --- a/js/js.translator/src/org/jetbrains/kotlin/js/translate/context/StaticContext.java +++ b/js/js.translator/src/org/jetbrains/kotlin/js/translate/context/StaticContext.java @@ -472,7 +472,7 @@ public final class StaticContext { ModuleDescriptor module = DescriptorUtilsKt.getModule(descriptor); JsName name; String tag = getTag(descriptor); - if (module != currentModule) { + if (module != currentModule || AnnotationsUtils.isNativeObject(descriptor) || AnnotationsUtils.isLibraryObject(descriptor)) { assert tag != null : "Can't import declaration without fqname: " + descriptor; name = importDeclaration(suggestedName, tag, getQualifiedReference(descriptor)); } diff --git a/js/js.translator/src/org/jetbrains/kotlin/js/translate/context/TranslationContext.java b/js/js.translator/src/org/jetbrains/kotlin/js/translate/context/TranslationContext.java index cc2868ad97f..de49dbede47 100644 --- a/js/js.translator/src/org/jetbrains/kotlin/js/translate/context/TranslationContext.java +++ b/js/js.translator/src/org/jetbrains/kotlin/js/translate/context/TranslationContext.java @@ -45,8 +45,6 @@ import java.util.*; import static org.jetbrains.kotlin.js.descriptorUtils.DescriptorUtilsKt.isCoroutineLambda; import static org.jetbrains.kotlin.js.translate.context.UsageTrackerKt.getNameForCapturedDescriptor; -import static org.jetbrains.kotlin.js.translate.utils.AnnotationsUtils.isLibraryObject; -import static org.jetbrains.kotlin.js.translate.utils.AnnotationsUtils.isNativeObject; import static org.jetbrains.kotlin.js.translate.utils.BindingUtils.getDescriptorForElement; /** @@ -277,10 +275,6 @@ public class TranslationContext { @NotNull public JsNameRef getInnerReference(@NotNull DeclarationDescriptor descriptor) { - if (isNativeObject(descriptor) || isLibraryObject(descriptor)) { - return getQualifiedReference(descriptor); - } - return JsAstUtils.pureFqn(getInnerNameForDescriptor(descriptor), null); } diff --git a/js/js.translator/src/org/jetbrains/kotlin/js/translate/reference/ReferenceTranslator.java b/js/js.translator/src/org/jetbrains/kotlin/js/translate/reference/ReferenceTranslator.java index 0977b141a98..4dbd524ffc0 100644 --- a/js/js.translator/src/org/jetbrains/kotlin/js/translate/reference/ReferenceTranslator.java +++ b/js/js.translator/src/org/jetbrains/kotlin/js/translate/reference/ReferenceTranslator.java @@ -16,14 +16,14 @@ package org.jetbrains.kotlin.js.translate.reference; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.kotlin.descriptors.*; import org.jetbrains.kotlin.js.backend.ast.JsExpression; import org.jetbrains.kotlin.js.backend.ast.JsInvocation; import org.jetbrains.kotlin.js.backend.ast.JsName; import org.jetbrains.kotlin.js.backend.ast.JsNameRef; import org.jetbrains.kotlin.js.backend.ast.metadata.MetadataProperties; import org.jetbrains.kotlin.js.backend.ast.metadata.SideEffectKind; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.kotlin.descriptors.*; import org.jetbrains.kotlin.js.translate.context.TranslationContext; import org.jetbrains.kotlin.js.translate.utils.AnnotationsUtils; import org.jetbrains.kotlin.js.translate.utils.JsAstUtils; @@ -48,6 +48,10 @@ public final class ReferenceTranslator { @NotNull public static JsExpression translateAsValueReference(@NotNull DeclarationDescriptor descriptor, @NotNull TranslationContext context) { + if (AnnotationsUtils.isNativeObject(descriptor) || AnnotationsUtils.isLibraryObject(descriptor)) { + return context.getInnerReference(descriptor); + } + JsExpression alias = context.getAliasForDescriptor(descriptor); if (alias != null) return alias; @@ -82,8 +86,8 @@ public final class ReferenceTranslator { @NotNull public static JsExpression translateAsTypeReference(@NotNull ClassDescriptor descriptor, @NotNull TranslationContext context) { - if (AnnotationsUtils.isNativeObject(descriptor)) { - return context.getQualifiedReference(descriptor); + if (AnnotationsUtils.isNativeObject(descriptor) || AnnotationsUtils.isLibraryObject(descriptor)) { + return context.getInnerReference(descriptor); } if (!shouldTranslateAsFQN(descriptor, context)) { if (DescriptorUtils.isObject(descriptor) || DescriptorUtils.isEnumEntry(descriptor)) { @@ -116,10 +120,7 @@ public final class ReferenceTranslator { } private static boolean shouldTranslateAsFQN(@NotNull DeclarationDescriptor descriptor, @NotNull TranslationContext context) { - return isLocalVarOrFunction(descriptor) || - AnnotationsUtils.isNativeObject(descriptor) || - AnnotationsUtils.isLibraryObject(descriptor) || - context.isPublicInlineFunction(); + return isLocalVarOrFunction(descriptor) || context.isPublicInlineFunction(); } private static boolean isLocalVarOrFunction(DeclarationDescriptor descriptor) {