extracted method commitResolutionCacheData

commit resolve data after argument analysis with temporary trace
This commit is contained in:
Svetlana Isakova
2013-01-24 15:29:14 +04:00
parent ff01fad3cd
commit fa97770831
3 changed files with 14 additions and 7 deletions
@@ -25,6 +25,7 @@ import org.jetbrains.jet.lang.descriptors.*;
import org.jetbrains.jet.lang.psi.*;
import org.jetbrains.jet.util.slicedmap.ReadOnlySlice;
import org.jetbrains.jet.util.slicedmap.Slices;
import org.jetbrains.jet.util.slicedmap.WritableSlice;
import java.util.*;
@@ -265,4 +266,15 @@ public class BindingContextUtils {
}
trace.report(AMBIGUOUS_LABEL.on(targetLabel));
}
public static void commitResolutionCacheData(@NotNull DelegatingBindingTrace trace, @NotNull BindingTrace traceForResolutionCache) {
trace.addAllMyDataTo(traceForResolutionCache, new TraceEntryFilter() {
@Override
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;
}
}, false);
}
}
@@ -516,13 +516,7 @@ public class CallResolver {
task.getResolvedCalls().add(call);
}
context.candidateCall.getTrace().addAllMyDataTo(traceForResolutionCache, new TraceEntryFilter() {
@Override
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;
}
}, false);
BindingContextUtils.commitResolutionCacheData(context.candidateCall.getTrace(), traceForResolutionCache);
}
}
@@ -366,6 +366,7 @@ public class CandidateResolver {
expectedType != null ? expectedType : NO_EXPECTED_TYPE, resolveFunctionArgumentBodies).getType();
constraintSystem.addSubtypeConstraint(type, effectiveExpectedType, ConstraintPosition.getValueParameterPosition(
valueParameterDescriptor.getIndex()));
BindingContextUtils.commitResolutionCacheData(traceForUnknown, context.trace);
if (isErrorType != null) {
isErrorType[0] = type == null || ErrorUtils.isErrorType(type);
}