@Override
	public Object execute(Scope scope, Statement tokens) {
		Method method = null;		
		Object[] args = new Object[tokens.size()];
		for (int i = 0 ; i < args.length;++i){
			try {
				args[i] = scope.getValue(tokens.get(i));
			} catch (PoslException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
			if(args[i] instanceof Java){
				Java j = (Java)args[i];
				args[i] = j.getObject();
			}
		}
		method = appropriateMethod(args);

		try {
			Object reply = method.invoke(reference, args);
			if(reply == null) {
				return null;
			} else if(reply instanceof Number || reply instanceof String){
				return reply;
			} else {
				return new Java(reply);
			}
		}catch(Exception e){
			throw new RuntimeException(e);
		}

	}