From 887e4276ee5bbcd0545cd8cbddd30bf0efa9574f Mon Sep 17 00:00:00 2001 From: Andrey Breslav Date: Tue, 17 Sep 2013 18:49:18 +0400 Subject: [PATCH] getDiagnostics() in BindingContext returns Diagnostics rather than List --- .../messages/AnalyzerWithCompilerReport.java | 2 +- .../jet/checkers/CheckerTestUtil.java | 2 +- .../jet/lang/resolve/BindingContext.java | 7 ++- .../jet/lang/resolve/BindingTraceContext.java | 14 +++--- .../lang/resolve/DelegatingBindingTrace.java | 6 +-- .../jet/lang/resolve/Diagnostics.java | 43 +++++++++++++++++++ .../jet/lang/resolve/SimpleDiagnostics.java | 38 ++++++++++++++++ .../jetbrains/jet/lang/resolve/TraceUtil.java | 2 +- .../LockBasedLazyResolveStorageManager.java | 3 +- .../tests/org/jetbrains/jet/JetTestUtils.java | 5 ++- .../jet/plugin/highlighter/IdeRenderers.java | 2 +- .../quickfix/MapPlatformClassToKotlinFix.java | 2 +- .../highlighter/DiagnosticMessageTest.java | 2 +- .../highlighter/NoErrorsInStdlibTest.kt | 2 +- .../plugin/quickfix/QuickFixActionsUtils.java | 2 +- 15 files changed, 108 insertions(+), 24 deletions(-) create mode 100644 compiler/frontend/src/org/jetbrains/jet/lang/resolve/Diagnostics.java create mode 100644 compiler/frontend/src/org/jetbrains/jet/lang/resolve/SimpleDiagnostics.java diff --git a/compiler/cli/src/org/jetbrains/jet/cli/common/messages/AnalyzerWithCompilerReport.java b/compiler/cli/src/org/jetbrains/jet/cli/common/messages/AnalyzerWithCompilerReport.java index 681d6810e01..6aaee69142d 100644 --- a/compiler/cli/src/org/jetbrains/jet/cli/common/messages/AnalyzerWithCompilerReport.java +++ b/compiler/cli/src/org/jetbrains/jet/cli/common/messages/AnalyzerWithCompilerReport.java @@ -153,7 +153,7 @@ public final class AnalyzerWithCompilerReport { public static boolean reportDiagnostics(@NotNull BindingContext bindingContext, @NotNull MessageCollector messageCollector) { boolean hasErrors = false; - for (Diagnostic diagnostic : sortedDiagnostics(bindingContext.getDiagnostics())) { + for (Diagnostic diagnostic : sortedDiagnostics(bindingContext.getDiagnostics().all())) { hasErrors |= reportDiagnostic(diagnostic, messageCollector); } return hasErrors; diff --git a/compiler/frontend/src/org/jetbrains/jet/checkers/CheckerTestUtil.java b/compiler/frontend/src/org/jetbrains/jet/checkers/CheckerTestUtil.java index 996883ed1dd..aca6b961cc9 100644 --- a/compiler/frontend/src/org/jetbrains/jet/checkers/CheckerTestUtil.java +++ b/compiler/frontend/src/org/jetbrains/jet/checkers/CheckerTestUtil.java @@ -70,7 +70,7 @@ public class CheckerTestUtil { public static List getDiagnosticsIncludingSyntaxErrors(BindingContext bindingContext, final PsiElement root) { ArrayList diagnostics = new ArrayList(); - diagnostics.addAll(Collections2.filter(bindingContext.getDiagnostics(), + diagnostics.addAll(Collections2.filter(bindingContext.getDiagnostics().all(), new Predicate() { @Override public boolean apply(Diagnostic diagnostic) { diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/BindingContext.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/BindingContext.java index 4b3291d98e2..3279fa3b709 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/BindingContext.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/BindingContext.java @@ -23,7 +23,6 @@ import org.jetbrains.annotations.Nullable; import org.jetbrains.annotations.TestOnly; import org.jetbrains.jet.lang.descriptors.*; import org.jetbrains.jet.lang.descriptors.annotations.AnnotationDescriptor; -import org.jetbrains.jet.lang.diagnostics.Diagnostic; import org.jetbrains.jet.lang.psi.*; import org.jetbrains.jet.lang.resolve.calls.autocasts.DataFlowInfo; import org.jetbrains.jet.lang.resolve.calls.inference.ConstraintSystemCompleter; @@ -46,8 +45,8 @@ public interface BindingContext { BindingContext EMPTY = new BindingContext() { @NotNull @Override - public Collection getDiagnostics() { - return Collections.emptyList(); + public Diagnostics getDiagnostics() { + return Diagnostics.EMPTY; } @Override @@ -265,7 +264,7 @@ public interface BindingContext { Void _static_initializer = BasicWritableSlice.initSliceDebugNames(BindingContext.class); @NotNull - Collection getDiagnostics(); + Diagnostics getDiagnostics(); @Nullable V get(ReadOnlySlice slice, K key); diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/BindingTraceContext.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/BindingTraceContext.java index 1640cb06eb0..1d5401bd010 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/BindingTraceContext.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/BindingTraceContext.java @@ -27,7 +27,8 @@ import java.util.Collection; import java.util.List; public class BindingTraceContext implements BindingTrace { - private final List diagnostics = Lists.newArrayList(); + private final List diagnosticList = Lists.newArrayList(); + private final Diagnostics diagnostics; // These flags are used for debugging of "Rewrite at slice..." exceptions /* package */ final static boolean TRACK_REWRITES = false; @@ -39,7 +40,7 @@ public class BindingTraceContext implements BindingTrace { @NotNull @Override - public Collection getDiagnostics() { + public Diagnostics getDiagnostics() { return diagnostics; } @@ -64,12 +65,13 @@ public class BindingTraceContext implements BindingTrace { public BindingTraceContext() { //noinspection ConstantConditions - this.map = TRACK_REWRITES ? new TrackingSlicedMap(TRACK_WITH_STACK_TRACES) : SlicedMapImpl.create(); + this(TRACK_REWRITES ? new TrackingSlicedMap(TRACK_WITH_STACK_TRACES) : SlicedMapImpl.create()); } - private BindingTraceContext(MutableSlicedMap map) { + private BindingTraceContext(@NotNull MutableSlicedMap map) { this.map = map; + this.diagnostics = new SimpleDiagnostics(diagnosticList); } @TestOnly @@ -79,11 +81,11 @@ public class BindingTraceContext implements BindingTrace { @Override public void report(@NotNull Diagnostic diagnostic) { - diagnostics.add(diagnostic); + diagnosticList.add(diagnostic); } public void clearDiagnostics() { - diagnostics.clear(); + diagnosticList.clear(); } @Override diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DelegatingBindingTrace.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DelegatingBindingTrace.java index 18976171b45..0caa311ebe3 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DelegatingBindingTrace.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DelegatingBindingTrace.java @@ -40,10 +40,10 @@ public class DelegatingBindingTrace implements BindingTrace { private final BindingContext bindingContext = new BindingContext() { @NotNull @Override - public Collection getDiagnostics() { + public Diagnostics getDiagnostics() { ArrayList mergedDiagnostics = new ArrayList(diagnostics); - mergedDiagnostics.addAll(parentContext.getDiagnostics()); - return mergedDiagnostics; + mergedDiagnostics.addAll(parentContext.getDiagnostics().noSuppression().all()); + return new SimpleDiagnostics(mergedDiagnostics); } @Override diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/Diagnostics.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/Diagnostics.java new file mode 100644 index 00000000000..f8037bc81fb --- /dev/null +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/Diagnostics.java @@ -0,0 +1,43 @@ +package org.jetbrains.jet.lang.resolve; + +import org.jetbrains.annotations.NotNull; +import org.jetbrains.jet.lang.diagnostics.Diagnostic; + +import java.util.Collection; +import java.util.Collections; +import java.util.Iterator; + +public interface Diagnostics extends Iterable { + @NotNull + Collection all(); + + boolean isEmpty(); + + @NotNull + Diagnostics noSuppression(); + + Diagnostics EMPTY = new Diagnostics() { + @NotNull + @Override + public Collection all() { + return Collections.emptyList(); + } + + @Override + public boolean isEmpty() { + return true; + } + + @NotNull + @Override + public Diagnostics noSuppression() { + return this; + } + + @NotNull + @Override + public Iterator iterator() { + return all().iterator(); + } + }; +} diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/SimpleDiagnostics.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/SimpleDiagnostics.java new file mode 100644 index 00000000000..c45b3305263 --- /dev/null +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/SimpleDiagnostics.java @@ -0,0 +1,38 @@ +package org.jetbrains.jet.lang.resolve; + +import org.jetbrains.annotations.NotNull; +import org.jetbrains.jet.lang.diagnostics.Diagnostic; + +import java.util.Collection; +import java.util.Iterator; + +public class SimpleDiagnostics implements Diagnostics { + private final Collection diagnostics; + + public SimpleDiagnostics(@NotNull Collection diagnostics) { + this.diagnostics = diagnostics; + } + + @NotNull + @Override + public Collection all() { + return diagnostics; + } + + @NotNull + @Override + public Diagnostics noSuppression() { + return this; + } + + @NotNull + @Override + public Iterator iterator() { + return all().iterator(); + } + + @Override + public boolean isEmpty() { + return all().isEmpty(); + } +} diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/TraceUtil.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/TraceUtil.java index 0ee826ab1ad..097bce4303a 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/TraceUtil.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/TraceUtil.java @@ -64,7 +64,7 @@ public class TraceUtil { public final static BindingContext BINDING_CONTEXT_STUB = new BindingContext() { @NotNull @Override - public Collection getDiagnostics() { + public Diagnostics getDiagnostics() { throw new IllegalStateException(); } diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/storage/LockBasedLazyResolveStorageManager.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/storage/LockBasedLazyResolveStorageManager.java index 1c4a8b6e582..515adee7111 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/storage/LockBasedLazyResolveStorageManager.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/lazy/storage/LockBasedLazyResolveStorageManager.java @@ -23,6 +23,7 @@ import org.jetbrains.annotations.TestOnly; import org.jetbrains.jet.lang.diagnostics.Diagnostic; import org.jetbrains.jet.lang.resolve.BindingContext; import org.jetbrains.jet.lang.resolve.BindingTrace; +import org.jetbrains.jet.lang.resolve.Diagnostics; import org.jetbrains.jet.util.slicedmap.ReadOnlySlice; import org.jetbrains.jet.util.slicedmap.WritableSlice; @@ -48,7 +49,7 @@ public class LockBasedLazyResolveStorageManager extends LockBasedStorageManager @NotNull @Override - public Collection getDiagnostics() { + public Diagnostics getDiagnostics() { synchronized (lock) { return context.getDiagnostics(); } diff --git a/compiler/tests/org/jetbrains/jet/JetTestUtils.java b/compiler/tests/org/jetbrains/jet/JetTestUtils.java index 6856176cac9..a1eb75631a3 100644 --- a/compiler/tests/org/jetbrains/jet/JetTestUtils.java +++ b/compiler/tests/org/jetbrains/jet/JetTestUtils.java @@ -52,6 +52,7 @@ import org.jetbrains.jet.lang.diagnostics.Severity; import org.jetbrains.jet.lang.diagnostics.rendering.DefaultErrorMessages; import org.jetbrains.jet.lang.psi.JetFile; import org.jetbrains.jet.lang.psi.JetPsiFactory; +import org.jetbrains.jet.lang.psi.JetPsiUtil; import org.jetbrains.jet.lang.resolve.*; import org.jetbrains.jet.lang.resolve.java.AnalyzerFacadeForJVM; import org.jetbrains.jet.lang.resolve.lazy.LazyResolveTestUtil; @@ -101,7 +102,7 @@ public class JetTestUtils { @NotNull @Override - public Collection getDiagnostics() { + public Diagnostics getDiagnostics() { throw new UnsupportedOperationException(); // TODO } @@ -160,7 +161,7 @@ public class JetTestUtils { return new BindingContext() { @NotNull @Override - public Collection getDiagnostics() { + public Diagnostics getDiagnostics() { throw new UnsupportedOperationException(); } diff --git a/idea/src/org/jetbrains/jet/plugin/highlighter/IdeRenderers.java b/idea/src/org/jetbrains/jet/plugin/highlighter/IdeRenderers.java index 5a41c6be13d..5fd65b7b40f 100644 --- a/idea/src/org/jetbrains/jet/plugin/highlighter/IdeRenderers.java +++ b/idea/src/org/jetbrains/jet/plugin/highlighter/IdeRenderers.java @@ -103,7 +103,7 @@ public class IdeRenderers { private Set getParametersToHighlight(ResolvedCall call) { Set parameters = new HashSet(); if (call instanceof ResolvedCallImpl) { - Collection diagnostics = ((ResolvedCallImpl)call).getTrace().getBindingContext().getDiagnostics(); + Iterable diagnostics = ((ResolvedCallImpl)call).getTrace().getBindingContext().getDiagnostics(); for (Diagnostic diagnostic : diagnostics) { if (diagnostic.getFactory() == Errors.TOO_MANY_ARGUMENTS) { parameters.add(null); diff --git a/idea/src/org/jetbrains/jet/plugin/quickfix/MapPlatformClassToKotlinFix.java b/idea/src/org/jetbrains/jet/plugin/quickfix/MapPlatformClassToKotlinFix.java index efbf3cf8749..f598381bd8c 100644 --- a/idea/src/org/jetbrains/jet/plugin/quickfix/MapPlatformClassToKotlinFix.java +++ b/idea/src/org/jetbrains/jet/plugin/quickfix/MapPlatformClassToKotlinFix.java @@ -78,7 +78,7 @@ public class MapPlatformClassToKotlinFix extends JetIntentionAction diagnostics = context.getDiagnostics(); + Iterable diagnostics = context.getDiagnostics(); List imports = new ArrayList(); List usages = new ArrayList(); diff --git a/idea/tests/org/jetbrains/jet/plugin/highlighter/DiagnosticMessageTest.java b/idea/tests/org/jetbrains/jet/plugin/highlighter/DiagnosticMessageTest.java index e46008d80ac..640bc054dd6 100644 --- a/idea/tests/org/jetbrains/jet/plugin/highlighter/DiagnosticMessageTest.java +++ b/idea/tests/org/jetbrains/jet/plugin/highlighter/DiagnosticMessageTest.java @@ -56,7 +56,7 @@ public class DiagnosticMessageTest extends JetLiteFixture { BindingContext bindingContext = analyzeExhaust.getBindingContext(); final Set factoriesSet = Sets.newHashSet(diagnosticFactories); - List diagnostics = ContainerUtil.filter(bindingContext.getDiagnostics(), new Condition() { + List diagnostics = ContainerUtil.filter(bindingContext.getDiagnostics().all(), new Condition() { @Override public boolean value(Diagnostic diagnostic) { return factoriesSet.contains(diagnostic.getFactory()); diff --git a/idea/tests/org/jetbrains/jet/plugin/highlighter/NoErrorsInStdlibTest.kt b/idea/tests/org/jetbrains/jet/plugin/highlighter/NoErrorsInStdlibTest.kt index a8bbbbb1488..9cb63ed05e2 100644 --- a/idea/tests/org/jetbrains/jet/plugin/highlighter/NoErrorsInStdlibTest.kt +++ b/idea/tests/org/jetbrains/jet/plugin/highlighter/NoErrorsInStdlibTest.kt @@ -47,7 +47,7 @@ public class NoErrorsInStdlibTest: LightCodeInsightFixtureTestCase() { val psiFile = psiManager.findFile(file) if (psiFile is JetFile) { var bindingContext = AnalyzerFacadeWithCache.analyzeFileWithCache(psiFile).getBindingContext() - val errors = bindingContext.getDiagnostics().filter { it.getSeverity() == Severity.ERROR } + val errors = bindingContext.getDiagnostics().all().filter { it.getSeverity() == Severity.ERROR } if (!errors.isEmpty()) { System.err.println("${psiFile.getName()}: ${errors.size()} errors") diff --git a/idea/tests/org/jetbrains/jet/plugin/quickfix/QuickFixActionsUtils.java b/idea/tests/org/jetbrains/jet/plugin/quickfix/QuickFixActionsUtils.java index 5b9c67818ab..38d000ff3eb 100644 --- a/idea/tests/org/jetbrains/jet/plugin/quickfix/QuickFixActionsUtils.java +++ b/idea/tests/org/jetbrains/jet/plugin/quickfix/QuickFixActionsUtils.java @@ -47,7 +47,7 @@ public class QuickFixActionsUtils { AnalyzeExhaust exhaust = AnalyzerFacadeWithCache.analyzeFileWithCache(file); - Collection diagnostics = exhaust.getBindingContext().getDiagnostics(); + Collection diagnostics = exhaust.getBindingContext().getDiagnostics().all(); Collection errorDiagnostics = Collections2.filter(diagnostics, new Predicate() { @Override public boolean apply(@Nullable Diagnostic diagnostic) {