1/**
2 *
3 */
4package org.junit.internal.runners.statements;
5
6import java.util.ArrayList;
7import java.util.List;
8
9import org.junit.runners.model.FrameworkMethod;
10import org.junit.runners.model.MultipleFailureException;
11import org.junit.runners.model.Statement;
12
13public class RunAfters extends Statement {
14	private final Statement fNext;
15
16	private final Object fTarget;
17
18	private final List<FrameworkMethod> fAfters;
19
20	public RunAfters(Statement next, List<FrameworkMethod> afters, Object target) {
21		fNext= next;
22		fAfters= afters;
23		fTarget= target;
24	}
25
26	@Override
27	public void evaluate() throws Throwable {
28		List<Throwable> errors = new ArrayList<Throwable>();
29		try {
30			fNext.evaluate();
31		} catch (Throwable e) {
32			errors.add(e);
33		} finally {
34			for (FrameworkMethod each : fAfters)
35				try {
36					each.invokeExplosively(fTarget);
37				} catch (Throwable e) {
38					errors.add(e);
39				}
40		}
41		MultipleFailureException.assertEmpty(errors);
42	}
43}