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); 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() { } default void resetCallback() { }
@@ -157,11 +157,15 @@ open class DelegatingBindingTrace(
mutableDiagnostics.report(diagnostic) mutableDiagnostics.report(diagnostic)
} }
@Volatile
protected var diagnosticsCallback: DiagnosticSink.DiagnosticsCallback? = null protected var diagnosticsCallback: DiagnosticSink.DiagnosticsCallback? = null
override fun setCallback(callback: DiagnosticSink.DiagnosticsCallback) { override fun setCallbackIfNotSet(callback: DiagnosticSink.DiagnosticsCallback): Boolean {
diagnosticsCallback = callback val callbackIfNotSet = mutableDiagnostics?.setCallbackIfNotSet(callback) ?: false
mutableDiagnostics?.setCallback(callback) if (callbackIfNotSet) {
diagnosticsCallback = callback
}
return callbackIfNotSet
} }
override fun resetCallback() { override fun resetCallback() {
@@ -38,7 +38,12 @@ interface Diagnostics : GenericDiagnostics<Diagnostic> {
fun noSuppression(): Diagnostics fun noSuppression(): Diagnostics
fun setCallback(callback: DiagnosticsCallback) {} fun setCallback(callback: DiagnosticsCallback) {
setCallbackIfNotSet(callback)
}
fun setCallbackIfNotSet(callback: DiagnosticsCallback): Boolean = false
fun resetCallback() {} fun resetCallback() {}
companion object { companion object {
@@ -79,6 +79,11 @@ public class DiagnosticsWithSuppression implements Diagnostics {
} }
@Override
public boolean setCallbackIfNotSet(@NotNull DiagnosticSink.DiagnosticsCallback callback) {
return false;
}
@Override @Override
public void resetCallback() { public void resetCallback() {
@@ -32,6 +32,7 @@ class MutableDiagnosticsWithSuppression(
private val delegateDiagnostics: Diagnostics, private val delegateDiagnostics: Diagnostics,
) : Diagnostics { ) : Diagnostics {
private val diagnosticList = ArrayList<Diagnostic>() private val diagnosticList = ArrayList<Diagnostic>()
@Volatile
private var diagnosticsCallback: DiagnosticSink.DiagnosticsCallback? = null private var diagnosticsCallback: DiagnosticSink.DiagnosticsCallback? = null
//NOTE: CachedValuesManager is not used because it requires Project passed to this object //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 forElement(psiElement: PsiElement) = readonlyView().forElement(psiElement)
override fun noSuppression() = readonlyView().noSuppression() override fun noSuppression() = readonlyView().noSuppression()
override fun setCallback(callback: DiagnosticSink.DiagnosticsCallback) { override fun setCallbackIfNotSet(callback: DiagnosticSink.DiagnosticsCallback): Boolean {
diagnosticsCallback?.let { return if (diagnosticsCallback == null) {
Logger.getInstance(MutableDiagnosticsWithSuppression::class.java).error("diagnostic callback has been already registered") diagnosticsCallback = callback
return delegateDiagnostics.setCallbackIfNotSet(callback)
} true
diagnosticsCallback = callback } else false
delegateDiagnostics.setCallback(callback)
} }
override fun resetCallback() { override fun resetCallback() {