Fix INRE from KotlinQuickDocumentationProvider (KT-30058, EA-137533)
Show a warning like CtrlMouseHandler does. Fixed in 191 branch in CtrlMouseHandler.updateOnPsiChanges(). https://github.com/JetBrains/intellij-community/commit/b116dcaf994279d0f5fd78edd814013276c0adab #KT-30058 Fixed
This commit is contained in:
@@ -24,6 +24,8 @@ import com.intellij.lang.documentation.DocumentationMarkup.*
|
|||||||
import com.intellij.lang.java.JavaDocumentationProvider
|
import com.intellij.lang.java.JavaDocumentationProvider
|
||||||
import com.intellij.openapi.diagnostic.Logger
|
import com.intellij.openapi.diagnostic.Logger
|
||||||
import com.intellij.openapi.editor.Editor
|
import com.intellij.openapi.editor.Editor
|
||||||
|
import com.intellij.openapi.project.DumbService
|
||||||
|
import com.intellij.openapi.project.IndexNotReadyException
|
||||||
import com.intellij.psi.PsiElement
|
import com.intellij.psi.PsiElement
|
||||||
import com.intellij.psi.PsiFile
|
import com.intellij.psi.PsiFile
|
||||||
import com.intellij.psi.PsiManager
|
import com.intellij.psi.PsiManager
|
||||||
@@ -248,11 +250,22 @@ class KotlinQuickDocumentationProvider : AbstractDocumentationProvider() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun getText(element: PsiElement, originalElement: PsiElement?, quickNavigation: Boolean): String? {
|
private fun getText(element: PsiElement, originalElement: PsiElement?, quickNavigation: Boolean): String? {
|
||||||
|
// INRE is already fixed in 191 in CtrlMouseHandler.updateOnPsiChanges(), so after abandoning 183 branch try-catch can be removed.
|
||||||
|
// BUNCH: 183
|
||||||
|
return try {
|
||||||
|
getTextImpl(element, originalElement, quickNavigation)
|
||||||
|
} catch (_: IndexNotReadyException) {
|
||||||
|
DumbService.getInstance(element.project).showDumbModeNotification("Element information is not available during index update")
|
||||||
|
null
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun getTextImpl(element: PsiElement, originalElement: PsiElement?, quickNavigation: Boolean): String? {
|
||||||
if (element is PsiWhiteSpace) {
|
if (element is PsiWhiteSpace) {
|
||||||
val itElement = findElementWithText(originalElement, "it")
|
val itElement = findElementWithText(originalElement, "it")
|
||||||
val itReference = itElement?.getParentOfType<KtNameReferenceExpression>(false)
|
val itReference = itElement?.getParentOfType<KtNameReferenceExpression>(false)
|
||||||
if (itReference != null) {
|
if (itReference != null) {
|
||||||
return getText(itReference, originalElement, quickNavigation)
|
return getTextImpl(itReference, originalElement, quickNavigation)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -261,7 +274,7 @@ class KotlinQuickDocumentationProvider : AbstractDocumentationProvider() {
|
|||||||
if (declaration is KtCallableDeclaration && declaration.receiverTypeReference == element) {
|
if (declaration is KtCallableDeclaration && declaration.receiverTypeReference == element) {
|
||||||
val thisElement = findElementWithText(originalElement, "this")
|
val thisElement = findElementWithText(originalElement, "this")
|
||||||
if (thisElement != null) {
|
if (thisElement != null) {
|
||||||
return getText(declaration, originalElement, quickNavigation)
|
return getTextImpl(declaration, originalElement, quickNavigation)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user