/*
* Copyright (c) MuleSoft, Inc. All rights reserved. http://www.mulesoft.com
* The software in this package is published under the terms of the CPAL v1.0
* license, a copy of which has been included with this distribution in the
* LICENSE.txt file.
*/
package org.mule.runtime.module.launcher.coreextension;
import org.mule.runtime.container.api.MuleCoreExtension;
import org.mule.runtime.container.api.MuleCoreExtensionDependency;
import java.lang.reflect.Method;
import java.util.LinkedList;
import java.util.List;
/**
* Discovers dependencies between {@link MuleCoreExtension} instances looking for methods annotated with
* {@link MuleCoreExtensionDependency}
*/
public class ReflectionMuleCoreExtensionDependencyDiscoverer implements MuleCoreExtensionDependencyDiscoverer {
@Override
public List<LinkedMuleCoreExtensionDependency> findDependencies(MuleCoreExtension coreExtension) {
List<LinkedMuleCoreExtensionDependency> result = new LinkedList<LinkedMuleCoreExtensionDependency>();
final Method[] methods = coreExtension.getClass().getMethods();
for (Method method : methods) {
if (method.getAnnotation(MuleCoreExtensionDependency.class) != null) {
final Class<?>[] parameterTypes = method.getParameterTypes();
if (parameterTypes.length == 1) {
if (MuleCoreExtension.class.isAssignableFrom(parameterTypes[0])) {
final LinkedMuleCoreExtensionDependency linkedMuleCoreExtensionDependency =
new LinkedMuleCoreExtensionDependency((Class<? extends MuleCoreExtension>) parameterTypes[0], method);
result.add(linkedMuleCoreExtensionDependency);
}
}
}
}
return result;
}
}