diff --git a/src/main/java/org/openrewrite/java/migrate/lombok/LombokUtils.java b/src/main/java/org/openrewrite/java/migrate/lombok/LombokUtils.java index 0f1a1f0f57..94cc83feb3 100644 --- a/src/main/java/org/openrewrite/java/migrate/lombok/LombokUtils.java +++ b/src/main/java/org/openrewrite/java/migrate/lombok/LombokUtils.java @@ -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; @@ -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()); } @@ -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()); } @@ -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); + } } } diff --git a/src/test/java/org/openrewrite/java/migrate/lombok/UseLombokGetterTest.java b/src/test/java/org/openrewrite/java/migrate/lombok/UseLombokGetterTest.java index b41d88add3..20ca4f88cf 100644 --- a/src/test/java/org/openrewrite/java/migrate/lombok/UseLombokGetterTest.java +++ b/src/test/java/org/openrewrite/java/migrate/lombok/UseLombokGetterTest.java @@ -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; + } + } + """ + ) + ); + } } diff --git a/src/test/java/org/openrewrite/java/migrate/lombok/UseLombokSetterTest.java b/src/test/java/org/openrewrite/java/migrate/lombok/UseLombokSetterTest.java index 191d1bfe5f..3530495566 100644 --- a/src/test/java/org/openrewrite/java/migrate/lombok/UseLombokSetterTest.java +++ b/src/test/java/org/openrewrite/java/migrate/lombok/UseLombokSetterTest.java @@ -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; + } + } + """ + ) + ); + } }