Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Bug][Inline Method Refactoring] Inline Method refactoring for Multiple anonymous classes interacting within the method to be inlined produces uncompilable program #1781

Open
RETester66 opened this issue Nov 6, 2024 · 0 comments

Comments

@RETester66
Copy link

Steps to reproduce

  1. The input progam is following:
public class A {
    int data = 100;

    void superClassMethod() {
        System.out.println("Data: " + data);
    }

    static void callingMethod(A instance) {
        instance.methodToBeInlined(); // inline call to methodToBeInlined()
    }

    void methodToBeInlined() {
        Runnable r1 = new Runnable() {
            public void run() {
                data += 20;
            }
        };

        Runnable r2 = new Runnable() {
            public void run() {
                A.this.superClassMethod();
                r1.run();
            }
        };

        r2.run();
    }
}
  1. Left click methodToBeInlined() in instance.methodToBeInlined(); like I comment. Then, right click -> Refactor -> Inline. Use the default configuration to inline this method like following, click ok:

image

The program is successfully refactored without any warning or exception. The refactored program is following, which contains syntax error:

public class A {
    int data = 100;

    void superClassMethod() {
        System.out.println("Data: " + data);
    }

    static void callingMethod(A instance) {
        Runnable r1 = instance.new Runnable() {// syntax error
		    public void run() {
		        instance.data += 20;
		    }
		};
		
		Runnable r2 = instance.new Runnable() {// syntax error
		    public void run() {
		        A.this.superClassMethod();
		        r1.run();
		    }
		};
		
		r2.run(); // inline call to methodToBeInlined()
    }

    void methodToBeInlined() {
        Runnable r1 = new Runnable() {
            public void run() {
                data += 20;
            }
        };

        Runnable r2 = new Runnable() {
            public void run() {
                A.this.superClassMethod();
                r1.run();
            }
        };

        r2.run();
    }
}

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)

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

No branches or pull requests

1 participant