From c4d0b5493a85781164f0e109ecb630382aa03e1c Mon Sep 17 00:00:00 2001 From: Ilmir Usmanov Date: Wed, 10 Oct 2018 16:22:12 +0300 Subject: [PATCH] Fix NPE in suspension point in monitor call checker #KT-27484 Fixed --- .../SuspensionPointInSynchronizedCallChecker.kt | 3 ++- .../SuspensionPointInMonitor.kt | 13 +++++++++++++ .../MultiFileJvmBasicCompletionTestGenerated.java | 5 +++++ 3 files changed, 20 insertions(+), 1 deletion(-) create mode 100644 idea/idea-completion/testData/basic/multifile/SuspensionPointInMonitor/SuspensionPointInMonitor.kt diff --git a/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/checkers/SuspensionPointInSynchronizedCallChecker.kt b/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/checkers/SuspensionPointInSynchronizedCallChecker.kt index c923f3c0dc0..8fe690047ee 100644 --- a/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/checkers/SuspensionPointInSynchronizedCallChecker.kt +++ b/compiler/frontend.java/src/org/jetbrains/kotlin/resolve/jvm/checkers/SuspensionPointInSynchronizedCallChecker.kt @@ -42,7 +42,8 @@ class SuspensionPointInSynchronizedCallChecker : CallChecker { if (parent !is KtValueArgumentList) { child = parent } - parent = parent.parent + // parent.parent can be null if we edit the file, see EA-2158254 and KT-27484 + parent = parent.parent ?: return } } diff --git a/idea/idea-completion/testData/basic/multifile/SuspensionPointInMonitor/SuspensionPointInMonitor.kt b/idea/idea-completion/testData/basic/multifile/SuspensionPointInMonitor/SuspensionPointInMonitor.kt new file mode 100644 index 00000000000..09e56332548 --- /dev/null +++ b/idea/idea-completion/testData/basic/multifile/SuspensionPointInMonitor/SuspensionPointInMonitor.kt @@ -0,0 +1,13 @@ +inline val C.v: Int get() = 1 +class C { + fun f(block: suspend C.() -> Unit): Unit = TODO() +} +suspend fun yield() = {} +fun f(c: C) { + c.f { + v.toString() + yie + } +} + +// EXIST: yield diff --git a/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/MultiFileJvmBasicCompletionTestGenerated.java b/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/MultiFileJvmBasicCompletionTestGenerated.java index 2d3c3208b9b..dce1403902d 100644 --- a/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/MultiFileJvmBasicCompletionTestGenerated.java +++ b/idea/idea-completion/tests/org/jetbrains/kotlin/idea/completion/test/MultiFileJvmBasicCompletionTestGenerated.java @@ -359,6 +359,11 @@ public class MultiFileJvmBasicCompletionTestGenerated extends AbstractMultiFileJ runTest("idea/idea-completion/testData/basic/multifile/StaticMembersOfNotImportedClassNameConflict/"); } + @TestMetadata("SuspensionPointInMonitor") + public void testSuspensionPointInMonitor() throws Exception { + runTest("idea/idea-completion/testData/basic/multifile/SuspensionPointInMonitor/"); + } + @TestMetadata("SyntheticExtensionDeprecated") public void testSyntheticExtensionDeprecated() throws Exception { runTest("idea/idea-completion/testData/basic/multifile/SyntheticExtensionDeprecated/");