Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 20 additions & 3 deletions src/main/java/org/openrewrite/java/migrate/lombok/LombokUtils.java
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
import org.openrewrite.java.AnnotationMatcher;
import org.openrewrite.java.service.AnnotationService;
import org.openrewrite.java.tree.Expression;
import org.openrewrite.java.tree.Flag;
import org.openrewrite.java.tree.J;
import org.openrewrite.java.tree.JavaType;

Expand Down Expand Up @@ -62,6 +63,10 @@ static boolean isGetter(Cursor cursor, AnnotationService service) {
if (returnExpression instanceof J.Identifier) {
J.Identifier identifier = (J.Identifier) returnExpression;
if (identifier.getFieldType() != null && declaringType == identifier.getFieldType().getOwner()) {
// Don't replace instance methods accessing static fields
if (identifier.getFieldType().hasFlags(Flag.Static)) {
return false;
}
// Check return: type and matching field name
return hasMatchingTypeAndGetterName(method, identifier.getType(), identifier.getSimpleName());
}
Expand All @@ -70,6 +75,11 @@ static boolean isGetter(Cursor cursor, AnnotationService service) {
Expression target = fieldAccess.getTarget();
if (target instanceof J.Identifier && ((J.Identifier) target).getFieldType() != null &&
declaringType == ((J.Identifier) target).getFieldType().getOwner()) {
// Don't replace instance methods accessing static fields
if (fieldAccess.getName().getFieldType() != null &&
fieldAccess.getName().getFieldType().hasFlags(Flag.Static)) {
return false;
}
// Check return: type and matching field name
return hasMatchingTypeAndGetterName(method, fieldAccess.getType(), fieldAccess.getSimpleName());
}
Expand Down Expand Up @@ -153,15 +163,22 @@ static boolean isSetter(Cursor cursor, AnnotationService service) {
J.Identifier assignedVar = (J.Identifier) variable;
if (hasMatchingSetterMethodName(method, assignedVar.getSimpleName())) {
// Check field is declared on method type
return assignedVar.getFieldType() != null && declaringType == assignedVar.getFieldType().getOwner();
if (assignedVar.getFieldType() != null && declaringType == assignedVar.getFieldType().getOwner()) {
// Don't replace instance methods accessing static fields
return !assignedVar.getFieldType().hasFlags(Flag.Static);
}
}
} else if (variable instanceof J.FieldAccess) {
J.FieldAccess assignedField = (J.FieldAccess) variable;
if (hasMatchingSetterMethodName(method, assignedField.getSimpleName())) {
Expression target = assignedField.getTarget();
// Check field is declared on method type
return target instanceof J.Identifier && ((J.Identifier) target).getFieldType() != null &&
declaringType == ((J.Identifier) target).getFieldType().getOwner();
if (target instanceof J.Identifier && ((J.Identifier) target).getFieldType() != null &&
declaringType == ((J.Identifier) target).getFieldType().getOwner()) {
// Don't replace instance methods accessing static fields
return assignedField.getName().getFieldType() != null &&
!assignedField.getName().getFieldType().hasFlags(Flag.Static);
}
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -579,4 +579,38 @@ class A {
)
);
}

@Issue("https://github.com/openrewrite/rewrite-migrate-java/issues/870")
@Test
void noChangeWhenInstanceMethodAccessesStaticField() {
rewriteRun(// language=java
java(
"""
class A {
static int field;
int getField() {
return field;
}
}
"""
)
);
}

@Issue("https://github.com/openrewrite/rewrite-migrate-java/issues/870")
@Test
void noChangeWhenInstanceMethodAccessesStaticFieldWithThis() {
rewriteRun(// language=java
java(
"""
class A {
static int field;
int getField() {
return this.field;
}
}
"""
)
);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -588,4 +588,38 @@ class A {
)
);
}

@Issue("https://github.com/openrewrite/rewrite-migrate-java/issues/870")
@Test
void noChangeWhenInstanceMethodAccessesStaticField() {
rewriteRun(// language=java
java(
"""
class A {
static int field;
void setField(int field) {
A.field = field;
}
}
"""
)
);
}

@Issue("https://github.com/openrewrite/rewrite-migrate-java/issues/870")
@Test
void noChangeWhenInstanceMethodAccessesStaticFieldWithThis() {
rewriteRun(// language=java
java(
"""
class A {
static int field;
void setField(int field) {
this.field = field;
}
}
"""
)
);
}
}