View Javadoc

1   package com.lexicalscope.fluentreflection;
2   
3   import static java.util.Collections.unmodifiableList;
4   
5   import java.util.List;
6   
7   import com.google.inject.TypeLiteral;
8   
9   final class ReflectedSuperclassesAndInterfacesImpl<T> implements ReflectedSuperclassesAndInterfaces<T> {
10      private final ReflectedTypeFactory reflectedTypeFactory;
11      private List<FluentClass<?>> interfacesAndSuperClass;
12      private final TypeLiteral<T> typeLiteral;
13  
14      ReflectedSuperclassesAndInterfacesImpl(
15              final ReflectedTypeFactory reflectedTypeFactory,
16              final TypeLiteral<T> typeLiteral) {
17          this.reflectedTypeFactory = reflectedTypeFactory;
18          this.typeLiteral = typeLiteral;
19      }
20  
21      @Override public List<FluentClass<?>> superclassesAndInterfaces() {
22          if (interfacesAndSuperClass == null) {
23              interfacesAndSuperClass =
24                      unmodifiableList(new TypeHierarchyCalculation(reflectedTypeFactory)
25                              .interfacesAndSuperClass(typeLiteral));
26          }
27          return interfacesAndSuperClass;
28      }
29  }