in src/java/org/apache/cassandra/cql3/functions/types/CodecRegistry.java [711:783]
private <T> TypeCodec<T> maybeCreateCodec(DataType cqlType, TypeToken<T> javaType)
{
checkNotNull(cqlType);
if (cqlType.getName() == LIST
&& (javaType == null || List.class.isAssignableFrom(javaType.getRawType())))
{
TypeToken<?> elementType = null;
if (javaType != null && javaType.getType() instanceof ParameterizedType)
{
Type[] typeArguments = ((ParameterizedType) javaType.getType()).getActualTypeArguments();
elementType = TypeToken.of(typeArguments[0]);
}
TypeCodec<?> eltCodec = findCodec(cqlType.getTypeArguments().get(0), elementType);
return (TypeCodec<T>) TypeCodec.list(eltCodec);
}
if (cqlType.getName() == SET
&& (javaType == null || Set.class.isAssignableFrom(javaType.getRawType())))
{
TypeToken<?> elementType = null;
if (javaType != null && javaType.getType() instanceof ParameterizedType)
{
Type[] typeArguments = ((ParameterizedType) javaType.getType()).getActualTypeArguments();
elementType = TypeToken.of(typeArguments[0]);
}
TypeCodec<?> eltCodec = findCodec(cqlType.getTypeArguments().get(0), elementType);
return (TypeCodec<T>) TypeCodec.set(eltCodec);
}
if (cqlType.getName() == MAP
&& (javaType == null || Map.class.isAssignableFrom(javaType.getRawType())))
{
TypeToken<?> keyType = null;
TypeToken<?> valueType = null;
if (javaType != null && javaType.getType() instanceof ParameterizedType)
{
Type[] typeArguments = ((ParameterizedType) javaType.getType()).getActualTypeArguments();
keyType = TypeToken.of(typeArguments[0]);
valueType = TypeToken.of(typeArguments[1]);
}
TypeCodec<?> keyCodec = findCodec(cqlType.getTypeArguments().get(0), keyType);
TypeCodec<?> valueCodec = findCodec(cqlType.getTypeArguments().get(1), valueType);
return (TypeCodec<T>) TypeCodec.map(keyCodec, valueCodec);
}
if (cqlType instanceof VectorType
&& (javaType == null || List.class.isAssignableFrom(javaType.getRawType())))
{
VectorType type = (VectorType) cqlType;
return (TypeCodec<T>) TypeCodec.vector(type, findCodec(type.getSubtype(), null));
}
if (cqlType instanceof TupleType
&& (javaType == null || TupleValue.class.isAssignableFrom(javaType.getRawType())))
{
return (TypeCodec<T>) TypeCodec.tuple((TupleType) cqlType);
}
if (cqlType instanceof UserType
&& (javaType == null || UDTValue.class.isAssignableFrom(javaType.getRawType())))
{
return (TypeCodec<T>) TypeCodec.userType((UserType) cqlType);
}
if (cqlType instanceof DataType.CustomType
&& (javaType == null || ByteBuffer.class.isAssignableFrom(javaType.getRawType())))
{
return (TypeCodec<T>) TypeCodec.custom((DataType.CustomType) cqlType);
}
return null;
}