package org.jboss.seam.jsf; import java.io.Serializable; import javax.el.MethodExpression; import javax.faces.context.FacesContext; import javax.faces.el.EvaluationException; import javax.faces.el.MethodBinding; import javax.faces.el.MethodNotFoundException; /** * Nobody should be using MethodBinding anymore, but if they * are, we need this. * * @author Gavin King * */ @SuppressWarnings("deprecation") @Deprecated public class UnifiedELMethodBinding extends MethodBinding implements Serializable { private transient MethodExpression methodExpression; private String expressionString; private Class[] argTypes; public UnifiedELMethodBinding() {} public UnifiedELMethodBinding(String expressionString, Class[] argTypes) { this.expressionString = expressionString; this.argTypes = argTypes; } @Override public String getExpressionString() { return expressionString; } @Override public Class getType(FacesContext ctx) throws MethodNotFoundException { return getMethodExpression(ctx).getMethodInfo( ctx.getELContext() ).getReturnType(); } @Override public Object invoke(FacesContext ctx, Object[] args) throws EvaluationException, MethodNotFoundException { return getMethodExpression(ctx).invoke( ctx.getELContext(), args); } @Override public String toString() { return getExpressionString(); } private MethodExpression getMethodExpression(FacesContext ctx) { if (methodExpression==null) { // In JSF 1.1 EL (argTypes = null) == (argTypes = new Class[0]), but not in Unified EL methodExpression = ctx.getApplication().getExpressionFactory() .createMethodExpression( ctx.getELContext(), expressionString, Object.class, argTypes == null ? new Class[0] : argTypes ); } return methodExpression; } }