/* * Copyright (c) 2007 Mockito contributors * This program is made available under the terms of the MIT License. */ package org.mockito.internal.invocation; import static org.mockito.internal.exceptions.Reporter.invalidUseOfMatchers; import java.io.Serializable; import java.util.LinkedList; import java.util.List; import org.mockito.ArgumentMatcher; import org.mockito.internal.matchers.LocalizedMatcher; import org.mockito.internal.progress.ArgumentMatcherStorage; import org.mockito.invocation.Invocation; @SuppressWarnings("unchecked") public class MatchersBinder implements Serializable { public InvocationMatcher bindMatchers(ArgumentMatcherStorage argumentMatcherStorage, Invocation invocation) { List<LocalizedMatcher> lastMatchers = argumentMatcherStorage.pullLocalizedMatchers(); validateMatchers(invocation, lastMatchers); List<ArgumentMatcher> matchers = new LinkedList<ArgumentMatcher>(); for (LocalizedMatcher m : lastMatchers) { matchers.add(m.getMatcher()); } return new InvocationMatcher(invocation, matchers); } private void validateMatchers(Invocation invocation, List<LocalizedMatcher> lastMatchers) { if (!lastMatchers.isEmpty()) { int recordedMatchersSize = lastMatchers.size(); int expectedMatchersSize = invocation.getArguments().length; if (expectedMatchersSize != recordedMatchersSize) { throw invalidUseOfMatchers(expectedMatchersSize, lastMatchers); } } } }