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 b1d4c65fd03..a31a5581000 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DelegatingBindingTrace.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/DelegatingBindingTrace.java @@ -108,15 +108,17 @@ public class DelegatingBindingTrace implements BindingTrace { addAllMyDataTo(trace, null, true); } - public void addAllMyDataTo(@NotNull BindingTrace trace, @Nullable Predicate filter, boolean commitDiagnostics) { + public void addAllMyDataTo(@NotNull BindingTrace trace, @Nullable TraceEntryFilter filter, boolean commitDiagnostics) { for (Map.Entry, ?> entry : map) { SlicedMapKey slicedMapKey = entry.getKey(); - Object value = entry.getValue(); WritableSlice slice = slicedMapKey.getSlice(); - if (filter == null || filter.apply(slice)) { + Object key = slicedMapKey.getKey(); + Object value = entry.getValue(); + + if (filter == null || filter.accept(slice, key)) { //noinspection unchecked - trace.record(slice, slicedMapKey.getKey(), value); + trace.record(slice, key, value); } } diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/TemporaryBindingTrace.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/TemporaryBindingTrace.java index 3844bccf074..81487406673 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/TemporaryBindingTrace.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/TemporaryBindingTrace.java @@ -41,7 +41,7 @@ public class TemporaryBindingTrace extends DelegatingBindingTrace { clear(); } - public void commit(@NotNull Predicate filter, boolean commitDiagnostics) { + public void commit(@NotNull TraceEntryFilter filter, boolean commitDiagnostics) { addAllMyDataTo(trace, filter, commitDiagnostics); clear(); } diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/TraceEntryFilter.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/TraceEntryFilter.java new file mode 100644 index 00000000000..1371084c41c --- /dev/null +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/TraceEntryFilter.java @@ -0,0 +1,24 @@ +/* + * Copyright 2010-2012 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.jetbrains.jet.lang.resolve; + +import org.jetbrains.annotations.NotNull; +import org.jetbrains.jet.util.slicedmap.WritableSlice; + +public interface TraceEntryFilter { + boolean accept(@NotNull WritableSlice slice, Object key); +} diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/CallResolver.java b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/CallResolver.java index 561dc5cd121..459807caeae 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/CallResolver.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/resolve/calls/CallResolver.java @@ -569,9 +569,9 @@ public class CallResolver { task.getResolvedCalls().add(call); } - context.candidateCall.getTrace().addAllMyDataTo(traceForResolutionCache, new Predicate() { + context.candidateCall.getTrace().addAllMyDataTo(traceForResolutionCache, new TraceEntryFilter() { @Override - public boolean apply(@Nullable WritableSlice slice) { + public boolean accept(@NotNull WritableSlice slice, Object key) { return slice == BindingContext.RESOLUTION_RESULTS_FOR_FUNCTION || slice == BindingContext.RESOLUTION_RESULTS_FOR_PROPERTY || slice == BindingContext.TRACE_DELTAS_CACHE; } diff --git a/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/ClosureExpressionsTypingVisitor.java b/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/ClosureExpressionsTypingVisitor.java index 42219f8a286..096c1c0f2a6 100644 --- a/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/ClosureExpressionsTypingVisitor.java +++ b/compiler/frontend/src/org/jetbrains/jet/lang/types/expressions/ClosureExpressionsTypingVisitor.java @@ -125,9 +125,9 @@ public class ClosureExpressionsTypingVisitor extends ExpressionTypingVisitor { returnType = context.expressionTypingServices.getBlockReturnedType(functionInnerScope, bodyExpression, CoercionStrategy.COERCION_TO_UNIT, context.replaceExpectedType(returnType).replaceBindingTrace(temporaryTrace), temporaryTrace).getType(); } - temporaryTrace.commit(new Predicate() { + temporaryTrace.commit(new TraceEntryFilter() { @Override - public boolean apply(@Nullable WritableSlice slice) { + public boolean accept(@NotNull WritableSlice slice, Object key) { return (slice != BindingContext.RESOLUTION_RESULTS_FOR_FUNCTION && slice != BindingContext.RESOLUTION_RESULTS_FOR_PROPERTY && slice != BindingContext.TRACE_DELTAS_CACHE); }