Skip to content

Commit da6ad68

Browse files
authored
Don't replace instance methods accessing static fields (#871)
Fixes #870
1 parent 357191e commit da6ad68

File tree

3 files changed

+88
-3
lines changed

3 files changed

+88
-3
lines changed

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

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@
2222
import org.openrewrite.java.AnnotationMatcher;
2323
import org.openrewrite.java.service.AnnotationService;
2424
import org.openrewrite.java.tree.Expression;
25+
import org.openrewrite.java.tree.Flag;
2526
import org.openrewrite.java.tree.J;
2627
import org.openrewrite.java.tree.JavaType;
2728

@@ -62,6 +63,10 @@ static boolean isGetter(Cursor cursor, AnnotationService service) {
6263
if (returnExpression instanceof J.Identifier) {
6364
J.Identifier identifier = (J.Identifier) returnExpression;
6465
if (identifier.getFieldType() != null && declaringType == identifier.getFieldType().getOwner()) {
66+
// Don't replace instance methods accessing static fields
67+
if (identifier.getFieldType().hasFlags(Flag.Static)) {
68+
return false;
69+
}
6570
// Check return: type and matching field name
6671
return hasMatchingTypeAndGetterName(method, identifier.getType(), identifier.getSimpleName());
6772
}
@@ -70,6 +75,11 @@ static boolean isGetter(Cursor cursor, AnnotationService service) {
7075
Expression target = fieldAccess.getTarget();
7176
if (target instanceof J.Identifier && ((J.Identifier) target).getFieldType() != null &&
7277
declaringType == ((J.Identifier) target).getFieldType().getOwner()) {
78+
// Don't replace instance methods accessing static fields
79+
if (fieldAccess.getName().getFieldType() != null &&
80+
fieldAccess.getName().getFieldType().hasFlags(Flag.Static)) {
81+
return false;
82+
}
7383
// Check return: type and matching field name
7484
return hasMatchingTypeAndGetterName(method, fieldAccess.getType(), fieldAccess.getSimpleName());
7585
}
@@ -153,15 +163,22 @@ static boolean isSetter(Cursor cursor, AnnotationService service) {
153163
J.Identifier assignedVar = (J.Identifier) variable;
154164
if (hasMatchingSetterMethodName(method, assignedVar.getSimpleName())) {
155165
// Check field is declared on method type
156-
return assignedVar.getFieldType() != null && declaringType == assignedVar.getFieldType().getOwner();
166+
if (assignedVar.getFieldType() != null && declaringType == assignedVar.getFieldType().getOwner()) {
167+
// Don't replace instance methods accessing static fields
168+
return !assignedVar.getFieldType().hasFlags(Flag.Static);
169+
}
157170
}
158171
} else if (variable instanceof J.FieldAccess) {
159172
J.FieldAccess assignedField = (J.FieldAccess) variable;
160173
if (hasMatchingSetterMethodName(method, assignedField.getSimpleName())) {
161174
Expression target = assignedField.getTarget();
162175
// Check field is declared on method type
163-
return target instanceof J.Identifier && ((J.Identifier) target).getFieldType() != null &&
164-
declaringType == ((J.Identifier) target).getFieldType().getOwner();
176+
if (target instanceof J.Identifier && ((J.Identifier) target).getFieldType() != null &&
177+
declaringType == ((J.Identifier) target).getFieldType().getOwner()) {
178+
// Don't replace instance methods accessing static fields
179+
return assignedField.getName().getFieldType() != null &&
180+
!assignedField.getName().getFieldType().hasFlags(Flag.Static);
181+
}
165182
}
166183
}
167184

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

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -579,4 +579,38 @@ class A {
579579
)
580580
);
581581
}
582+
583+
@Issue("https://github.com/openrewrite/rewrite-migrate-java/issues/870")
584+
@Test
585+
void noChangeWhenInstanceMethodAccessesStaticField() {
586+
rewriteRun(// language=java
587+
java(
588+
"""
589+
class A {
590+
static int field;
591+
int getField() {
592+
return field;
593+
}
594+
}
595+
"""
596+
)
597+
);
598+
}
599+
600+
@Issue("https://github.com/openrewrite/rewrite-migrate-java/issues/870")
601+
@Test
602+
void noChangeWhenInstanceMethodAccessesStaticFieldWithThis() {
603+
rewriteRun(// language=java
604+
java(
605+
"""
606+
class A {
607+
static int field;
608+
int getField() {
609+
return this.field;
610+
}
611+
}
612+
"""
613+
)
614+
);
615+
}
582616
}

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

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -588,4 +588,38 @@ class A {
588588
)
589589
);
590590
}
591+
592+
@Issue("https://github.com/openrewrite/rewrite-migrate-java/issues/870")
593+
@Test
594+
void noChangeWhenInstanceMethodAccessesStaticField() {
595+
rewriteRun(// language=java
596+
java(
597+
"""
598+
class A {
599+
static int field;
600+
void setField(int field) {
601+
A.field = field;
602+
}
603+
}
604+
"""
605+
)
606+
);
607+
}
608+
609+
@Issue("https://github.com/openrewrite/rewrite-migrate-java/issues/870")
610+
@Test
611+
void noChangeWhenInstanceMethodAccessesStaticFieldWithThis() {
612+
rewriteRun(// language=java
613+
java(
614+
"""
615+
class A {
616+
static int field;
617+
void setField(int field) {
618+
this.field = field;
619+
}
620+
}
621+
"""
622+
)
623+
);
624+
}
591625
}

0 commit comments

Comments
 (0)