KT-3008: when inlining functions from external modules, replace calls to functions in the external module via new mechanism instead of Kotlin.modules
This commit is contained in:
@@ -545,10 +545,8 @@ public final class StaticContext {
|
||||
|
||||
JsNameRef result = getQualifierForParentPackage(((PackageFragmentDescriptor) containingDescriptor).getFqName());
|
||||
|
||||
String moduleName = getExternalModuleName(descriptor);
|
||||
if (moduleName == null) {
|
||||
return result;
|
||||
}
|
||||
JsExpression moduleExpression = getModuleExpressionFor(descriptor);
|
||||
if (moduleExpression == null) return result;
|
||||
|
||||
if (LibrarySourcesConfig.UNKNOWN_EXTERNAL_MODULE_NAME.equals(moduleName)) {
|
||||
return null;
|
||||
@@ -655,6 +653,23 @@ public final class StaticContext {
|
||||
}
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public JsExpression getModuleExpressionFor(@NotNull DeclarationDescriptor descriptor) {
|
||||
String moduleName = getExternalModuleName(descriptor);
|
||||
if (moduleName == null) return null;
|
||||
|
||||
if (LibrarySourcesConfig.UNKNOWN_EXTERNAL_MODULE_NAME.equals(moduleName)) return null;
|
||||
|
||||
JsName moduleId = moduleName.equals(Namer.KOTLIN_LOWER_NAME) ? rootScope.declareName(Namer.KOTLIN_NAME) :
|
||||
importedModules.get(moduleName);
|
||||
if (moduleId == null) {
|
||||
moduleId = rootScope.declareFreshName(Namer.LOCAL_MODULE_PREFIX + Namer.suggestedModuleName(moduleName));
|
||||
importedModules.put(moduleName, moduleId);
|
||||
}
|
||||
|
||||
return JsAstUtils.fqnWithoutSideEffects(moduleId, null);
|
||||
}
|
||||
|
||||
private static JsExpression applySideEffects(JsExpression expression, DeclarationDescriptor descriptor) {
|
||||
if (expression instanceof HasMetadata) {
|
||||
if (descriptor instanceof FunctionDescriptor ||
|
||||
|
||||
@@ -544,4 +544,9 @@ public class TranslationContext {
|
||||
"reports true for given constructor: " + constructor);
|
||||
callSites.add(new DeferredCallSite(constructor, invocationArgs, this));
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public JsExpression getModuleExpressionFor(@NotNull DeclarationDescriptor descriptor) {
|
||||
return staticContext.getModuleExpressionFor(descriptor);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user