public Predicate(Object target, Method m, String arg) {
        super(m.getName());
        
    	if (arg.startsWith("ep.") || arg.startsWith("co.")) {
    		arg = arg.substring(3);
    	}
    	
        if (!boolean.class.equals(m.getReturnType()) && !Boolean.class.equals(m.getReturnType())) {
            throw new IllegalArgumentException("Method should return boolean type");
        }
        Class<?>[] params = m.getParameterTypes();
        try {
            if (target != null && !target.getClass().getMethod(m.getName(), params).equals(m)) {
                throw new IllegalArgumentException("Method isn't from this object");
            }
        } catch (NoSuchMethodException e) {
            throw new IllegalArgumentException("Object hasn't such method");
        }
        this.arg = arg;
        this.method = m;
        this.target = target;
    }