Add DiagnosticSink.setCallbackIfNotSet and deprecate DiagnosticSink.setCallback

#EA-258953 Fixed
This commit is contained in:
Vladimir Dolzhenko
2021-10-15 12:33:15 +02:00
committed by TeamCityServer
parent 3f8fa3149b
commit 714773fdf8
5 changed files with 37 additions and 12 deletions
@@ -59,7 +59,18 @@ public interface DiagnosticSink {
void report(@NotNull Diagnostic diagnostic);
default void setCallback(@NotNull DiagnosticsCallback callback) { }
/**
* use {@link #setCallbackIfNotSet(DiagnosticsCallback)} instead
* @param callback
*/
@Deprecated
default void setCallback(@NotNull DiagnosticsCallback callback) {
setCallbackIfNotSet(callback);
}
default boolean setCallbackIfNotSet(@NotNull DiagnosticsCallback callback) {
return false;
}
default void resetCallback() { }
@@ -157,11 +157,15 @@ open class DelegatingBindingTrace(
mutableDiagnostics.report(diagnostic)
}
@Volatile
protected var diagnosticsCallback: DiagnosticSink.DiagnosticsCallback? = null
override fun setCallback(callback: DiagnosticSink.DiagnosticsCallback) {
diagnosticsCallback = callback
mutableDiagnostics?.setCallback(callback)
override fun setCallbackIfNotSet(callback: DiagnosticSink.DiagnosticsCallback): Boolean {
val callbackIfNotSet = mutableDiagnostics?.setCallbackIfNotSet(callback) ?: false
if (callbackIfNotSet) {
diagnosticsCallback = callback
}
return callbackIfNotSet
}
override fun resetCallback() {
@@ -38,7 +38,12 @@ interface Diagnostics : GenericDiagnostics<Diagnostic> {
fun noSuppression(): Diagnostics
fun setCallback(callback: DiagnosticsCallback) {}
fun setCallback(callback: DiagnosticsCallback) {
setCallbackIfNotSet(callback)
}
fun setCallbackIfNotSet(callback: DiagnosticsCallback): Boolean = false
fun resetCallback() {}
companion object {
@@ -79,6 +79,11 @@ public class DiagnosticsWithSuppression implements Diagnostics {
}
@Override
public boolean setCallbackIfNotSet(@NotNull DiagnosticSink.DiagnosticsCallback callback) {
return false;
}
@Override
public void resetCallback() {
@@ -32,6 +32,7 @@ class MutableDiagnosticsWithSuppression(
private val delegateDiagnostics: Diagnostics,
) : Diagnostics {
private val diagnosticList = ArrayList<Diagnostic>()
@Volatile
private var diagnosticsCallback: DiagnosticSink.DiagnosticsCallback? = null
//NOTE: CachedValuesManager is not used because it requires Project passed to this object
@@ -48,13 +49,12 @@ class MutableDiagnosticsWithSuppression(
override fun forElement(psiElement: PsiElement) = readonlyView().forElement(psiElement)
override fun noSuppression() = readonlyView().noSuppression()
override fun setCallback(callback: DiagnosticSink.DiagnosticsCallback) {
diagnosticsCallback?.let {
Logger.getInstance(MutableDiagnosticsWithSuppression::class.java).error("diagnostic callback has been already registered")
return
}
diagnosticsCallback = callback
delegateDiagnostics.setCallback(callback)
override fun setCallbackIfNotSet(callback: DiagnosticSink.DiagnosticsCallback): Boolean {
return if (diagnosticsCallback == null) {
diagnosticsCallback = callback
delegateDiagnostics.setCallbackIfNotSet(callback)
true
} else false
}
override fun resetCallback() {