eclipse-jdt / eclipse-jdt/eclipse.jdt.ui
[Bug][Pull Up Refactoring] Pull up refactoring for the method in Nested Anonymous Class produce uncompilable code
- Dominant language
- Java
- Stars
- 59
- Forks
- 127
- Avg merge
- 23h 30m
- Merged PRs (30d)
- 35
Description
## Steps to reproduce
The input program is following:
```
public class A {
public class BaseTargetClass {}
public class OriginalClass {
public int data = 40;
public void memberMethod() {
System.out.println("Nested anonymous data: " + data);
}
public class NestedOriginalClass extends BaseTargetClass {
void setup() {
new BaseTargetClass() {
void methodToBePulledUp() {
new BaseTargetClass() {
void innerMethod() {
System.out.println("Deeply nested method: " + data);
}
};
}
};
}
}
}
}
```
Left click the methodToBePulledUp(), then right click -> Refactor -> Pull Up, and use the default configurations (the destination is set as BaseTargetClass by default) as following, click Finish:

The refactoring is performed without any warning or exception. The refactored program is following, which contains syntax error:
```
public class A {
public class BaseTargetClass {
void methodToBePulledUp() {
new BaseTargetClass() {
void innerMethod() {
System.out.println("Deeply nested method: " + data);// syntax error
}
};
}}
public class OriginalClass {
public int data = 40;
public void memberMethod() {
System.out.println("Nested anonymous data: " + data);
}
public class NestedOriginalClass extends BaseTargetClass {
void setup() {
new BaseTargetClass() {
};
}
}
}
}
```
## Environment
### OS Version
Windows 10, 64-bit Operating System, x64-based processor
### Eclipse Version
Eclipse IDE for Enterprise Java and Web Developers (includes Incubating components)
Version: 2024-09 (4.33.0)
Build id: 20240905-0614
### JDK Version
java version "22.0.1" 2024-04-16
Java(TM) SE Runtime Environment (build 22.0.1+8-16)
Java HotSpot(TM) 64-Bit Server VM (build 22.0.1+8-16, mixed mode, sharing)
Contributor guide
Research direction
Reproduce the issue in Eclipse using the nested anonymous-class example, selecting methodToBePulledUp and running Refactor -> Pull Up with the default destination. Start by tracing the Pull Up refactoring entry point and its handling of nested anonymous classes; done means the generated Java source compiles without losing valid access to data.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- java
- Domain
- tooling
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 45/100