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 }