FML
FML copied to clipboard
AccessTransformer does not transform subclasses
currently, AT will only transform the specific class, its subclasses will stay same. this became a problem when you need to change access of a method, you have to add every single subclasses and ones that other mods add.
This is not possible to fix without major trouble. ClassTransformers don't know about the classpath, they only get one class at a time.
Unless you come up with a good reliable idea on how to generate the inheritance map at runtime this might be feasible. But for now it simply isn't so this is classified as wont-fix/not-bug.
As superclasses are loaded before the classes that extend them, this might actually be easy to do. I'll try something when i get home
Though it doesn't mean other inherited versions will load at the same time.
They can load later. Thats no problem. By that time the inherition info is already built
MM yes, but what about interfaces or the like that are declared in the sub-c;ass but implemented by the parent? How do you deal with those?
you don't need to deal with those, i think. you just want access to the method through the end instance, the instance itself can access superclasses if it is coded like that. (i really think its so, but i'm not sure. if not, you can simply change 'root' class) interfaces don't need to change, unless you are changing method to lower visibility, that way, bad things will happen.
by change root class, i mean define AT rules for root class.
That is indeed a problem, lex. What we can do is use the asm class adapter that searches for annotations to also collect inheritance data and use that in the AT.
jk if you find a solution let me know. Don't forget about the issues of mods adding things to the classpath without us knowing about it.
It needs a proper system for ClassTransformers. like: having different layers for different transformers, one for monitoring changes to gather inheritance data, one for performing minor changes like changing access, and one for normal uses or uncategorized uses having different levels of privileges to ignoring certain things like IFMLLoadingPlugin.TransformerExclusions
and for minecraft code you can have pre-generated inheritance data, and runtime monitoring changes