diff --git a/idea/src/org/jetbrains/kotlin/idea/filters/InlineFunctionHyperLinkInfo.kt b/idea/src/org/jetbrains/kotlin/idea/filters/InlineFunctionHyperLinkInfo.kt index bf991e85063..6ee29775ab2 100644 --- a/idea/src/org/jetbrains/kotlin/idea/filters/InlineFunctionHyperLinkInfo.kt +++ b/idea/src/org/jetbrains/kotlin/idea/filters/InlineFunctionHyperLinkInfo.kt @@ -53,6 +53,12 @@ class InlineFunctionHyperLinkInfo( return file?.let { OpenFileDescriptor(project, file.file, file.line, 0) } } + val callSiteDescriptor: OpenFileDescriptor? + get() { + val file = inlineInfo.firstOrNull { it is InlineInfo.CallSiteInfo } + return file?.let { OpenFileDescriptor(project, file.file, file.line, 0) } + } + sealed class InlineInfo(val prefix: String, val file: VirtualFile, val line: Int) { class CallSiteInfo(file: VirtualFile, line: Int) : InlineInfo(KotlinBundle.message("filters.text.inline.function.call.site"), file, line) diff --git a/idea/testData/debugger/exceptionFilter/inlineFunCallSite/inlineFunCallSite.kt b/idea/testData/debugger/exceptionFilter/inlineFunCallSite/inlineFunCallSite.kt new file mode 100644 index 00000000000..d28985184f3 --- /dev/null +++ b/idea/testData/debugger/exceptionFilter/inlineFunCallSite/inlineFunCallSite.kt @@ -0,0 +1,11 @@ +fun box() { + foo() +} + +inline fun foo() { + null!! +} + +// NAVIGATE_TO_CALL_SITE +// FILE: inlineFunCallSite.kt +// LINE: 2 diff --git a/idea/testData/debugger/exceptionFilter/inlineFunCallSiteInInlineLambda/inlineFunCallSiteInInlineLambda.kt b/idea/testData/debugger/exceptionFilter/inlineFunCallSiteInInlineLambda/inlineFunCallSiteInInlineLambda.kt new file mode 100644 index 00000000000..5b56573bf4b --- /dev/null +++ b/idea/testData/debugger/exceptionFilter/inlineFunCallSiteInInlineLambda/inlineFunCallSiteInInlineLambda.kt @@ -0,0 +1,17 @@ +fun box() { + bar { + foo() + } +} + +inline fun foo() { + null!! +} + +inline fun bar(x: () -> Unit) { + x() +} + +// NAVIGATE_TO_CALL_SITE +// FILE: inlineFunCallSiteInInlineLambda.kt +// LINE: 3 diff --git a/idea/tests/org/jetbrains/kotlin/idea/filters/AbstractKotlinExceptionFilterTest.kt b/idea/tests/org/jetbrains/kotlin/idea/filters/AbstractKotlinExceptionFilterTest.kt index b23051424dc..47ef656701e 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/filters/AbstractKotlinExceptionFilterTest.kt +++ b/idea/tests/org/jetbrains/kotlin/idea/filters/AbstractKotlinExceptionFilterTest.kt @@ -110,7 +110,11 @@ abstract class AbstractKotlinExceptionFilterTest : KotlinCodeInsightTestCase() { } val info = result.firstHyperlinkInfo as FileHyperlinkInfo - val descriptor = info.descriptor!! + val descriptor = if (InTextDirectivesUtils.isDirectiveDefined(fileText, "NAVIGATE_TO_CALL_SITE")) + (info as? InlineFunctionHyperLinkInfo)?.callSiteDescriptor + ?: throw AssertionError("`$stackTraceString` did not resolve to an inline function call") + else + info.descriptor!! val expectedFileName = InTextDirectivesUtils.findStringWithPrefixes(fileText, "// FILE: ")!! val expectedVirtualFile = File(rootDir, expectedFileName).toVirtualFile() diff --git a/idea/tests/org/jetbrains/kotlin/idea/filters/KotlinExceptionFilterTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/filters/KotlinExceptionFilterTestGenerated.java index 548f1148255..58018471591 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/filters/KotlinExceptionFilterTestGenerated.java +++ b/idea/tests/org/jetbrains/kotlin/idea/filters/KotlinExceptionFilterTestGenerated.java @@ -38,6 +38,16 @@ public class KotlinExceptionFilterTestGenerated extends AbstractKotlinExceptionF runTest("idea/testData/debugger/exceptionFilter/inlineFunCallInLibrary/"); } + @TestMetadata("inlineFunCallSite") + public void testInlineFunCallSite() throws Exception { + runTest("idea/testData/debugger/exceptionFilter/inlineFunCallSite/"); + } + + @TestMetadata("inlineFunCallSiteInInlineLambda") + public void testInlineFunCallSiteInInlineLambda() throws Exception { + runTest("idea/testData/debugger/exceptionFilter/inlineFunCallSiteInInlineLambda/"); + } + @TestMetadata("inlineFunFromLibrary") public void testInlineFunFromLibrary() throws Exception { runTest("idea/testData/debugger/exceptionFilter/inlineFunFromLibrary/");