From 9a9527906b58f8148d77ca79c1dceeb3333ecae4 Mon Sep 17 00:00:00 2001 From: Mikhael Bogdanov Date: Mon, 2 Dec 2013 12:28:25 +0400 Subject: [PATCH] Don't lost diagnostics on real elements when processing fake resolveCall --- .../jetbrains/jet/lang/resolve/DelegatedPropertyResolver.java | 2 +- .../jetbrains/jet/lang/resolve/DelegatingBindingTrace.java | 4 +++- .../src/org/jetbrains/jet/lang/resolve/TraceEntryFilter.java | 4 ++-- .../jet/lang/types/expressions/ExpressionTypingUtils.java | 4 ++-- 4 files changed, 8 insertions(+), 6 deletions(-) diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DelegatedPropertyResolver.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DelegatedPropertyResolver.java index 1ee10306aa3..33f90effc06 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DelegatedPropertyResolver.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DelegatedPropertyResolver.java @@ -228,7 +228,7 @@ public class DelegatedPropertyResolver { dataFlowInfo, traceToResolveDelegatedProperty); traceToResolveDelegatedProperty.commit(new TraceEntryFilter() { @Override - public boolean accept(@NotNull WritableSlice slice, Object key) { + public boolean accept(@Nullable WritableSlice slice, Object key) { return slice != CONSTRAINT_SYSTEM_COMPLETER; } }, true); 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 477ba68d392..98dd107e8ee 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DelegatingBindingTrace.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DelegatingBindingTrace.java @@ -146,7 +146,9 @@ public class DelegatingBindingTrace implements BindingTrace { if (!commitDiagnostics) return; for (Diagnostic diagnostic : diagnostics) { - trace.report(diagnostic); + if (filter == null || filter.accept(null, diagnostic.getPsiElement())) { + trace.report(diagnostic); + } } } diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/TraceEntryFilter.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/TraceEntryFilter.java index 28d7514e2e8..f24f20a7e9f 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/TraceEntryFilter.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/TraceEntryFilter.java @@ -16,9 +16,9 @@ package org.jetbrains.jet.lang.resolve; -import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import org.jetbrains.jet.util.slicedmap.WritableSlice; public interface TraceEntryFilter { - boolean accept(@NotNull WritableSlice slice, Object key); + boolean accept(@Nullable WritableSlice slice, Object key); } diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/ExpressionTypingUtils.java b/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/ExpressionTypingUtils.java index b282d256162..3731491ae63 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/ExpressionTypingUtils.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/ExpressionTypingUtils.java @@ -380,11 +380,11 @@ public class ExpressionTypingUtils { if (results.isSuccess()) { fakeTrace.commit(new TraceEntryFilter() { @Override - public boolean accept(@NotNull WritableSlice slice, Object key) { + public boolean accept(@Nullable WritableSlice slice, Object key) { // excluding all entries related to fake expression return key != fake; } - }, false); + }, true); } return Pair.create(call, results); }