Skip to content

Commit 83ad9b6

Browse files
cushonError Prone Team
authored and
Error Prone Team
committed
Fix a crash on var in DefaultCharset
Fixes #1563 PiperOrigin-RevId: 350823946
1 parent ea312c9 commit 83ad9b6

File tree

2 files changed

+45
-15
lines changed

2 files changed

+45
-15
lines changed

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

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -369,21 +369,21 @@ private void variableTypeFix(
369369
sym.type, state.getTypeFromString(original.getCanonicalName()), state)) {
370370
return;
371371
}
372-
state
373-
.getPath()
374-
.getCompilationUnit()
375-
.accept(
376-
new TreeScanner<Void, Void>() {
377-
@Override
378-
public Void visitVariable(VariableTree node, Void unused) {
379-
if (sym.equals(ASTHelpers.getSymbol(node))) {
380-
fix.replace(node.getType(), replacement.getSimpleName())
381-
.addImport(replacement.getCanonicalName());
382-
}
383-
return null;
384-
}
385-
},
386-
null);
372+
new TreeScanner<Void, Void>() {
373+
@Override
374+
public Void visitVariable(VariableTree node, Void unused) {
375+
if (!sym.equals(ASTHelpers.getSymbol(node))) {
376+
return null;
377+
}
378+
if (ASTHelpers.getStartPosition(node.getType()) == -1) {
379+
// ignore synthetic tree nodes for `var`
380+
return null;
381+
}
382+
fix.replace(node.getType(), replacement.getSimpleName())
383+
.addImport(replacement.getCanonicalName());
384+
return null;
385+
}
386+
}.scan(state.getPath().getCompilationUnit(), null);
387387
}
388388

389389
private Description handleFileWriter(NewClassTree tree, VisitorState state) {

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

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,12 @@
1616

1717
package com.google.errorprone.bugpatterns;
1818

19+
import static org.junit.Assume.assumeTrue;
20+
1921
import com.google.errorprone.BugCheckerRefactoringTestHelper;
2022
import com.google.errorprone.BugCheckerRefactoringTestHelper.FixChoosers;
2123
import com.google.errorprone.CompilationTestHelper;
24+
import com.google.errorprone.util.RuntimeVersion;
2225
import org.junit.Test;
2326
import org.junit.runner.RunWith;
2427
import org.junit.runners.JUnit4;
@@ -499,4 +502,31 @@ public void scannerDefaultCharset() {
499502
"}")
500503
.doTest();
501504
}
505+
506+
@Test
507+
public void withVar() {
508+
assumeTrue(RuntimeVersion.isAtLeast15());
509+
refactoringTest()
510+
.addInputLines(
511+
"in/Test.java",
512+
"import java.io.File;",
513+
"import java.io.FileWriter;",
514+
"class Test {",
515+
" void f(File file) throws Exception {",
516+
" var fileWriter = new FileWriter(file);",
517+
" }",
518+
"}")
519+
.addOutputLines(
520+
"out/Test.java",
521+
"import static java.nio.charset.StandardCharsets.UTF_8;",
522+
"import java.io.File;",
523+
"import java.io.FileWriter;",
524+
"import java.nio.file.Files;",
525+
"class Test {",
526+
" void f(File file) throws Exception {",
527+
" var fileWriter = Files.newBufferedWriter(file.toPath(), UTF_8);",
528+
" }",
529+
"}")
530+
.doTest();
531+
}
502532
}

0 commit comments

Comments
 (0)