Skip to content

String wrapping is not idempotent #935

Open
@appleseedexm

Description

@appleseedexm

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

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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions