Seems like we are forced to re-use Class objects to hold this additional info. Remi says that there should only be "primary" (ref type) primitive class literals (Foo.class) and no (Foo.ref.class or Foo.val.class) and that val type mirrors should be obtained by calling a method (such as Foo.class.asPrimitiveValType()), but that makes methods/constructors using val-typed parameters second class citizens when using reflection.
And even worse with MethodHandle.