Skip to content

Commit 868328b

Browse files
committed
Add one more style we ought to cover
1 parent 81c9699 commit 868328b

File tree

2 files changed

+71
-11
lines changed

2 files changed

+71
-11
lines changed

src/main/java/org/openrewrite/java/migrate/lombok/LombokUtils.java

Lines changed: 17 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -99,26 +99,32 @@ static boolean isSetter(J.MethodDeclaration method) {
9999
return false;
100100
}
101101
J.Assignment assignment = (J.Assignment) method.getBody().getStatements().get(0);
102-
J.FieldAccess fieldAccess = (J.FieldAccess) assignment.getVariable();
103-
if (!method.getSimpleName().equals(deriveSetterMethodName(fieldAccess))) {
102+
J.FieldAccess assignedField = (J.FieldAccess) assignment.getVariable();
103+
if (!method.getSimpleName().equals(deriveSetterMethodName(assignedField))) {
104104
return false;
105105
}
106106

107107
// Check argument is assigned to field
108108
J.VariableDeclarations variableDeclarations = (J.VariableDeclarations) method.getParameters().get(0);
109109
J.VariableDeclarations.NamedVariable param = variableDeclarations.getVariables().get(0);
110-
JavaType paramType = param.getType();
111-
String paramName = param.getName().toString();
112110

111+
// type of parameter and field have to match
112+
if (!param.getType().equals(assignedField.getType())) {
113+
return false;
114+
}
113115

114-
return
115-
// assigned value is exactly the parameter
116-
assignment.getAssignment().toString().equals(paramName) // type of parameter and field have to match
117-
&&
118-
119-
// type of parameter and field have to match
120-
param.getType().equals(fieldAccess.getType());
116+
// Check field is declared on method type
117+
JavaType.FullyQualified declaringType = method.getMethodType().getDeclaringType();
118+
if (assignedField.getTarget() instanceof J.Identifier) {
119+
J.Identifier target = (J.Identifier) assignedField.getTarget();
120+
return target.getFieldType() != null && declaringType == target.getFieldType().getOwner();
121+
} else if (assignedField.getTarget() instanceof J.FieldAccess) {
122+
Expression target = ((J.FieldAccess) assignedField.getTarget()).getTarget();
123+
return target instanceof J.Identifier && ((J.Identifier) target).getFieldType() != null &&
124+
declaringType == ((J.Identifier) target).getFieldType().getOwner();
125+
}
121126

127+
return false;
122128
}
123129

124130
private static String deriveSetterMethodName(J.FieldAccess fieldAccess) {

src/test/java/org/openrewrite/java/migrate/lombok/UseLombokSetterTest.java

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,60 @@ class A {
6666
);
6767
}
6868

69+
@Test
70+
void replaceSetterWhenArgNameWithUnderscore() {
71+
rewriteRun(// language=java
72+
java(
73+
"""
74+
class A {
75+
76+
int foo = 9;
77+
78+
public void setFoo(int foo_) {
79+
this.foo = foo_;
80+
}
81+
}
82+
""",
83+
"""
84+
import lombok.Setter;
85+
86+
class A {
87+
88+
@Setter
89+
int foo = 9;
90+
}
91+
"""
92+
)
93+
);
94+
}
95+
96+
@Test
97+
void replaceSetterWhenArgNameWithUnderscoreAndUnqualifiedFieldAccess() {
98+
rewriteRun(// language=java
99+
java(
100+
"""
101+
class A {
102+
103+
int foo = 9;
104+
105+
public void setFoo(int foo_) {
106+
foo = foo_;
107+
}
108+
}
109+
""",
110+
"""
111+
import lombok.Setter;
112+
113+
class A {
114+
115+
@Setter
116+
int foo = 9;
117+
}
118+
"""
119+
)
120+
);
121+
}
122+
69123
@Test
70124
void tolerantToNonstandardParameterNames() {
71125
rewriteRun(// language=java

0 commit comments

Comments
 (0)