From 2f1e99113ea6a29628a4b10616b669eee8a4794c Mon Sep 17 00:00:00 2001 From: Abdullah <89297042+AzazelSensei@users.noreply.github.com> Date: Thu, 13 Aug 2026 21:09:33 +0300 Subject: [PATCH] Don't treat nested java.lang types as name clashes AvoidCommonTypeNames warned that a top-level Info clashed with ProcessHandle.Info when compiling with --release. Nested types are not auto-imported by simple name, so skip them. --- .../bugpatterns/AvoidCommonTypeNames.java | 7 ++- .../bugpatterns/AvoidCommonTypeNamesTest.java | 44 +++++++++++++++++++ 2 files changed, 50 insertions(+), 1 deletion(-) diff --git a/core/src/main/java/com/google/errorprone/bugpatterns/AvoidCommonTypeNames.java b/core/src/main/java/com/google/errorprone/bugpatterns/AvoidCommonTypeNames.java index 82cb5ff2ead..871244b147e 100644 --- a/core/src/main/java/com/google/errorprone/bugpatterns/AvoidCommonTypeNames.java +++ b/core/src/main/java/com/google/errorprone/bugpatterns/AvoidCommonTypeNames.java @@ -83,7 +83,12 @@ public Description matchTypeParameter(TypeParameterTree tree, VisitorState state s -> s instanceof ClassSymbol && s.getModifiers().contains(PUBLIC) - && !IGNORED.contains(s.getSimpleName().toString()))) + && !IGNORED.contains(s.getSimpleName().toString()) + // Nested types (ProcessHandle.Info, Character.UnicodeScript, + // ...) are not auto-imported by simple name. --release can + // still surface them through PackageSymbol#members. + && s.getQualifiedName() + .contentEquals("java.lang." + s.getSimpleName()))) .collect(toImmutableMap(s -> s.getSimpleName().toString(), s -> (ClassSymbol) s)); }); diff --git a/core/src/test/java/com/google/errorprone/bugpatterns/AvoidCommonTypeNamesTest.java b/core/src/test/java/com/google/errorprone/bugpatterns/AvoidCommonTypeNamesTest.java index d51192ca0c5..36147eb8094 100644 --- a/core/src/test/java/com/google/errorprone/bugpatterns/AvoidCommonTypeNamesTest.java +++ b/core/src/test/java/com/google/errorprone/bugpatterns/AvoidCommonTypeNamesTest.java @@ -114,4 +114,48 @@ public class Module {} """) .doTest(); } + + @Test + public void negative_nestedJavaLangTypeUnderRelease() { + testHelper + .addSourceLines( + "Info.java", + """ + class Info {} + """) + .addSourceLines( + "UnicodeScript.java", + """ + class UnicodeScript {} + """) + .setArgs("--release", Integer.toString(Runtime.version().feature())) + .doTest(); + } + + @Test + public void negative_nestedJavaLangTypeUnderOlderRelease() { + testHelper + .addSourceLines( + "UnicodeScript.java", + """ + class UnicodeScript {} + """) + .setArgs("--release", "8") + .doTest(); + } + + @Test + public void positive_topLevelStillFlaggedUnderRelease() { + testHelper + .addSourceLines( + "foo/String.java", + """ + package foo; + + // BUG: Diagnostic contains: foo.String clashes with java.lang.String + public class String {} + """) + .setArgs("--release", Integer.toString(Runtime.version().feature())) + .doTest(); + } }