| Summary: | [encapsulate field] Encapsulating a field when set method exist does not update return value which yields a compilation error | ||
|---|---|---|---|
| Product: | [Eclipse Project] JDT | Reporter: | Milos Gligoric <milos.gligoric> |
| Component: | UI | Assignee: | JDT-UI-Inbox <jdt-ui-inbox> |
| Status: | CLOSED WONTFIX | QA Contact: | |
| Severity: | normal | ||
| Priority: | P3 | CC: | kenneth, manju656 |
| Version: | 4.2.1 | ||
| Target Milestone: | --- | ||
| Hardware: | PC | ||
| OS: | Linux | ||
| Whiteboard: | stalebug | ||
Issue is reproducible using I20121210-0800. The code refactoring results in compiler error. This bug hasn't had any activity in quite some time. Maybe the problem got resolved, was a duplicate of something else, or became less pressing for some reason - or maybe it's still relevant but just hasn't been looked at yet. If you have further information on the current state of the bug, please add it. The information can be, for example, that the problem still occurs, that you still want the feature, that more information is needed, or that the bug is (for whatever reason) no longer relevant. -- The automated Eclipse Genie. tested with I20200107-0600 build
The refactor works for the reported bug.
However when replacing field access with getter and setter the code is malformed as:
void f() {
m = n = 0;
}
becomes:
void f() {
m = setN(0);
}
I'm looking into it.
After encapsulating and replacing with getter/setter. There is a chain of quickfixes available to fix the bad code. "Change return type to int..." and second is "Add return statement..." Propose to close. |
Steps to reproduce: 1. Invoke "Encapsulate Field" refactoring on "n" field in the code below. 2. The resulting code does not compile ("Type mismatch: cannot convert from void to int"). The problem is that there is an existing "setN" method and neither the return value is updated nor a warning is given to the user. public class EncapsulateFieldBug { // Invoke "Encapsulate Field" on "n" int m, n; void setN(int n) { this.n = n; } void f() { m = n = 0; } } (Thanks to Yilong Li for helping with the bug report.)