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);
|
ModuleDescriptor module = DescriptorUtilsKt.getModule(descriptor);
|
||||||
JsName name;
|
JsName name;
|
||||||
String tag = getTag(descriptor);
|
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;
|
assert tag != null : "Can't import declaration without fqname: " + descriptor;
|
||||||
name = importDeclaration(suggestedName, tag, getQualifiedReference(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.descriptorUtils.DescriptorUtilsKt.isCoroutineLambda;
|
||||||
import static org.jetbrains.kotlin.js.translate.context.UsageTrackerKt.getNameForCapturedDescriptor;
|
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;
|
import static org.jetbrains.kotlin.js.translate.utils.BindingUtils.getDescriptorForElement;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -277,10 +275,6 @@ public class TranslationContext {
|
|||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
public JsNameRef getInnerReference(@NotNull DeclarationDescriptor descriptor) {
|
public JsNameRef getInnerReference(@NotNull DeclarationDescriptor descriptor) {
|
||||||
if (isNativeObject(descriptor) || isLibraryObject(descriptor)) {
|
|
||||||
return getQualifiedReference(descriptor);
|
|
||||||
}
|
|
||||||
|
|
||||||
return JsAstUtils.pureFqn(getInnerNameForDescriptor(descriptor), null);
|
return JsAstUtils.pureFqn(getInnerNameForDescriptor(descriptor), null);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+9
-8
@@ -16,14 +16,14 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.js.translate.reference;
|
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.JsExpression;
|
||||||
import org.jetbrains.kotlin.js.backend.ast.JsInvocation;
|
import org.jetbrains.kotlin.js.backend.ast.JsInvocation;
|
||||||
import org.jetbrains.kotlin.js.backend.ast.JsName;
|
import org.jetbrains.kotlin.js.backend.ast.JsName;
|
||||||
import org.jetbrains.kotlin.js.backend.ast.JsNameRef;
|
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.MetadataProperties;
|
||||||
import org.jetbrains.kotlin.js.backend.ast.metadata.SideEffectKind;
|
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.context.TranslationContext;
|
||||||
import org.jetbrains.kotlin.js.translate.utils.AnnotationsUtils;
|
import org.jetbrains.kotlin.js.translate.utils.AnnotationsUtils;
|
||||||
import org.jetbrains.kotlin.js.translate.utils.JsAstUtils;
|
import org.jetbrains.kotlin.js.translate.utils.JsAstUtils;
|
||||||
@@ -48,6 +48,10 @@ public final class ReferenceTranslator {
|
|||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
public static JsExpression translateAsValueReference(@NotNull DeclarationDescriptor descriptor, @NotNull TranslationContext context) {
|
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);
|
JsExpression alias = context.getAliasForDescriptor(descriptor);
|
||||||
if (alias != null) return alias;
|
if (alias != null) return alias;
|
||||||
|
|
||||||
@@ -82,8 +86,8 @@ public final class ReferenceTranslator {
|
|||||||
|
|
||||||
@NotNull
|
@NotNull
|
||||||
public static JsExpression translateAsTypeReference(@NotNull ClassDescriptor descriptor, @NotNull TranslationContext context) {
|
public static JsExpression translateAsTypeReference(@NotNull ClassDescriptor descriptor, @NotNull TranslationContext context) {
|
||||||
if (AnnotationsUtils.isNativeObject(descriptor)) {
|
if (AnnotationsUtils.isNativeObject(descriptor) || AnnotationsUtils.isLibraryObject(descriptor)) {
|
||||||
return context.getQualifiedReference(descriptor);
|
return context.getInnerReference(descriptor);
|
||||||
}
|
}
|
||||||
if (!shouldTranslateAsFQN(descriptor, context)) {
|
if (!shouldTranslateAsFQN(descriptor, context)) {
|
||||||
if (DescriptorUtils.isObject(descriptor) || DescriptorUtils.isEnumEntry(descriptor)) {
|
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) {
|
private static boolean shouldTranslateAsFQN(@NotNull DeclarationDescriptor descriptor, @NotNull TranslationContext context) {
|
||||||
return isLocalVarOrFunction(descriptor) ||
|
return isLocalVarOrFunction(descriptor) || context.isPublicInlineFunction();
|
||||||
AnnotationsUtils.isNativeObject(descriptor) ||
|
|
||||||
AnnotationsUtils.isLibraryObject(descriptor) ||
|
|
||||||
context.isPublicInlineFunction();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private static boolean isLocalVarOrFunction(DeclarationDescriptor descriptor) {
|
private static boolean isLocalVarOrFunction(DeclarationDescriptor descriptor) {
|
||||||
|
|||||||
Reference in New Issue
Block a user