Skip to content

Treat a single upper case letter as a type name in a dotted chain - #70

Merged
abashev merged 1 commit into
mainfrom
single-letter-type-name
Sep 25, 2026
Merged

abashev merged 1 commit into
mainfrom
single-letter-type-name

Conversation

@abashev

@abashev abashev commented Sep 24, 2026

Copy link
Copy Markdown
Collaborator

Brings over google/google-java-format#731, a fix from google-java-format 1.14.

The bug

A dotted name is broken after its type-name prefix, and the prefix is found from the case of each segment: com.example.Foo.bar is a package, a class and a member. A single upper case letter such as Android's R counted as an all-caps constant, so a long resource reference found no prefix and broke at every dot:

    int resourceId = com.some
            .extremely
            .verbose
            .pkg
            .name
            .R
            .string
            .some_extremely_long_resource_identifier_that_exceeds_the_column_limit;

From upstream, with the author kept

Checked

  • The golden and the from("A") assertion fail on main and pass with the change.
  • ./gradlew :open-java-format:test on JDK 21: 1501 tests, all green.
  • The 15,747 files of the JDK 21 sources format exactly as before: no chain in the JDK turns on a single-letter class name.

A dotted name is broken after its type-name prefix, and the prefix is
found from the case of each segment: "com.example.Foo.bar" is a package,
a class and a member. A single upper case letter such as Android's R
counted as an all-caps constant, so in
"com.some.extremely.verbose.pkg.name.R.string.some_resource" no prefix
was found and the name broke at every dot, one segment per line.

This ports google/google-java-format#731 by Liam Miller-Cushon: a
single upper case letter is UpperCamelCase, so the chain keeps
"com.some.extremely.verbose.pkg.name.R.string" together and breaks
before the last segment. The golden b26306390 and the two
TypeNameClassifierTest assertions come from upstream, with the
expected output in this project's style.

The 15,747 files of the JDK 21 sources format exactly as before.
@abashev
abashev merged commit b1f0450 into main Sep 25, 2026
15 checks passed
@abashev
abashev deleted the single-letter-type-name branch September 25, 2026 07:51
abashev added a commit to openjavaformat/docs that referenced this pull request Sep 25, 2026
…ange

2.98.0.4 carries two more fixes that change code palantir-java-format
2.98.0 has already formatted: a one-letter class name such as Android's
R no longer counts as a constant in a dotted name
(openjavaformat/open-java-format#70), and tabs at the end of a line in a
comment are dropped (openjavaformat/open-java-format#73). Neither shows
on the JDK 21 sources, which have no such dotted name and no comment
ending in a tab, and the corpus paragraph now says so. The other fixes
of 2.98.0.4 leave code that palantir-java-format has already formatted
as it is, so they stay off the list.

Every item now links the pull request behind it. The string fix went to
main without one, so it links the issue it closed,
openjavaformat/open-java-format#32.

The GitHub Action page gives 2.98.0.4 as the default of the version
input, as the action's main branch now does
(openjavaformat/open-java-format-action@83d0df8).
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