1   
2   
3   
4   
5   
6   
7   
8   
9   
10  
11  
12  
13  
14  
15  
16  
17  
18  
19  
20  package org.grouplens.grapht.reflect;
21  
22  import org.grouplens.grapht.util.Types;
23  
24  import javax.annotation.Nonnull;
25  import javax.annotation.Nullable;
26  import java.lang.annotation.Annotation;
27  import java.lang.reflect.Member;
28  import java.lang.reflect.Type;
29  import java.util.Collection;
30  import java.util.Collections;
31  
32  
33  
34  
35  
36  
37  
38  
39  public class MockInjectionPoint implements InjectionPoint {
40      private static final long serialVersionUID = 1L;
41  
42      private final Class<?> type;
43      private final boolean nullable;
44      private final Annotation qualifier;
45      
46      public MockInjectionPoint(Class<?> type, boolean nullable) {
47          this(type, null, nullable);
48      }
49      
50      public MockInjectionPoint(Class<?> type, Annotation qualifier, boolean nullable) {
51          this.type = Types.box(type);
52          this.qualifier = qualifier;
53          this.nullable = nullable;
54      }
55      
56      @Override
57      public Member getMember() {
58          return new Member() {
59              @Override
60              public Class<?> getDeclaringClass() {
61                  return Void.class;
62              }
63  
64              @Override
65              public String getName() {
66                  return "synthetic";
67              }
68  
69              @Override
70              public int getModifiers() {
71                  return 0;
72              }
73  
74              @Override
75              public boolean isSynthetic() {
76                  return true;
77              }
78          };
79      }
80      
81      @Override
82      public Type getType() {
83          return type;
84      }
85      
86      @Override
87      public Class<?> getErasedType() {
88          return type;
89      }
90  
91      @Nullable
92      @Override
93      public Annotation getQualifier() {
94          return qualifier;
95      }
96  
97      @Nullable
98      @Override
99      public <A extends Annotation> A getAttribute(Class<A> atype) {
100         return null;
101     }
102 
103     @Nonnull
104     @Override
105     public Collection<Annotation> getAttributes() {
106         return Collections.emptySet();
107     }
108 
109     @Override
110     public boolean isNullable() {
111         return nullable;
112     }
113 
114     @Override
115     public boolean equals(Object o) {
116         if (!(o instanceof MockInjectionPoint)) {
117             return false;
118         }
119         MockInjectionPoint m = (MockInjectionPoint) o;
120         return m.type.equals(type) && 
121                m.nullable == nullable && 
122                (m.qualifier == qualifier || (qualifier != null && qualifier.equals(m.qualifier)));
123     }
124     
125     @Override
126     public int hashCode() {
127         return type.hashCode() ^ (qualifier == null ? 0 : qualifier.hashCode()) ^ (nullable ? 2 : 4);
128     }
129 }