JS: import external declarations, reference them by aliases, not by FQN
This commit is contained in:
@@ -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));
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
+9
-8
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user