The current implementation of VisibiltyTransformer determines visibility using the owning classes at the access sites. This is insufficient in the unusual case where a parent class accesses one of its own members via one of its child classes. An example of this is in client build 550, client!mo.a(Ljava/awt/Component;BILsignlink!pm;I)Lclient!tj; To correct this, the minimum visibility for members in an open class is now protected, not private. In many cases this results in members having a wider access than necessary. A more sophisticated approach would be to determine the type (or possible types) used at the access site, so only members that are accessed in this unusual manner need to have their visibility weakened. This requires type analysis of everything on the stack. This change also introduces an implicit dependency from VisibilityTransformer to FinalTransformer, as running the latter first will minimise the set of non-final classes. Signed-off-by: Sophia <git@sophia.gg>pull/132/head
parent
6634f3e711
commit
8e5557635c
Loading…
Reference in new issue