From dd0e296af17ab9d2b8155b6cc3f5d11724056e28 Mon Sep 17 00:00:00 2001 From: Vladimir Dolzhenko Date: Mon, 19 Aug 2019 16:38:01 +0200 Subject: [PATCH] Use KotlinExceptionWithAttachments for ToFromOriginalFileMapper and MainFunctionDetector --- .../jetbrains/kotlin/idea/MainFunctionDetector.kt | 4 +++- .../idea/completion/ToFromOriginalFileMapper.kt | 12 +++++++++++- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/compiler/frontend/src/org/jetbrains/kotlin/idea/MainFunctionDetector.kt b/compiler/frontend/src/org/jetbrains/kotlin/idea/MainFunctionDetector.kt index 7916fc118a3..b10a03c598c 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/idea/MainFunctionDetector.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/idea/MainFunctionDetector.kt @@ -30,6 +30,7 @@ import org.jetbrains.kotlin.resolve.annotations.hasJvmStaticAnnotation import org.jetbrains.kotlin.resolve.descriptorUtil.module import org.jetbrains.kotlin.resolve.scopes.MemberScope import org.jetbrains.kotlin.types.Variance +import org.jetbrains.kotlin.utils.KotlinExceptionWithAttachments class MainFunctionDetector { private val getFunctionDescriptor: (KtNamedFunction) -> FunctionDescriptor? @@ -39,7 +40,8 @@ class MainFunctionDetector { constructor(bindingContext: BindingContext, languageVersionSettings: LanguageVersionSettings) { this.getFunctionDescriptor = { function -> bindingContext.get(BindingContext.FUNCTION, function) - ?: throw IllegalStateException("No descriptor resolved for " + function + " " + function.text) + ?: throw throw KotlinExceptionWithAttachments("No descriptor resolved for $function") + .withAttachment("function.text", function.text) } this.languageVersionSettings = languageVersionSettings } diff --git a/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/ToFromOriginalFileMapper.kt b/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/ToFromOriginalFileMapper.kt index a009cc73d58..6dcf81e2361 100644 --- a/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/ToFromOriginalFileMapper.kt +++ b/idea/idea-completion/src/org/jetbrains/kotlin/idea/completion/ToFromOriginalFileMapper.kt @@ -21,6 +21,7 @@ import com.intellij.psi.PsiElement import com.intellij.psi.util.PsiTreeUtil import org.jetbrains.kotlin.psi.KtFile import org.jetbrains.kotlin.psi.psiUtil.startOffset +import org.jetbrains.kotlin.utils.KotlinExceptionWithAttachments import kotlin.math.min class ToFromOriginalFileMapper private constructor( @@ -46,7 +47,16 @@ class ToFromOriginalFileMapper private constructor( init { val originalText = originalFile.text val syntheticText = syntheticFile.text - assert(originalText.subSequence(0, completionOffset) == syntheticText.subSequence(0, completionOffset)) + val originalSubSequence = originalText.subSequence(0, completionOffset) + val syntheticSubSequence = syntheticText.subSequence(0, completionOffset) + if (originalSubSequence != syntheticSubSequence) { + throw KotlinExceptionWithAttachments( + "original subText [len: ${originalSubSequence.length}]" + + " does not match synthetic subText [len: ${syntheticSubSequence.length}]" + ) + .withAttachment("original subText", originalSubSequence.toString()) + .withAttachment("synthetic subText", syntheticSubSequence.toString()) + } syntheticLength = syntheticText.length originalLength = originalText.length