eclipse-jdt / eclipse-jdt/eclipse.jdt.ui

[Bug][Pull Up Refactoring] Pull up refactoring for the method in Nested Anonymous Class produce uncompilable code

Open
#1,772 0 comments 0 reactions 0 assignees View on GitHub
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:

![image](https://github.com/user-attachments/assets/4317577f-919d-40a2-a057-0ada6eec90ab)

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

Open the contributing 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

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.