use of org.mule.runtime.module.extension.api.loader.java.type.Type in project mule by mulesoft.
the class IntrospectionUtils method collectRelativeClassesAsString.
/**
* Given a {@link MetadataType} it adds all the {@link Class} that are related from that type. This includes generics of an
* {@link ArrayType}, open restriction of an {@link ObjectType} as well as its fields.
*
* @param type {@link MetadataType} to inspect
* @return {@link Set<Class>>} with the classes reachable from the {@code type}
*/
public static Set<String> collectRelativeClassesAsString(MetadataType type) {
Set<String> relativeClasses = new HashSet<>();
type.accept(new MetadataTypeVisitor() {
@Override
public void visitArrayType(ArrayType arrayType) {
arrayType.getType().accept(this);
}
@Override
public void visitObjectField(ObjectFieldType objectFieldType) {
objectFieldType.getValue().accept(this);
}
@Override
public void visitObject(ObjectType objectType) {
if (objectType.getMetadataFormat() != JAVA) {
return;
}
final String clazz = getId(objectType).orElse(null);
if (clazz == null || relativeClasses.contains(clazz)) {
return;
}
Optional<ClassInformationAnnotation> classInformation = objectType.getAnnotation(ClassInformationAnnotation.class);
classInformation.ifPresent(classInformationAnnotation -> relativeClasses.addAll(classInformationAnnotation.getGenericTypes()));
relativeClasses.add(clazz);
objectType.getFields().forEach(objectFieldType -> objectFieldType.accept(this));
objectType.getOpenRestriction().ifPresent(t -> t.accept(this));
}
@Override
public void visitString(StringType stringType) {
if (stringType.getMetadataFormat() == JAVA && isEnum(stringType)) {
getId(stringType).ifPresent(relativeClasses::add);
}
}
});
return relativeClasses;
}
use of org.mule.runtime.module.extension.api.loader.java.type.Type in project mule by mulesoft.
the class IntrospectionUtils method returnListOfMessagesType.
private static MetadataType returnListOfMessagesType(Type returnType, Type resultType) {
if (resultType.getGenerics().isEmpty()) {
AnyType anyType = typeBuilder().anyType().build();
return getListOfMessageType(returnType, anyType, anyType);
} else {
TypeGeneric genericType = resultType.getGenerics().get(0);
Type payloadType = genericType.getConcreteType();
MetadataType outputType;
if (payloadType.isAnyType()) {
outputType = typeBuilder().anyType().build();
} else {
if (payloadType.isAssignableTo(TypedValue.class)) {
payloadType = payloadType.getGenerics().get(0).getConcreteType();
}
outputType = payloadType.asMetadataType();
}
Type attributesType = resultType.getGenerics().get(1).getConcreteType();
MetadataType attributesOutputType = attributesType.isAnyType() ? typeBuilder().anyType().build() : attributesType.asMetadataType();
return getListOfMessageType(returnType, outputType, attributesOutputType);
}
}
use of org.mule.runtime.module.extension.api.loader.java.type.Type in project mule by mulesoft.
the class MetadataComponentModelValidatorTestCase method before.
@Before
public void before() {
when(extensionModel.getOperationModels()).thenReturn(asList(operationModel));
when(extensionModel.getSourceModels()).thenReturn(asList(sourceModel));
ExtensionTypeDescriptorModelProperty descriptorModelProperty = mock(ExtensionTypeDescriptorModelProperty.class);
when(extensionModel.getModelProperty(ExtensionTypeDescriptorModelProperty.class)).thenReturn(of(descriptorModelProperty));
Type extensionType = mock(Type.class);
when(descriptorModelProperty.getType()).thenReturn(extensionType);
when(extensionType.getDeclaringClass()).thenReturn(of(this.getClass()));
when(operationModel.getOutput()).thenReturn(new ImmutableOutputModel(EMPTY, toMetadataType(String.class), false, emptySet()));
when(operationModel.getOutputAttributes()).thenReturn(new ImmutableOutputModel(StringUtils.EMPTY, create(JAVA).voidType().build(), false, emptySet()));
when(operationModel.getName()).thenReturn("operation");
mockMetadataResolverFactory(operationModel, null);
when(sourceModel.getOutput()).thenReturn(new ImmutableOutputModel(EMPTY, toMetadataType(String.class), false, emptySet()));
when(sourceModel.getOutputAttributes()).thenReturn(new ImmutableOutputModel(StringUtils.EMPTY, create(JAVA).voidType().build(), false, emptySet()));
when(sourceModel.getName()).thenReturn("source");
when(sourceModel.getSuccessCallback()).thenReturn(of(sourceCallbackModel));
when(sourceModel.getErrorCallback()).thenReturn(of(sourceCallbackModel));
mockMetadataResolverFactory(sourceModel, null);
MetadataKeyIdModelProperty keyIdModelProperty = new MetadataKeyIdModelProperty(loader.load(InvalidMetadataKeyIdPojo.class), EMPTY);
when(sourceModel.getModelProperty(MetadataKeyIdModelProperty.class)).thenReturn(of(keyIdModelProperty));
when(operationModel.getModelProperty(MetadataKeyIdModelProperty.class)).thenReturn(empty());
when(sourceModel.getModelProperty(ExtensionOperationDescriptorModelProperty.class)).thenReturn(empty());
when(operationModel.getModelProperty(ExtensionOperationDescriptorModelProperty.class)).thenReturn(empty());
visitableMock(operationModel, sourceModel);
dictionaryType = typeBuilder.objectType().openWith(toMetadataType(Object.class)).build();
}
use of org.mule.runtime.module.extension.api.loader.java.type.Type in project mule by mulesoft.
the class SubTypesDeclarationEnricher method enrich.
@Override
public void enrich(ExtensionLoadingContext extensionLoadingContext) {
ExtensionDeclarer declarer = extensionLoadingContext.getExtensionDeclarer();
ExtensionDeclaration extensionDeclaration = declarer.getDeclaration();
Optional<ExtensionTypeDescriptorModelProperty> implementingType = extensionDeclaration.getModelProperty(ExtensionTypeDescriptorModelProperty.class);
if (!implementingType.isPresent()) {
return;
}
Type type = implementingType.get().getType();
List<AnnotationValueFetcher<SubTypeMapping>> typeMappings = parseRepeatableAnnotation(type, SubTypeMapping.class, c -> ((SubTypesMapping) c).value());
if (!typeMappings.isEmpty()) {
declareSubTypesMapping(declarer, typeMappings, extensionDeclaration.getName());
}
}
use of org.mule.runtime.module.extension.api.loader.java.type.Type in project mule by mulesoft.
the class IntrospectionUtilsTestCase method getInterfaceGenerics.
@Test
public void getInterfaceGenerics() {
Type connectionProvider = typeSupplier.apply(TransactionalPetStoreConnectionProvider.class);
List<Type> interfaceGenerics = connectionProvider.getInterfaceGenerics(ConnectionProvider.class);
assertThat(interfaceGenerics.size(), is(1));
Type type = interfaceGenerics.get(0);
assertThat(type.isSameType(TransactionalPetStoreClient.class), is(true));
}
Aggregations