Skip to content

Commit f7c5e6c

Browse files
cushonError Prone Team
authored and
Error Prone Team
committed
Improve handling of type parameter names that start with _
PiperOrigin-RevId: 351412076
1 parent 99968c5 commit f7c5e6c

File tree

3 files changed

+27
-5
lines changed

3 files changed

+27
-5
lines changed

check_api/src/main/java/com/google/errorprone/names/NamingConventions.java

+6-4
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,8 @@
1818

1919
import static com.google.common.collect.ImmutableList.toImmutableList;
2020

21+
import com.google.common.base.Splitter;
2122
import com.google.common.collect.ImmutableList;
22-
import java.util.Arrays;
2323
import java.util.regex.Pattern;
2424
import java.util.stream.Collectors;
2525

@@ -32,8 +32,9 @@ public class NamingConventions {
3232
private static final String CASE_TRANSITION = "(?<=[a-z0-9])(?=[A-Z])";
3333
private static final String TRAILING_DIGITS = "(?<![0-9_])(?=[0-9]+$)";
3434

35-
private static final Pattern TERM_SPLITTER =
36-
Pattern.compile(String.format("%s|%s|%s", UNDERSCORE, CASE_TRANSITION, TRAILING_DIGITS));
35+
private static final Splitter TERM_SPLITTER =
36+
Splitter.onPattern(String.format("%s|%s|%s", UNDERSCORE, CASE_TRANSITION, TRAILING_DIGITS))
37+
.omitEmptyStrings();
3738

3839
/**
3940
* Split a Java name into terms based on either Camel Case or Underscores. We also split digits at
@@ -47,7 +48,8 @@ public static ImmutableList<String> splitToLowercaseTerms(String identifierName)
4748
// Degenerate case of names which contain only underscore
4849
return ImmutableList.of(identifierName);
4950
}
50-
return Arrays.stream(TERM_SPLITTER.split(identifierName))
51+
return TERM_SPLITTER
52+
.splitToStream(identifierName)
5153
.map(String::toLowerCase)
5254
.collect(toImmutableList());
5355
}

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

+2-1
Original file line numberDiff line numberDiff line change
@@ -205,7 +205,8 @@ private static List<TypeVariableSymbol> typeVariablesEnclosing(Symbol sym) {
205205
}
206206

207207
private static String suggestedSingleLetter(String id, Tree tree) {
208-
char firstLetter = id.charAt(0);
208+
char firstLetter =
209+
Ascii.toUpperCase(NamingConventions.splitToLowercaseTerms(id).get(0).charAt(0));
209210
Symbol sym = ASTHelpers.getSymbol(tree);
210211
List<TypeVariableSymbol> enclosingTypeSymbols = typeVariablesEnclosing(sym);
211212

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

+19
Original file line numberDiff line numberDiff line change
@@ -294,6 +294,25 @@ public void negativeCases_manyNumberedTypes() {
294294
.doTest();
295295
}
296296

297+
@Test
298+
public void refactoring_underscore() {
299+
refactoring
300+
.addInputLines(
301+
"in/Test.java", //
302+
"class Test {",
303+
" public <_T> void method(_T t) {",
304+
" }",
305+
"}")
306+
.addOutputLines(
307+
"in/Test.java", //
308+
"class Test {",
309+
" public <T> void method(T t) {",
310+
" }",
311+
"}")
312+
.setFixChooser(FixChoosers.FIRST)
313+
.doTest(TestMode.TEXT_MATCH);
314+
}
315+
297316
@Test
298317
public void classifyTypeName_singleLetter() {
299318
assertKindOfName("T").isEqualTo(LETTER_WITH_MAYBE_NUMERAL);

0 commit comments

Comments
 (0)