package org.jboss.windup.rules.apps.java.service;
import org.apache.commons.lang3.StringUtils;
import org.jboss.windup.graph.GraphContext;
import org.jboss.windup.graph.service.GraphService;
import org.jboss.windup.rules.apps.java.model.JavaClassModel;
import org.jboss.windup.rules.apps.java.model.JavaMethodModel;
import org.jboss.windup.rules.apps.java.model.JavaParameterModel;
/**
* Adds createJavaMethod() and methodParametersMatch().
*/
public class JavaMethodService extends GraphService<JavaMethodModel>
{
private final JavaParameterService paramService;
public JavaMethodService(GraphContext context)
{
super(context, JavaMethodModel.class);
this.paramService = new JavaParameterService(context);
}
public synchronized JavaMethodModel createJavaMethod(JavaClassModel clz, String javaMethod,
JavaClassModel... params)
{
for (JavaMethodModel method : clz.getMethod(javaMethod))
{
if (method.countParameters() != params.length)
{
continue;
}
if (methodParametersMatch(method, params))
{
return method;
}
}
JavaMethodModel method = create();
method.setMethodName(javaMethod);
for (int i = 0, j = params.length; i < j; i++)
{
JavaParameterModel param = paramService.create();
param.setPosition(i);
param.setJavaType(params[i]);
}
return method;
}
protected boolean methodParametersMatch(JavaMethodModel method, JavaClassModel... params)
{
for (int i = 0, j = params.length; i < j; i++)
{
JavaParameterModel param = method.getParameter(i);
JavaClassModel paramVal = param.getJavaType();
if (!StringUtils.equals(paramVal.getQualifiedName(), paramVal.getQualifiedName()))
{
return false;
}
}
return true;
}
}