package com.lexicalscope.fluentreflection;
import static java.util.Collections.unmodifiableList;
import java.util.List;
import com.google.inject.TypeLiteral;
final class ReflectedSuperclassesAndInterfacesImpl<T> implements ReflectedSuperclassesAndInterfaces<T> {
private final ReflectedTypeFactory reflectedTypeFactory;
private List<FluentClass<?>> interfacesAndSuperClass;
private final TypeLiteral<T> typeLiteral;
ReflectedSuperclassesAndInterfacesImpl(
final ReflectedTypeFactory reflectedTypeFactory,
final TypeLiteral<T> typeLiteral) {
this.reflectedTypeFactory = reflectedTypeFactory;
this.typeLiteral = typeLiteral;
}
@Override public List<FluentClass<?>> superclassesAndInterfaces() {
if (interfacesAndSuperClass == null) {
interfacesAndSuperClass =
unmodifiableList(new TypeHierarchyCalculation(reflectedTypeFactory)
.interfacesAndSuperClass(typeLiteral));
}
return interfacesAndSuperClass;
}
}