homberghp commented on issue #8301: URL: https://github.com/apache/netbeans/issues/8301#issuecomment-2821297836
Some testing in NB 24, 25, and 26-rc1 show that what happens is = before refactoring ``` class A extends C { } class B { public static void main() { final int b = 2; new A() { void m() { System.out.println(b); } }; } } class C { protected final int b = 1; } ``` = after refactoring ``` class A extends C{ protected final int b = 1; } public class B { public static void main() { final int b = 2; new A() { protected final int b = 1; //<1> void m() { System.out.println(b); // <2> } }; } } class C { } ``` So the refactoring does 2 things: * push down the field to A. * introduce a new field `<1>` in the anonymous sub-class of A (called B$1 because it is an anonylous inner class of B) The later field hides the field in A proper. This refactoring DOES NOT change behaviour. A class, even an inner class always looks at its own fields first, either directly declared fields or reachable (on-private) fields of super classes. After that, the field in outer class may be considered. The `final int b` is a local variable in method `main`, and is only reached when no field in A, or the subclass or any of its super classes hides b. The fact that the anonymous inner class gets a field through the refactoring surprises me but is a logical consequence of push-down when there are more subclasses. Doing it in the way NetBeans does things preserves semantics of the push down which is a good thing. I can imagine a feature request that when there are more levels of subclassing, you would get the option to choose to what level would want to push down. -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: notifications-unsubscr...@netbeans.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org --------------------------------------------------------------------- To unsubscribe, e-mail: notifications-unsubscr...@netbeans.apache.org For additional commands, e-mail: notifications-h...@netbeans.apache.org For further information about the NetBeans mailing lists, visit: https://cwiki.apache.org/confluence/display/NETBEANS/Mailing+lists