rewrite reflection library