use of java.lang.reflect.Type in project buck by facebook.
the class TypeCoercerTest method coerceToEitherLeftOrRight.
@Test
public void coerceToEitherLeftOrRight() throws NoSuchFieldException, CoerceFailedException {
Type type = TestFields.class.getField("eitherStringSetOrStringToStringMap").getGenericType();
TypeCoercer<?> coercer = typeCoercerFactory.typeCoercerForType(type);
Set<String> inputSet = ImmutableSet.of("a", "b", "x");
Map<String, String> inputMap = ImmutableMap.of("key1", "One", "key2", "Two");
assertEquals(Either.ofLeft(inputSet), coercer.coerce(cellRoots, filesystem, Paths.get(""), inputSet));
assertEquals(Either.ofRight(inputMap), coercer.coerce(cellRoots, filesystem, Paths.get(""), inputMap));
}
use of java.lang.reflect.Type in project neo4j by neo4j.
the class MethodSignatureCompiler method inputTypesFor.
public List<Neo4jTypes.AnyType> inputTypesFor(Method method) throws ProcedureException {
Type[] types = method.getGenericParameterTypes();
List<Neo4jTypes.AnyType> neoTypes = new ArrayList<>(types.length);
for (Type type : types) {
NeoValueConverter valueConverter = typeMappers.converterFor(type);
neoTypes.add(valueConverter.type());
}
return neoTypes;
}
use of java.lang.reflect.Type in project neo4j by neo4j.
the class MethodSignatureCompiler method signatureFor.
public List<FieldSignature> signatureFor(Method method) throws ProcedureException {
Parameter[] params = method.getParameters();
Type[] types = method.getGenericParameterTypes();
List<FieldSignature> signature = new ArrayList<>(params.length);
boolean seenDefault = false;
for (int i = 0; i < params.length; i++) {
Parameter param = params[i];
Type type = types[i];
if (!param.isAnnotationPresent(Name.class)) {
throw new ProcedureException(Status.Procedure.ProcedureRegistrationFailed, "Argument at position %d in method `%s` is missing an `@%s` annotation.%n" + "Please add the annotation, recompile the class and try again.", i, method.getName(), Name.class.getSimpleName());
}
Name parameter = param.getAnnotation(Name.class);
String name = parameter.value();
if (name.trim().length() == 0) {
throw new ProcedureException(Status.Procedure.ProcedureRegistrationFailed, "Argument at position %d in method `%s` is annotated with a name,%n" + "but the name is empty, please provide a non-empty name for the argument.", i, method.getName());
}
try {
NeoValueConverter valueConverter = typeMappers.converterFor(type);
Optional<Neo4jValue> defaultValue = valueConverter.defaultValue(parameter);
//it is not allowed to have holes in default values
if (seenDefault && !defaultValue.isPresent()) {
throw new ProcedureException(Status.Procedure.ProcedureRegistrationFailed, "Non-default argument at position %d with name %s in method %s follows default argument. " + "Add a default value or rearrange arguments so that the non-default values comes first.", i, parameter.value(), method.getName());
}
seenDefault = defaultValue.isPresent();
signature.add(new FieldSignature(name, valueConverter.type(), defaultValue));
} catch (ProcedureException e) {
throw new ProcedureException(e.status(), "Argument `%s` at position %d in `%s` with%n" + "type `%s` cannot be converted to a Neo4j type: %s", name, i, method.getName(), param.getType().getSimpleName(), e.getMessage());
}
}
return signature;
}
use of java.lang.reflect.Type in project neo4j by neo4j.
the class TypeMappers method converterFor.
public NeoValueConverter converterFor(Type javaType) throws ProcedureException {
NeoValueConverter converter = javaToNeo.get(javaType);
if (converter != null) {
return converter;
}
if (javaType instanceof ParameterizedType) {
ParameterizedType pt = (ParameterizedType) javaType;
Type rawType = pt.getRawType();
if (rawType == List.class) {
Type type = pt.getActualTypeArguments()[0];
return toList(converterFor(type), type);
} else if (rawType == Map.class) {
Type type = pt.getActualTypeArguments()[0];
if (type != String.class) {
throw new ProcedureException(Status.Procedure.ProcedureRegistrationFailed, "Maps are required to have `String` keys - but this map has `%s` keys.", type.getTypeName());
}
return TO_MAP;
}
}
throw javaToNeoMappingError(javaType);
}
use of java.lang.reflect.Type in project mybatis-3 by mybatis.
the class Reflector method addGetMethod.
private void addGetMethod(String name, Method method) {
if (isValidPropertyName(name)) {
getMethods.put(name, new MethodInvoker(method));
Type returnType = TypeParameterResolver.resolveReturnType(method, type);
getTypes.put(name, typeToClass(returnType));
}
}
Aggregations