I see two reasonable alternatives. Neither involves a CommonCas.
a) The JCas assumes its wrapper nature. It implements its additional
functionality, and for all base functions, users refer to the CAS.
b) The JCas extends the CAS. For conflicting methods, use a different
method name.
I like a) better because it reflects the nature of the JCas.
The CommonCas proposal shows the problematic nature of forwarding
functions. Those common methods started out as forwarding functions,
and in the implementation, I guess they still are. Then we notice that
there are a lot of common APIs between the JCas and the CAS. Of course
there are, all those forwarding functions.
--Thilo