in maven-faces-plugin/src/main/java/org/apache/myfaces/trinidadbuild/plugin/faces/generator/taglib/MyFacesComponentTagGenerator.java [332:423]
private void _writeSetMethodBinding(
PrettyWriter out,
String componentClass,
PropertyBean property) throws IOException
{
String propName = property.getPropertyName();
String propKey = Util.getConstantNameFromProperty(propName, "_KEY");
String propVar = "_" + propName;
if (_is12)
{
out.println("if (" + propVar + " != null)");
out.println("{");
out.indent();
if (GeneratorHelper.isActionListener(property, _is12))
{
out.println("comp.addActionListener(new MethodExpressionActionListener(" + propVar + "));");
}
else if (GeneratorHelper.isValueChangeListener(property, _is12))
{
out.println("comp.addValueChangeListener(new MethodExpressionValueChangeListener(" + propVar + "));");
}
else if (GeneratorHelper.isValidator(property, _is12))
{
out.println("comp.addValidator(new MethodExpressionValidator(" + propVar + "));");
}
else
{
out.println("bean.setProperty(" + componentClass + "." + propKey + ", " +
"new MethodExpressionMethodBinding(" + propVar + "));");
}
out.unindent();
out.println("}");
}
else
{
MethodSignatureBean signature = property.getMethodBindingSignature();
String[] paramTypes = (signature != null) ? signature.getParameterTypes() : null;
String classArray;
if (paramTypes == null || paramTypes.length == 0)
{
classArray = "new Class[0]";
}
else
{
StringBuffer sb = new StringBuffer();
sb.append("new Class[]{");
for (int i = 0; i < paramTypes.length; i++)
{
if (i > 0)
sb.append(',');
sb.append(paramTypes[i]);
sb.append(".class");
}
// TODO: remove trailing comma
sb.append(',');
sb.append('}');
classArray = sb.toString();
}
out.println("if (" + propVar + " != null)");
out.println("{");
out.indent();
if (isStringMethodBindingReturnType(signature))
{
out.println("MethodBinding mb;");
out.println("if (isValueReference(" + propVar + "))");
out.indent();
out.println("mb = createMethodBinding(" + propVar + ", " + classArray + ");");
out.unindent();
out.println("else");
out.indent();
out.println("mb = new org.apache.myfaces.trinidadinternal.taglib.ConstantMethodBinding(" + propVar + ");");
out.unindent();
}
else
{
// never a literal, no need for ConstantMethodBinding
out.println("MethodBinding mb = createMethodBinding(" + propVar + ", " +
classArray + ");");
}
out.println("bean.setProperty(" + componentClass + "." + propKey + ", mb);");
out.unindent();
out.println("}");
}
}