netbeans icon indicating copy to clipboard operation
netbeans copied to clipboard

Refactoring class/record name duplicates switch "when" cases if the class/record is instantiated in those cases

Open mrj760 opened this issue 8 months ago • 2 comments

Apache NetBeans version

Apache NetBeans 25

What happened

Pretty difficult to title this one or succinctly describe it. Easier to just look at the before/after...

...But basically if you have a switch case that uses "when" and there is an instantiation within it -- if you were to refactor the class name (of the thing being instantiated) the "when" clauses get duplicated.

Language / Project Type / NetBeans Component

Maven Application

How to reproduce

====

Example 1. Going to refactor A->B.

====

Before:
public class Test {
    record A() {
    }

    void method(Object o) {
        switch(o) {
            case Integer i when i == 0 -> {
                var r = new A();
            }
            default -> {
            }
        }
    }
}
After:
public class Test {
    record B() {
    }

    void method(Object o) {
        switch(o) {
            case Integer i when i == 0 when i == 0 -> {
                var r = new B();
            }
            default -> {
            }
        }
    }
}

====

Example 2. Same process, but with some more conditions in the when.

====

Before:
public class Test {
    record A() {
    }

    void method(Object o) {
        switch(o) {
            case Integer i when i == 0 || i == 0
                                || i == 0 -> {
                var r = new A();
            }
            default -> {
            }
        }
    }
}
After:
public class Test {
    record B() {
    }

    void method(Object o) {
        switch(o) {
            case Integer i when i == 0 || i == 0
                                || i == 0 when i == 0 || i == 0
                                || i == 0 -> {
                var r = new B();
            }
            default -> {
            }
        }
    }
}

Did this work correctly in an earlier version?

No / Don't know

Operating System

Win10

JDK

OpenJDK21

Apache NetBeans packaging

Apache NetBeans provided installer

Anything else

Just some lines from the IDE log that seemed relevant. Saw these after doing Undo for the refactor. I deleted lines that seemed irrelevant.

WARNING [null]: Last record repeated 2 more times.
INFO [org.netbeans.modules.parsing.impl.TaskProcessor]: Task: org.netbeans.modules.java.editor.semantic.SemanticHighlighter@65fd803a : class org.netbeans.modules.java.editor.semantic.SemanticHighlighter ignored cancel for 102 ms.
INFO [org.netbeans.modules.websvc.editor.hints.WebServicesRulesEngine]: Unknown element type: RECORD.
INFO [org.netbeans.modules.refactoring.spi.impl.ParametersPanel]: org.netbeans.modules.refactoring.api.AbstractRefactoring$ProgressL@625e1119 called start multiple times
INFO [null]: Last record repeated again.
WARNING [null]: Last record repeated again.
INFO [org.netbeans.modules.refactoring.spi.impl.ParametersPanel]: org.netbeans.modules.refactoring.api.RefactoringSession@424ae5ef called start multiple times
INFO [org.netbeans.modules.websvc.editor.hints.WebServicesRulesEngine]: Unknown element type: RECORD.
WARNING [null]: Last record repeated again.
INFO [org.netbeans.modules.websvc.editor.hints.WebServicesRulesEngine]: Unknown element type: RECORD.
WARNING [null]: Last record repeated again.
INFO [org.netbeans.modules.websvc.editor.hints.WebServicesRulesEngine]: Unknown element type: RECORD.
INFO [org.netbeans.modules.websvc.editor.hints.WebServicesRulesEngine]: Unknown element type: RECORD.

Are you willing to submit a pull request?

No

mrj760 avatar May 07 '25 19:05 mrj760

I would like to pick this one up. It may be related to similar things as in #7044

homberghp avatar Jun 13 '25 10:06 homberghp

Most likely the issue is in CausalDiff.

homberghp avatar Jun 13 '25 15:06 homberghp