google / google/google-java-format

String wrapping is not idempotent

Open
#935 3 comments 1 reaction 0 assignees View on GitHub
bug
Dominant language
Java
Stars
6.2k
Forks
937
Avg merge
6m
Merged PRs (30d)
3

Description

This happened with the all deps jar from github, for both versions `1.15.0` and `1.16.0`.

```
$ java --version
openjdk 17.0.6 2023-01-17
OpenJDK Runtime Environment (build 17.0.6+10)
OpenJDK 64-Bit Server VM (build 17.0.6+10, mixed mode)
```

Example code is

```java
package com.example;

public class TestFormat {

public void main() {
var value = 1;
var responseMessage =
switch (value) {
case 1 -> "This is a long string;This is a long string;This is a long string;This is a long string;This is a long string;This is a long string;This is a long string;";
case 2 -> "some short string";
case 3 -> "some medium string some medium string some medium string some medium string";
};
}
}
```

Now these strings in the switch statement will be different formatted depending on how often I call google java format.
Weirdly enough, the cosium maven plugin (gjf `v1.15.0`) does not change the strings in this example at all. This would be preferable for me, but mostly I want a consistent format.

```
## executing preview only
$ java -jar /home/dev/dev/libs/google-java-format-1.15.0-all-deps.jar Testformat.java
package com.example;

public class TestFormat {

public void main() {
var value = 1;
var responseMessage =
switch (value) {
case 1 -> "This is a long string;This is a long string;This is a long string;This is a"
+ " long string;This is a long string;This is a long string;This is a long"
+ " string;";
case 2 -> "some short string";
case 3 -> "some medium string some medium string some medium string some medium string";
};
}
}

## applying changes
$ java -jar /home/dev/dev/libs/google-java-format-1.15.0-all-deps.jar -r Testformat.java

## executing preview only
$ java -jar /home/dev/dev/libs/google-java-format-1.15.0-all-deps.jar Testformat.java
package com.example;

public class TestFormat {

public void main() {
var value = 1;
var responseMessage =
switch (value) {
case 1 -> "This is a long string;This is a long string;This is a long string;This is a"
+ " long string;This is a long string;This is a long string;This is a long"
+ " string;";
case 2 -> "some short string";
case 3 -> "some medium string some medium string some medium string some medium string";
};
}
}
```

The expectation would be that once I format a file every future format call would not change anything anymore as long as nothing was changed on the file.

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.