JS: fix inlining of functions derived from other modules
See KT-16408
This commit is contained in:
@@ -4754,6 +4754,12 @@ public class BoxJsTestGenerated extends AbstractBoxJsTest {
|
|||||||
doTest(fileName);
|
doTest(fileName);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("fakeFunctionInAnotherModule.kt")
|
||||||
|
public void testFakeFunctionInAnotherModule() throws Exception {
|
||||||
|
String fileName = KotlinTestUtils.navigationMetadata("js/js.translator/testData/box/inlineMultiModule/fakeFunctionInAnotherModule.kt");
|
||||||
|
doTest(fileName);
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("importObjectInstance.kt")
|
@TestMetadata("importObjectInstance.kt")
|
||||||
public void testImportObjectInstance() throws Exception {
|
public void testImportObjectInstance() throws Exception {
|
||||||
String fileName = KotlinTestUtils.navigationMetadata("js/js.translator/testData/box/inlineMultiModule/importObjectInstance.kt");
|
String fileName = KotlinTestUtils.navigationMetadata("js/js.translator/testData/box/inlineMultiModule/importObjectInstance.kt");
|
||||||
|
|||||||
@@ -40,10 +40,7 @@ import org.jetbrains.kotlin.js.translate.context.generator.Generator;
|
|||||||
import org.jetbrains.kotlin.js.translate.context.generator.Rule;
|
import org.jetbrains.kotlin.js.translate.context.generator.Rule;
|
||||||
import org.jetbrains.kotlin.js.translate.declaration.ClassModelGenerator;
|
import org.jetbrains.kotlin.js.translate.declaration.ClassModelGenerator;
|
||||||
import org.jetbrains.kotlin.js.translate.intrinsic.Intrinsics;
|
import org.jetbrains.kotlin.js.translate.intrinsic.Intrinsics;
|
||||||
import org.jetbrains.kotlin.js.translate.utils.AnnotationsUtils;
|
import org.jetbrains.kotlin.js.translate.utils.*;
|
||||||
import org.jetbrains.kotlin.js.translate.utils.JsAstUtils;
|
|
||||||
import org.jetbrains.kotlin.js.translate.utils.SignatureUtilsKt;
|
|
||||||
import org.jetbrains.kotlin.js.translate.utils.TranslationUtils;
|
|
||||||
import org.jetbrains.kotlin.name.ClassId;
|
import org.jetbrains.kotlin.name.ClassId;
|
||||||
import org.jetbrains.kotlin.name.FqName;
|
import org.jetbrains.kotlin.name.FqName;
|
||||||
import org.jetbrains.kotlin.resolve.BindingContext;
|
import org.jetbrains.kotlin.resolve.BindingContext;
|
||||||
@@ -805,6 +802,7 @@ public final class StaticContext {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void addInlineCall(@NotNull CallableDescriptor descriptor) {
|
public void addInlineCall(@NotNull CallableDescriptor descriptor) {
|
||||||
|
descriptor = (CallableDescriptor) JsDescriptorUtils.findRealInlineDeclaration(descriptor);
|
||||||
String tag = Namer.getFunctionTag(descriptor, config);
|
String tag = Namer.getFunctionTag(descriptor, config);
|
||||||
JsExpression moduleExpression = exportModuleForInline(DescriptorUtils.getContainingModule(descriptor));
|
JsExpression moduleExpression = exportModuleForInline(DescriptorUtils.getContainingModule(descriptor));
|
||||||
if (moduleExpression == null) {
|
if (moduleExpression == null) {
|
||||||
|
|||||||
@@ -169,7 +169,7 @@ public final class JsDescriptorUtils {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Nullable
|
@Nullable
|
||||||
private static FunctionDescriptor findRealDeclaration(FunctionDescriptor descriptor) {
|
private static FunctionDescriptor findRealDeclaration(@NotNull FunctionDescriptor descriptor) {
|
||||||
if (descriptor.getModality() == Modality.ABSTRACT) return null;
|
if (descriptor.getModality() == Modality.ABSTRACT) return null;
|
||||||
if (descriptor.getKind().isReal()) return descriptor;
|
if (descriptor.getKind().isReal()) return descriptor;
|
||||||
|
|
||||||
|
|||||||
+15
@@ -0,0 +1,15 @@
|
|||||||
|
// EXPECTED_REACHABLE_NODES: 996
|
||||||
|
// MODULE: lib
|
||||||
|
// FILE: lib1.kt
|
||||||
|
open class Parent {
|
||||||
|
inline fun b() = c()
|
||||||
|
}
|
||||||
|
|
||||||
|
// FILE: lib2.kt
|
||||||
|
fun c() = "OK"
|
||||||
|
|
||||||
|
// MODULE: main(lib)
|
||||||
|
// FILE: main.kt
|
||||||
|
class Child : Parent()
|
||||||
|
|
||||||
|
fun box() = Child().b()
|
||||||
Reference in New Issue
Block a user