package railo.transformer.bytecode.statement; import java.util.Map; import railo.runtime.type.FunctionArgumentImpl; import railo.transformer.bytecode.Literal; import railo.transformer.bytecode.cast.CastBoolean; import railo.transformer.bytecode.cast.CastString; import railo.transformer.bytecode.expression.ExprBoolean; import railo.transformer.bytecode.expression.ExprString; import railo.transformer.bytecode.expression.Expression; import railo.transformer.bytecode.literal.LitInteger; import railo.transformer.bytecode.literal.LitString; public final class Argument { private static final Expression DEFAULT_TYPE_NULL = LitInteger.toExpr(FunctionArgumentImpl.DEFAULT_TYPE_NULL); private static final Expression DEFAULT_TYPE_LITERAL = LitInteger.toExpr(FunctionArgumentImpl.DEFAULT_TYPE_LITERAL); private static final Expression DEFAULT_TYPE_RUNTIME_EXPRESSION = LitInteger.toExpr(FunctionArgumentImpl.DEFAULT_TYPE_RUNTIME_EXPRESSION); private static final LitString RUNTIME_EXPRESSION = (LitString) LitString.toExprString("[runtime expression]"); private ExprString name; private ExprString type; private ExprBoolean required; private Expression defaultValue; private ExprString displayName; private ExprString hint; private Map meta; private ExprBoolean passByReference; /** * Constructor of the class * @param name * @param type * @param required * @param defaultValue * @param displayName * @param hint * @param hint2 * @param meta */ public Argument(Expression name, Expression type, Expression required, Expression defaultValue, ExprBoolean passByReference,Expression displayName, Expression hint, Map meta) { this.name=CastString.toExprString(name); this.type=CastString.toExprString(type); this.required=CastBoolean.toExprBoolean(required); this.defaultValue=defaultValue; this.displayName=litString(CastString.toExprString(displayName),RUNTIME_EXPRESSION); this.hint=litString(hint, RUNTIME_EXPRESSION); this.passByReference=passByReference; this.meta=meta; } private LitString litString(Expression expr, LitString defaultValue) { ExprString str = CastString.toExprString(expr); if(str instanceof LitString) return (LitString) str; return defaultValue; } /** * @return the defaultValue */ public Expression getDefaultValue() { return defaultValue; } public Expression getDefaultValueType(){ if(defaultValue==null) return DEFAULT_TYPE_NULL; if(defaultValue instanceof Literal) return DEFAULT_TYPE_LITERAL; return DEFAULT_TYPE_RUNTIME_EXPRESSION; } /** * @return the displayName */ public ExprString getDisplayName() { return displayName; } /** * @return the hint */ public ExprString getHint() { return hint; } /** * @return the name */ public ExprString getName() { return name; } /** * @return the passBy */ public ExprBoolean isPassByReference() { return passByReference; } /** * @return the required */ public ExprBoolean getRequired() { return required; } /** * @return the type */ public ExprString getType() { return type; } public Map getMetaData() { return meta; } }