Reset extensions cache in DiagnosticsWithSuppression when Application changed(that hepens in tests).
This commit is contained in:
+34
-4
@@ -17,6 +17,8 @@
|
||||
package org.jetbrains.jet.lang.resolve;
|
||||
|
||||
import com.google.common.collect.ImmutableSet;
|
||||
import com.intellij.openapi.application.Application;
|
||||
import com.intellij.openapi.application.ApplicationManager;
|
||||
import com.intellij.openapi.diagnostic.Logger;
|
||||
import com.intellij.openapi.extensions.ExtensionPointName;
|
||||
import com.intellij.openapi.extensions.Extensions;
|
||||
@@ -58,8 +60,36 @@ public class DiagnosticsWithSuppression implements Diagnostics {
|
||||
|
||||
private static final Logger LOG = Logger.getInstance(DiagnosticsWithSuppression.class);
|
||||
|
||||
private static final SuppressStringProvider[] ADDITIONAL_SUPPRESS_STRING_PROVIDERS = Extensions.getExtensions(SuppressStringProvider.EP_NAME);
|
||||
private static final DiagnosticSuppressor[] DIAGNOSTIC_SUPPRESSORS = Extensions.getExtensions(DiagnosticSuppressor.EP_NAME);
|
||||
private static Application app = null;
|
||||
private static SuppressStringProvider[] ADDITIONAL_SUPPRESS_STRING_PROVIDERS = null;
|
||||
private static DiagnosticSuppressor[] DIAGNOSTIC_SUPPRESSORS = null;
|
||||
|
||||
static {
|
||||
resetExtensionsIfNeed();
|
||||
}
|
||||
|
||||
private static SuppressStringProvider[] getAdditionalSuppressStringProviders() {
|
||||
resetExtensionsIfNeed();
|
||||
return ADDITIONAL_SUPPRESS_STRING_PROVIDERS;
|
||||
}
|
||||
|
||||
private static DiagnosticSuppressor[] getDiagnosticSuppressors() {
|
||||
resetExtensionsIfNeed();
|
||||
return DIAGNOSTIC_SUPPRESSORS;
|
||||
}
|
||||
|
||||
// We need to update extensions in tests because they may be different for different tests.
|
||||
private static void resetExtensionsIfNeed() {
|
||||
if (app != null && !app.isUnitTestMode()) return;
|
||||
|
||||
Application newApp = ApplicationManager.getApplication();
|
||||
if (app == newApp) return;
|
||||
|
||||
app = newApp;
|
||||
|
||||
ADDITIONAL_SUPPRESS_STRING_PROVIDERS = Extensions.getExtensions(SuppressStringProvider.EP_NAME);
|
||||
DIAGNOSTIC_SUPPRESSORS = Extensions.getExtensions(DiagnosticSuppressor.EP_NAME);
|
||||
}
|
||||
|
||||
private final BindingContext context;
|
||||
private final Collection<Diagnostic> diagnostics;
|
||||
@@ -112,7 +142,7 @@ public class DiagnosticsWithSuppression implements Diagnostics {
|
||||
private boolean isSuppressed(@NotNull Diagnostic diagnostic) {
|
||||
PsiElement element = diagnostic.getPsiElement();
|
||||
|
||||
for (DiagnosticSuppressor suppressor : DIAGNOSTIC_SUPPRESSORS) {
|
||||
for (DiagnosticSuppressor suppressor : getDiagnosticSuppressors()) {
|
||||
if (suppressor.isSuppressed(diagnostic)) return true;
|
||||
}
|
||||
|
||||
@@ -198,7 +228,7 @@ public class DiagnosticsWithSuppression implements Diagnostics {
|
||||
AnnotationDescriptor annotationDescriptor = context.get(BindingContext.ANNOTATION, annotationEntry);
|
||||
if (annotationDescriptor == null) continue;
|
||||
|
||||
for (SuppressStringProvider suppressStringProvider : ADDITIONAL_SUPPRESS_STRING_PROVIDERS) {
|
||||
for (SuppressStringProvider suppressStringProvider : getAdditionalSuppressStringProviders()) {
|
||||
builder.addAll(suppressStringProvider.get(annotationDescriptor));
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user