1
2
3
4
5 package mockit.integration.springframework;
6
7 import edu.umd.cs.findbugs.annotations.NonNull;
8 import edu.umd.cs.findbugs.annotations.Nullable;
9
10 import mockit.internal.injection.BeanExporter;
11
12 import org.springframework.beans.factory.BeanNotOfRequiredTypeException;
13 import org.springframework.beans.factory.NoSuchBeanDefinitionException;
14
15 final class BeanLookup {
16 private BeanLookup() {
17 }
18
19 @NonNull
20 static Object getBean(@NonNull BeanExporter beanExporter, @NonNull String name) {
21 Object bean = beanExporter.getBean(name);
22
23 if (bean == null) {
24 throw new NoSuchBeanDefinitionException(name);
25 }
26
27 return bean;
28 }
29
30 @NonNull
31 @SuppressWarnings("unchecked")
32 static <T> T getBean(@NonNull BeanExporter beanExporter, @NonNull String name, @Nullable Class<T> requiredType) {
33 if (requiredType == null) {
34 return (T) getBean(beanExporter, name);
35 }
36
37 T bean = (T) beanExporter.getBean(name);
38
39 if (bean != null) {
40 Class<?> actualType = bean.getClass();
41
42 if (!requiredType.isAssignableFrom(actualType)) {
43 throw new BeanNotOfRequiredTypeException(name, requiredType, actualType);
44 }
45 } else {
46 bean = beanExporter.getBean(requiredType);
47
48 if (bean == null) {
49 throw new NoSuchBeanDefinitionException(requiredType, "with bean name \"" + name + '"');
50 }
51 }
52
53 return bean;
54 }
55
56 @NonNull
57 static <T> T getBean(@NonNull BeanExporter beanExporter, @NonNull Class<T> requiredType) {
58 T bean = beanExporter.getBean(requiredType);
59
60 if (bean == null) {
61 throw new NoSuchBeanDefinitionException(requiredType);
62 }
63
64 return bean;
65 }
66 }