Skip to content

Commit 6ad4adf

Browse files
klueverError Prone Team
authored andcommitted
Fix an infinite recursion bug in PreferCharsetOverload.
See also unknown commit PiperOrigin-RevId: 929887275
1 parent d39b583 commit 6ad4adf

2 files changed

Lines changed: 30 additions & 0 deletions

File tree

core/src/main/java/com/google/errorprone/bugpatterns/PreferCharsetOverload.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@
4242
import com.google.errorprone.suppliers.Supplier;
4343
import com.sun.source.tree.ExpressionTree;
4444
import com.sun.source.tree.MethodInvocationTree;
45+
import com.sun.source.tree.MethodTree;
4546
import com.sun.source.tree.NewClassTree;
4647
import com.sun.source.tree.Tree.Kind;
4748
import com.sun.tools.javac.code.Symbol.MethodSymbol;
@@ -102,6 +103,11 @@ private Description match(
102103
return Description.NO_MATCH;
103104
}
104105

106+
MethodTree enclosingMethod = state.findEnclosing(MethodTree.class);
107+
if (enclosingMethod != null && getSymbol(enclosingMethod).equals(bestOverload)) {
108+
return Description.NO_MATCH;
109+
}
110+
105111
// 3. Build the fix to use the Charset overload.
106112
SuggestedFix fix = buildFix(arguments, bestOverload, candidateIndices, state);
107113
return fix != null ? describeMatch(tree, fix) : Description.NO_MATCH;

core/src/test/java/com/google/errorprone/bugpatterns/PreferCharsetOverloadTest.java

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -439,4 +439,28 @@ void test() {
439439
""")
440440
.doTest();
441441
}
442+
443+
@Test
444+
public void negativeDelegatingConstructor() {
445+
helper
446+
.addInputLines(
447+
"JavaStringDecoder.java",
448+
"""
449+
import java.nio.charset.Charset;
450+
451+
public class JavaStringDecoder {
452+
private final String charsetName;
453+
454+
public JavaStringDecoder(Charset charset) {
455+
this(charset.name());
456+
}
457+
458+
public JavaStringDecoder(String charsetName) {
459+
this.charsetName = charsetName;
460+
}
461+
}
462+
""")
463+
.expectUnchanged()
464+
.doTest();
465+
}
442466
}

0 commit comments

Comments
 (0)