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