use of org.apache.dubbo.metadata.definition.model.TypeDefinition in project dubbo by alibaba.
the class MapTypeDefinitionBuilderTest method buildAndAssertTypeDefinition.
static void buildAndAssertTypeDefinition(ProcessingEnvironment processingEnv, VariableElement field, String expectedType, String keyType, String valueType, TypeDefinitionBuilder builder, BiConsumer<TypeDefinition, TypeDefinition>... assertions) {
TypeDefinition typeDefinition = TypeDefinitionBuilder.build(processingEnv, field);
TypeDefinition keyTypeDefinition = typeDefinition.getItems().get(0);
TypeDefinition valueTypeDefinition = typeDefinition.getItems().get(1);
assertEquals(expectedType, typeDefinition.getType());
// assertEquals(field.getSimpleName().toString(), typeDefinition.get$ref());
assertEquals(keyType, keyTypeDefinition.getType());
assertEquals(valueType, valueTypeDefinition.getType());
// assertEquals(builder.getClass().getName(), typeDefinition.getTypeBuilderName());
Stream.of(assertions).forEach(assertion -> assertion.accept(typeDefinition, keyTypeDefinition));
}
use of org.apache.dubbo.metadata.definition.model.TypeDefinition in project dubbo by alibaba.
the class ArrayTypeDefinitionBuilderTest method buildAndAssertTypeDefinition.
static void buildAndAssertTypeDefinition(ProcessingEnvironment processingEnv, VariableElement field, String expectedType, String compositeType, TypeDefinitionBuilder builder, BiConsumer<TypeDefinition, TypeDefinition>... assertions) {
TypeDefinition typeDefinition = TypeDefinitionBuilder.build(processingEnv, field);
TypeDefinition subTypeDefinition = typeDefinition.getItems().get(0);
assertEquals(expectedType, typeDefinition.getType());
// assertEquals(field.getSimpleName().toString(), typeDefinition.get$ref());
assertEquals(compositeType, subTypeDefinition.getType());
// assertEquals(builder.getClass().getName(), typeDefinition.getTypeBuilderName());
Stream.of(assertions).forEach(assertion -> assertion.accept(typeDefinition, subTypeDefinition));
}
use of org.apache.dubbo.metadata.definition.model.TypeDefinition in project dubbo by alibaba.
the class DefaultTypeBuilder method build.
public static TypeDefinition build(Class<?> clazz, Map<Class<?>, TypeDefinition> typeCache) {
// final String canonicalName = clazz.getCanonicalName();
final String name = clazz.getName();
TypeDefinition td = new TypeDefinition(name);
// Try to get a cached definition
if (typeCache.containsKey(clazz)) {
return typeCache.get(clazz);
}
// Primitive type
if (!JaketConfigurationUtils.needAnalyzing(clazz)) {
return td;
}
// Custom type
TypeDefinition ref = new TypeDefinition(name);
ref.set$ref(name);
typeCache.put(clazz, ref);
if (!clazz.isPrimitive() && !isSimpleType(clazz)) {
List<Field> fields = ClassUtils.getNonStaticFields(clazz);
for (Field field : fields) {
String fieldName = field.getName();
Class<?> fieldClass = field.getType();
Type fieldType = field.getGenericType();
TypeDefinition fieldTd = TypeDefinitionBuilder.build(fieldType, fieldClass, typeCache);
td.getProperties().put(fieldName, fieldTd);
}
}
typeCache.put(clazz, td);
return td;
}
use of org.apache.dubbo.metadata.definition.model.TypeDefinition in project dubbo by alibaba.
the class MapTypeBuilder method build.
@Override
public TypeDefinition build(Type type, Class<?> clazz, Map<Class<?>, TypeDefinition> typeCache) {
if (!(type instanceof ParameterizedType)) {
return new TypeDefinition(clazz.getName());
}
ParameterizedType parameterizedType = (ParameterizedType) type;
Type[] actualTypeArgs = parameterizedType.getActualTypeArguments();
int actualTypeArgsLength = actualTypeArgs == null ? 0 : actualTypeArgs.length;
if (actualTypeArgsLength != 2) {
throw new IllegalArgumentException(MessageFormat.format("[ServiceDefinitionBuilder] Map type [{0}] with unexpected amount of arguments [{1}]." + Arrays.toString(actualTypeArgs), type, actualTypeArgs));
}
String mapType = type.toString();
TypeDefinition typeDefinition = new TypeDefinition(mapType);
for (int i = 0; i < actualTypeArgsLength; i++) {
Type actualType = actualTypeArgs[i];
TypeDefinition item = null;
Class<?> rawType = getRawClass(actualType);
if (isParameterizedType(actualType)) {
// Nested collection or map.
item = TypeDefinitionBuilder.build(actualType, rawType, typeCache);
} else if (isClass(actualType)) {
item = TypeDefinitionBuilder.build(null, rawType, typeCache);
}
typeDefinition.getItems().add(item);
}
return typeDefinition;
}
use of org.apache.dubbo.metadata.definition.model.TypeDefinition in project dubbo by alibaba.
the class MethodDefinitionBuilder method build.
/**
* Build the instance of {@link MethodDefinition}
*
* @param method {@link Method}
* @return non-null
*/
public MethodDefinition build(Method method) {
MethodDefinition md = new MethodDefinition();
md.setName(method.getName());
// Process the parameters
Class<?>[] paramTypes = method.getParameterTypes();
Type[] genericParamTypes = method.getGenericParameterTypes();
int paramSize = paramTypes.length;
String[] parameterTypes = new String[paramSize];
List<TypeDefinition> parameters = new ArrayList<>(paramSize);
for (int i = 0; i < paramSize; i++) {
TypeDefinition parameter = builder.build(genericParamTypes[i], paramTypes[i]);
parameterTypes[i] = parameter.getType();
parameters.add(parameter);
}
md.setParameterTypes(parameterTypes);
md.setParameters(parameters);
// Process return type.
TypeDefinition td = builder.build(method.getGenericReturnType(), method.getReturnType());
md.setReturnType(td.getType());
return md;
}
Aggregations