Reset extensions cache in DiagnosticsWithSuppression when Application changed(that hepens in tests).

This commit is contained in:
Zalim Bashorov
2014-11-06 22:28:08 +03:00
parent b3defdbf90
commit ab5d34c373
@@ -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));
}