From b58dd1e4f9ba3225bd9423feac717d6c581272c3 Mon Sep 17 00:00:00 2001 From: Gijs de Jong Date: Thu, 10 Aug 2023 09:28:36 -0700 Subject: [PATCH] Prevent `SuggestedFixes#renameMethod` from modifying return type declaration By ensuring the return type `IDENTIFIER` token is not matched. Fixes #4043 COPYBARA_INTEGRATE_REVIEW=https://github.com/google/error-prone/pull/4043 from PicnicSupermarket:gdejong/bug-method-name cbfbc5401eb659a7aef08317250fc20425cf09e7 PiperOrigin-RevId: 555523619 --- .../errorprone/fixes/SuggestedFixes.java | 5 ++-- .../bugpatterns/MemberNameTest.java | 28 +++++++++++++++++++ 2 files changed, 31 insertions(+), 2 deletions(-) diff --git a/check_api/src/main/java/com/google/errorprone/fixes/SuggestedFixes.java b/check_api/src/main/java/com/google/errorprone/fixes/SuggestedFixes.java index 6b2e28d3562..f448941037b 100644 --- a/check_api/src/main/java/com/google/errorprone/fixes/SuggestedFixes.java +++ b/check_api/src/main/java/com/google/errorprone/fixes/SuggestedFixes.java @@ -745,11 +745,12 @@ public Void visitMemberSelect(MemberSelectTree tree, Void unused) { /** Be warned, only changes method name at the declaration. */ public static SuggestedFix renameMethod(MethodTree tree, String replacement, VisitorState state) { - // Search tokens from beginning of method tree to beginning of method body. - int basePos = getStartPosition(tree); + // Search tokens from end of return type tree to beginning of method body. + int basePos = state.getEndPosition(tree.getReturnType()); int endPos = tree.getBody() != null ? getStartPosition(tree.getBody()) : state.getEndPosition(tree); List methodTokens = state.getOffsetTokens(basePos, endPos); + for (ErrorProneToken token : methodTokens) { if (token.kind() == TokenKind.IDENTIFIER && token.name().equals(tree.getName())) { return SuggestedFix.replace(token.pos(), token.endPos(), replacement); diff --git a/core/src/test/java/com/google/errorprone/bugpatterns/MemberNameTest.java b/core/src/test/java/com/google/errorprone/bugpatterns/MemberNameTest.java index 6e58cfdb57a..a1da16d7349 100644 --- a/core/src/test/java/com/google/errorprone/bugpatterns/MemberNameTest.java +++ b/core/src/test/java/com/google/errorprone/bugpatterns/MemberNameTest.java @@ -463,4 +463,32 @@ public void methodReference() { "}") .doTest(); } + + @Test + public void methodNameWithMatchingReturnType() { + refactoringHelper + .addInputLines( + "Test.java", + "class Test {", + " private Object Object() {", + " return null;", + " }", + "", + " void call() {", + " Object();", + " }", + "}") + .addOutputLines( + "Test.java", + "class Test {", + " private Object object() {", + " return null;", + " }", + "", + " void call() {", + " object();", + " }", + "}") + .doTest(); + } }