Skip to content
This repository has been archived by the owner on May 26, 2018. It is now read-only.

AccessTransformer does not transform subclasses #538

Open
zlainsama opened this issue Oct 9, 2014 · 12 comments
Open

AccessTransformer does not transform subclasses #538

zlainsama opened this issue Oct 9, 2014 · 12 comments

Comments

@zlainsama
Copy link

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.

@diesieben07
Copy link
Contributor

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

@LexManos
Copy link
Member

LexManos commented Oct 9, 2014

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.

@jeffreykog
Copy link
Contributor

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

@Cazzar
Copy link

Cazzar commented Oct 9, 2014

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

@jeffreykog
Copy link
Contributor

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

@LexManos
Copy link
Member

LexManos commented Oct 9, 2014

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?

@zlainsama
Copy link
Author

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
Copy link
Author

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

@jeffreykog
Copy link
Contributor

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.

@LexManos
Copy link
Member

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.

@zlainsama
Copy link
Author

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
Copy link
Author

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

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
None yet
Projects
None yet
Development

No branches or pull requests

5 participants