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:
Alexey Andreev
2016-06-21 15:17:26 +03:00
parent f029b720e7
commit 055be070e9
3 changed files with 31 additions and 6 deletions
@@ -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);
}
}