getDiagnostics() in BindingContext returns Diagnostics rather than List<Diagnostic>

This commit is contained in:
Andrey Breslav
2013-09-17 18:49:18 +04:00
parent b98d05bd73
commit 887e4276ee
15 changed files with 108 additions and 24 deletions
@@ -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;
@@ -70,7 +70,7 @@ public class CheckerTestUtil {
public static List<Diagnostic> getDiagnosticsIncludingSyntaxErrors(BindingContext bindingContext, final PsiElement root) {
ArrayList<Diagnostic> diagnostics = new ArrayList<Diagnostic>();
diagnostics.addAll(Collections2.filter(bindingContext.getDiagnostics(),
diagnostics.addAll(Collections2.filter(bindingContext.getDiagnostics().all(),
new Predicate<Diagnostic>() {
@Override
public boolean apply(Diagnostic diagnostic) {
@@ -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<Diagnostic> 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<Diagnostic> getDiagnostics();
Diagnostics getDiagnostics();
@Nullable
<K, V> V get(ReadOnlySlice<K, V> slice, K key);
@@ -27,7 +27,8 @@ import java.util.Collection;
import java.util.List;
public class BindingTraceContext implements BindingTrace {
private final List<Diagnostic> diagnostics = Lists.newArrayList();
private final List<Diagnostic> 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<Diagnostic> 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
@@ -40,10 +40,10 @@ public class DelegatingBindingTrace implements BindingTrace {
private final BindingContext bindingContext = new BindingContext() {
@NotNull
@Override
public Collection<Diagnostic> getDiagnostics() {
public Diagnostics getDiagnostics() {
ArrayList<Diagnostic> mergedDiagnostics = new ArrayList<Diagnostic>(diagnostics);
mergedDiagnostics.addAll(parentContext.getDiagnostics());
return mergedDiagnostics;
mergedDiagnostics.addAll(parentContext.getDiagnostics().noSuppression().all());
return new SimpleDiagnostics(mergedDiagnostics);
}
@Override
@@ -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<Diagnostic> {
@NotNull
Collection<Diagnostic> all();
boolean isEmpty();
@NotNull
Diagnostics noSuppression();
Diagnostics EMPTY = new Diagnostics() {
@NotNull
@Override
public Collection<Diagnostic> all() {
return Collections.emptyList();
}
@Override
public boolean isEmpty() {
return true;
}
@NotNull
@Override
public Diagnostics noSuppression() {
return this;
}
@NotNull
@Override
public Iterator<Diagnostic> iterator() {
return all().iterator();
}
};
}
@@ -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<Diagnostic> diagnostics;
public SimpleDiagnostics(@NotNull Collection<Diagnostic> diagnostics) {
this.diagnostics = diagnostics;
}
@NotNull
@Override
public Collection<Diagnostic> all() {
return diagnostics;
}
@NotNull
@Override
public Diagnostics noSuppression() {
return this;
}
@NotNull
@Override
public Iterator<Diagnostic> iterator() {
return all().iterator();
}
@Override
public boolean isEmpty() {
return all().isEmpty();
}
}
@@ -64,7 +64,7 @@ public class TraceUtil {
public final static BindingContext BINDING_CONTEXT_STUB = new BindingContext() {
@NotNull
@Override
public Collection<Diagnostic> getDiagnostics() {
public Diagnostics getDiagnostics() {
throw new IllegalStateException();
}
@@ -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<Diagnostic> getDiagnostics() {
public Diagnostics getDiagnostics() {
synchronized (lock) {
return context.getDiagnostics();
}
@@ -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<Diagnostic> getDiagnostics() {
public Diagnostics getDiagnostics() {
throw new UnsupportedOperationException(); // TODO
}
@@ -160,7 +161,7 @@ public class JetTestUtils {
return new BindingContext() {
@NotNull
@Override
public Collection<Diagnostic> getDiagnostics() {
public Diagnostics getDiagnostics() {
throw new UnsupportedOperationException();
}
@@ -103,7 +103,7 @@ public class IdeRenderers {
private Set<ValueParameterDescriptor> getParametersToHighlight(ResolvedCall<? extends CallableDescriptor> call) {
Set<ValueParameterDescriptor> parameters = new HashSet<ValueParameterDescriptor>();
if (call instanceof ResolvedCallImpl) {
Collection<Diagnostic> diagnostics = ((ResolvedCallImpl)call).getTrace().getBindingContext().getDiagnostics();
Iterable<Diagnostic> diagnostics = ((ResolvedCallImpl)call).getTrace().getBindingContext().getDiagnostics();
for (Diagnostic diagnostic : diagnostics) {
if (diagnostic.getFactory() == Errors.TOO_MANY_ARGUMENTS) {
parameters.add(null);
@@ -78,7 +78,7 @@ public class MapPlatformClassToKotlinFix extends JetIntentionAction<JetReference
@Override
public void invoke(@NotNull Project project, Editor editor, JetFile file) throws IncorrectOperationException {
BindingContext context = KotlinCacheManagerUtil.getDeclarationsBindingContext(file);
Collection<Diagnostic> diagnostics = context.getDiagnostics();
Iterable<Diagnostic> diagnostics = context.getDiagnostics();
List<JetImportDirective> imports = new ArrayList<JetImportDirective>();
List<JetUserType> usages = new ArrayList<JetUserType>();
@@ -56,7 +56,7 @@ public class DiagnosticMessageTest extends JetLiteFixture {
BindingContext bindingContext = analyzeExhaust.getBindingContext();
final Set<AbstractDiagnosticFactory> factoriesSet = Sets.newHashSet(diagnosticFactories);
List<Diagnostic> diagnostics = ContainerUtil.filter(bindingContext.getDiagnostics(), new Condition<Diagnostic>() {
List<Diagnostic> diagnostics = ContainerUtil.filter(bindingContext.getDiagnostics().all(), new Condition<Diagnostic>() {
@Override
public boolean value(Diagnostic diagnostic) {
return factoriesSet.contains(diagnostic.getFactory());
@@ -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")
@@ -47,7 +47,7 @@ public class QuickFixActionsUtils {
AnalyzeExhaust exhaust = AnalyzerFacadeWithCache.analyzeFileWithCache(file);
Collection<Diagnostic> diagnostics = exhaust.getBindingContext().getDiagnostics();
Collection<Diagnostic> diagnostics = exhaust.getBindingContext().getDiagnostics().all();
Collection<Diagnostic> errorDiagnostics = Collections2.filter(diagnostics, new Predicate<Diagnostic>() {
@Override
public boolean apply(@Nullable Diagnostic diagnostic) {