diff --git a/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/SMAP.kt b/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/SMAP.kt index adefc5de2dd..df4a933991d 100644 --- a/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/SMAP.kt +++ b/compiler/backend/src/org/jetbrains/kotlin/codegen/inline/SMAP.kt @@ -239,7 +239,9 @@ class SMAP(val fileMappings: List) { val sourceInfo: SourceInfo init { - val defaultMapping = default.lineMappings.single() + //val defaultMapping = default.lineMappings.single() + //temporary workaround for KT-11478 ("Couldn't inline method call" error) + val defaultMapping = default.lineMappings.first() sourceInfo = SourceInfo(default.name, default.path, defaultMapping.source + defaultMapping.range - 1) } diff --git a/compiler/testData/codegen/boxInline/smap/anonymous/severalMappingsForDefaultFile.kt b/compiler/testData/codegen/boxInline/smap/anonymous/severalMappingsForDefaultFile.kt new file mode 100644 index 00000000000..d182db0b47b --- /dev/null +++ b/compiler/testData/codegen/boxInline/smap/anonymous/severalMappingsForDefaultFile.kt @@ -0,0 +1,76 @@ +//FILE: 1.kt +package test + +inline fun annotatedWith2(crossinline predicate: () -> Boolean) = + { any { predicate() } }() + + +inline fun annotatedWith(crossinline predicate: () -> Boolean) = + annotatedWith2 { predicate() } + + +inline fun any(s: () -> Boolean) { + s() +} + + +//FILE: 2.kt +import test.* + +fun box(): String { + var result = "fail" + + annotatedWith { result = "OK"; true } + + return result +} + + +inline fun test(z: () -> Unit) { + z() +} + + +// FILE: 2.smap +//PROBLEM of KT-11478 in additional line mapping for default source (so 'single' was replaces with 'first' in SMAP class init): +//*L +//1#1,15:1 +//17#1:19 + + +SMAP +2.kt +Kotlin +*S Kotlin +*F ++ 1 2.kt +_2Kt ++ 2 1.kt +test/_1Kt +*L +1#1,18:1 +9#2:19 +5#2:20 +*E + +SMAP +1.kt +Kotlin +*S Kotlin +*F ++ 1 1.kt +test/_1Kt$annotatedWith2$1 ++ 2 1.kt +test/_1Kt ++ 3 2.kt +_2Kt +*L +1#1,17:1 +21#1:23 +13#2,2:18 +5#2:18 +18#2:19 +9#2:20 +19#2,2:20 +7#3:22 +*E \ No newline at end of file diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxInlineCodegenTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxInlineCodegenTestGenerated.java index f245c05a02e..5b184fb6b40 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxInlineCodegenTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/BlackBoxInlineCodegenTestGenerated.java @@ -1865,6 +1865,12 @@ public class BlackBoxInlineCodegenTestGenerated extends AbstractBlackBoxInlineCo String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/boxInline/smap/anonymous/objectOnInlineCallSiteWithCapture.kt"); doTest(fileName); } + + @TestMetadata("severalMappingsForDefaultFile.kt") + public void testSeveralMappingsForDefaultFile() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/boxInline/smap/anonymous/severalMappingsForDefaultFile.kt"); + doTest(fileName); + } } @TestMetadata("compiler/testData/codegen/boxInline/smap/inlineOnly") diff --git a/compiler/tests/org/jetbrains/kotlin/codegen/CompileKotlinAgainstInlineKotlinTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/codegen/CompileKotlinAgainstInlineKotlinTestGenerated.java index c45cdde00dd..440e54c6ca5 100644 --- a/compiler/tests/org/jetbrains/kotlin/codegen/CompileKotlinAgainstInlineKotlinTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/codegen/CompileKotlinAgainstInlineKotlinTestGenerated.java @@ -1865,6 +1865,12 @@ public class CompileKotlinAgainstInlineKotlinTestGenerated extends AbstractCompi String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/boxInline/smap/anonymous/objectOnInlineCallSiteWithCapture.kt"); doTest(fileName); } + + @TestMetadata("severalMappingsForDefaultFile.kt") + public void testSeveralMappingsForDefaultFile() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/boxInline/smap/anonymous/severalMappingsForDefaultFile.kt"); + doTest(fileName); + } } @TestMetadata("compiler/testData/codegen/boxInline/smap/inlineOnly")