Skip to content

Keep the package slot for default-package classes in Class.asClassName() - #2382

Merged
Egorand merged 2 commits into
square:mainfrom
lenamonj:default-package-class-name
Sep 11, 2026
Merged

Egorand merged 2 commits into
square:mainfrom
lenamonj:default-package-class-name

Conversation

@lenamonj

@lenamonj lenamonj commented Sep 7, 2026 •

Copy link
Copy Markdown
Contributor

Class<*>.asClassName() appended the package element only when the binary name contained a dot, so a class in the default package produced a ClassName with no package slot. Every accessor reads that list positionally: packageName returned the class's own name, simpleNames was empty, and toString(), reflectionName(), topLevelClassName() and peerClass() threw IndexOutOfBoundsException.

The package element is now appended unconditionally, empty for the default package, which is the form ClassName("", "Foo") and bestGuess("Foo") already produce.

Verified with classNameFromClassInDefaultPackage, red on main and green with the change, and ./gradlew build.

  • docs/changelog.md has been updated if applicable.
  • CLA signed.

@square-task-list-completed

square-task-list-completed Bot commented Sep 7, 2026 •

Copy link
Copy Markdown

All tasks completed

@lenamonj
lenamonj force-pushed the default-package-class-name branch from dae956b to 6d9ee25 Compare September 7, 2026 19:05

@Egorand Egorand left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Nice, thanks!

@Egorand
Egorand merged commit b7f6d40 into square:main Sep 11, 2026
7 checks passed
@lenamonj
lenamonj deleted the default-package-class-name branch September 11, 2026 10:15
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants