View Javadoc
1   package net.florianschoppmann.java.reflect;
2   
3   import javax.annotation.Nullable;
4   import javax.lang.model.type.DeclaredType;
5   import javax.lang.model.type.TypeKind;
6   import javax.lang.model.type.TypeVisitor;
7   import java.util.List;
8   import java.util.Objects;
9   
10  final class DeclaredTypeImpl extends AnnotatedConstructImpl implements ReflectionTypeMirror, DeclaredType {
11      private final ReflectionTypeMirror enclosingType;
12      private final TypeElementImpl typeElement;
13      private final ImmutableList<? extends ReflectionTypeMirror> typeArguments;
14  
15      DeclaredTypeImpl(ReflectionTypeMirror enclosingType, TypeElementImpl typeElement,
16              List<? extends ReflectionTypeMirror> typeArguments) {
17          Objects.requireNonNull(enclosingType);
18          Objects.requireNonNull(typeElement);
19          Objects.requireNonNull(typeArguments);
20  
21          this.enclosingType = enclosingType;
22          this.typeElement = typeElement;
23          this.typeArguments = ImmutableList.copyOf(typeArguments);
24      }
25  
26      @Override
27      public boolean equals(@Nullable Object otherObject) {
28          if (this == otherObject) {
29              return true;
30          } else if (otherObject == null || getClass() != otherObject.getClass()) {
31              return false;
32          }
33  
34          DeclaredTypeImpl other = (DeclaredTypeImpl) otherObject;
35          return enclosingType.equals(other.enclosingType)
36              && typeElement.equals(other.typeElement)
37              && typeArguments.equals(other.typeArguments);
38      }
39  
40      @Override
41      public int hashCode() {
42          return Objects.hash(enclosingType, typeElement, typeArguments);
43      }
44  
45      @Override
46      public String toString() {
47          return ReflectionTypes.getInstance().toString(this);
48      }
49  
50      @Override
51      public <R, P> R accept(TypeVisitor<R, P> visitor, @Nullable P parameter) {
52          return visitor.visitDeclared(this, parameter);
53      }
54  
55      @Override
56      public TypeElementImpl asElement() {
57          return typeElement;
58      }
59  
60      @Override
61      public ReflectionTypeMirror getEnclosingType() {
62          return enclosingType;
63      }
64  
65      @Override
66      public List<? extends ReflectionTypeMirror> getTypeArguments() {
67          return typeArguments;
68      }
69  
70      @Override
71      public TypeKind getKind() {
72          return TypeKind.DECLARED;
73      }
74  }