package org.etk.reflect.core;
import java.util.ArrayList;
import java.util.List;
import org.etk.reflect.api.ParameterizedTypeInfo;
import org.etk.reflect.api.TypeInfo;
class ParameterizedTypeInfoImpl<T, M, A, P, F> extends AbstractParameterizedTypeInfo<T, M, A, P, F> implements ParameterizedTypeInfo {
/** . */
private final T type;
/** . */
private TypeInfo rawType;
/** . */
private List<TypeInfo> typeArguments;
public ParameterizedTypeInfoImpl(TypeResolverImpl<T, M, A, P, F> domain, T type) {
super(domain);
//
this.type = type;
this.rawType = null;
}
public T unwrap() {
return type;
}
public TypeInfo getRawType() {
if (rawType == null) {
T rawType = domain.typeMetadata.getRawType(type);
this.rawType = domain.getType(rawType);
}
return rawType;
}
public List<TypeInfo> getTypeArguments() {
if (typeArguments == null) {
ArrayList<TypeInfo> typeArguments = new ArrayList<TypeInfo>();
for (T typeArgument : domain.typeMetadata.getTypeArguments(type)) {
AbstractTypeInfo<T, M, A, P, F> ta = domain.getType(typeArgument);
typeArguments.add(ta);
}
this.typeArguments = typeArguments;
}
return typeArguments;
}
}