FML icon indicating copy to clipboard operation
FML copied to clipboard

AccessTransformer does not transform subclasses

Open zlainsama opened this issue 10 years ago • 12 comments

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.

zlainsama avatar Oct 09 '14 10:10 zlainsama

This is not possible to fix without major trouble. ClassTransformers don't know about the classpath, they only get one class at a time.

diesieben07 avatar Oct 09 '14 12:10 diesieben07

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.

LexManos avatar Oct 09 '14 12:10 LexManos

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

jeffreykog avatar Oct 09 '14 12:10 jeffreykog

Though it doesn't mean other inherited versions will load at the same time.

Cazzar avatar Oct 09 '14 13:10 Cazzar

They can load later. Thats no problem. By that time the inherition info is already built

jeffreykog avatar Oct 09 '14 13:10 jeffreykog

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?

LexManos avatar Oct 09 '14 23:10 LexManos

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.

zlainsama avatar Oct 09 '14 23:10 zlainsama

by change root class, i mean define AT rules for root class.

zlainsama avatar Oct 09 '14 23:10 zlainsama

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.

jeffreykog avatar Oct 10 '14 06:10 jeffreykog

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.

LexManos avatar Oct 10 '14 08:10 LexManos

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

zlainsama avatar Oct 16 '14 23:10 zlainsama

and for minecraft code you can have pre-generated inheritance data, and runtime monitoring changes

zlainsama avatar Oct 16 '14 23:10 zlainsama