1/*
2 * Copyright (c) 2007 Mockito contributors
3 * This program is made available under the terms of the MIT License.
4 */
5package org.mockito.internal.stubbing.answers;
6
7import org.mockito.internal.util.Primitives;
8import org.mockito.invocation.Invocation;
9
10import java.lang.reflect.Method;
11
12/**
13 * by Szczepan Faber, created at: 3/31/12
14 */
15public class MethodInfo {
16
17    private Method method;
18
19    public MethodInfo(Invocation theInvocation) {
20        this.method = theInvocation.getMethod();
21    }
22
23    public boolean isValidException(Throwable throwable) {
24        Class<?>[] exceptions = method.getExceptionTypes();
25        Class<?> throwableClass = throwable.getClass();
26        for (Class<?> exception : exceptions) {
27            if (exception.isAssignableFrom(throwableClass)) {
28                return true;
29            }
30        }
31
32        return false;
33    }
34
35    public boolean isValidReturnType(Class clazz) {
36        if (method.getReturnType().isPrimitive() || clazz.isPrimitive()) {
37            return Primitives.primitiveTypeOf(clazz) == Primitives.primitiveTypeOf(method.getReturnType());
38        } else {
39            return method.getReturnType().isAssignableFrom(clazz);
40        }
41    }
42
43    public boolean isVoid() {
44        return this.method.getReturnType() == Void.TYPE;
45    }
46
47    public String printMethodReturnType() {
48        return method.getReturnType().getSimpleName();
49    }
50
51    public String getMethodName() {
52        return method.getName();
53    }
54
55    public boolean returnsPrimitive() {
56        return method.getReturnType().isPrimitive();
57    }
58
59    public Method getMethod() {
60        return method;
61    }
62
63    public boolean isDeclaredOnInterface() {
64        return method.getDeclaringClass().isInterface();
65    }
66}
67