package com.fasterxml.jackson.databind.type;
import java.lang.reflect.TypeVariable;
import com.fasterxml.jackson.databind.JavaType;
public final class CollectionType
extends CollectionLikeType
{
private static final long serialVersionUID = 1L;
private CollectionType(Class<?> collT, TypeBindings bindings,
JavaType superClass, JavaType[] superInts, JavaType elemT,
Object valueHandler, Object typeHandler, boolean asStatic)
{
super(collT, bindings, superClass, superInts, elemT, valueHandler, typeHandler, asStatic);
}
protected CollectionType(TypeBase base, JavaType elemT) {
super(base, elemT);
}
public static CollectionType construct(Class<?> rawType, TypeBindings bindings,
JavaType superClass, JavaType[] superInts, JavaType elemT) {
return new CollectionType(rawType, bindings, superClass, superInts, elemT,
null, null, false);
}
@Deprecated
public static CollectionType construct(Class<?> rawType, JavaType elemT) {
TypeVariable<?>[] vars = rawType.getTypeParameters();
TypeBindings bindings;
if ((vars == null) || (vars.length != 1)) {
bindings = TypeBindings.emptyBindings();
} else {
bindings = TypeBindings.create(rawType, elemT);
}
return new CollectionType(rawType, bindings,
_bogusSuperClass(rawType), null, elemT,
null, null, false);
}
@Deprecated
@Override
protected JavaType _narrow(Class<?> subclass) {
return new CollectionType(subclass, _bindings,
_superClass, _superInterfaces, _elementType, null, null, _asStatic);
}
@Override
public JavaType withContentType(JavaType contentType) {
if (_elementType == contentType) {
return this;
}
return new CollectionType(_class, _bindings, _superClass, _superInterfaces,
contentType, _valueHandler, _typeHandler, _asStatic);
}
@Override
public CollectionType withTypeHandler(Object h) {
return new CollectionType(_class, _bindings,
_superClass, _superInterfaces, _elementType, _valueHandler, h, _asStatic);
}
@Override
public CollectionType withContentTypeHandler(Object h)
{
return new CollectionType(_class, _bindings,
_superClass, _superInterfaces, _elementType.withTypeHandler(h),
_valueHandler, _typeHandler, _asStatic);
}
@Override
public CollectionType withValueHandler(Object h) {
return new CollectionType(_class, _bindings,
_superClass, _superInterfaces, _elementType, h, _typeHandler, _asStatic);
}
@Override
public CollectionType withContentValueHandler(Object h) {
return new CollectionType(_class, _bindings,
_superClass, _superInterfaces, _elementType.withValueHandler(h),
_valueHandler, _typeHandler, _asStatic);
}
@Override
public CollectionType withStaticTyping() {
if (_asStatic) {
return this;
}
return new CollectionType(_class, _bindings,
_superClass, _superInterfaces, _elementType.withStaticTyping(),
_valueHandler, _typeHandler, true);
}
@Override
public JavaType refine(Class<?> rawType, TypeBindings bindings,
JavaType superClass, JavaType[] superInterfaces) {
return new CollectionType(rawType, bindings,
superClass, superInterfaces, _elementType,
_valueHandler, _typeHandler, _asStatic);
}
@Override
public String toString()
{
return "[collection type; class "+_class.getName()+", contains "+_elementType+"]";
}
}