avoid use scala-reflect