Filter KtAnnotated on-the-fly diagnostic elements

Relates to #KTIJ-1760
Relates to #KT-45254
This commit is contained in:
Vladimir Dolzhenko
2021-03-11 08:43:36 +00:00
committed by Space
parent cba63f2c12
commit fbe18164b4
@@ -23,7 +23,7 @@ import com.intellij.util.CachedValueImpl
import org.jetbrains.annotations.TestOnly
import org.jetbrains.kotlin.diagnostics.Diagnostic
import org.jetbrains.kotlin.diagnostics.DiagnosticSink
import org.jetbrains.kotlin.psi.KtAnnotationEntry
import org.jetbrains.kotlin.psi.KtAnnotated
import org.jetbrains.kotlin.psi.KtStubbedPsiUtil
class MutableDiagnosticsWithSuppression(
@@ -65,18 +65,18 @@ class MutableDiagnosticsWithSuppression(
}
fun report(diagnostic: Diagnostic) {
onFlyDiagnosticsCallback(diagnostic)?.callback(diagnostic)
onTheFlyDiagnosticsCallback(diagnostic)?.callback(diagnostic)
diagnosticList.add(diagnostic)
modificationTracker.incModificationCount()
}
private fun onFlyDiagnosticsCallback(diagnostic: Diagnostic): DiagnosticSink.DiagnosticsCallback? =
private fun onTheFlyDiagnosticsCallback(diagnostic: Diagnostic): DiagnosticSink.DiagnosticsCallback? =
diagnosticsCallback.takeIf {
diagnosticsCallback != null &&
// Due to a potential recursion in filter.invoke (via LazyAnnotations) do not try to report
// diagnostic on fly if it happened in annotations
KtStubbedPsiUtil.getPsiOrStubParent(diagnostic.psiElement, KtAnnotationEntry::class.java, false) == null &&
// diagnostic on-the-fly if it happened in annotations, and do not report any potentially suppressed elements
KtStubbedPsiUtil.getPsiOrStubParent(diagnostic.psiElement, KtAnnotated::class.java, false) == null &&
suppressCache.filter.invoke(diagnostic)
}