apache / netbeans

Apache NetBeans
https://netbeans.apache.org/
Apache License 2.0
2.64k stars 844 forks source link

Refactor record to class and vice versa #7762

Open maffe opened 1 week ago

maffe commented 1 week ago

Description

NetBeans should assist in changing records to classes and classes to records.

It already provides a hint to convert some classes to an interface, for example an empty class like

public class Empty {
}

can be converted to

public interface Empty {
}

with two clicks.

A record like

public record R(String name) {
}

should be converted to something like

public class R {

    private String name;

    public R(final String name) {
        this.name = name;
    }

    public String name() {
        return name;
    }
}

and a class

public class C {

    private String name;

    public C(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }
}

to

public record C(String name) {

    public String getName() {
        return name;
    }
}

Unfortunately classes and records have different naming conventions for getters, but that can be addressed in further refactoring steps.

Use case/motivation

Sometimes I start with a class or a record and later the other type seems to be more appropriate, but it is tedious to do the conversion by hand.

Related issues

Currently the refactoring action „Move inner to outer level“ converts records to classes, but I don’t think it should do that and it’s broken anyway (#7044, #6139).

Are you willing to submit a pull request?

No