Hacktoberfest 2026: as issues que os mantenedores marcaram para outubro, abertas e boas para iniciantes. Ver issues do Hacktoberfest

String wrapping is not idempotent

Aberta
#935 3 comentários 1 reação 0 responsáveis Ver no GitHub

Ninguém assumiu esta issue ainda.

Avaliação

Dificuldade
3/5
Tempo estimado
1-2 dias
Facilidade para iniciantes
45/100
Tipo de issue
Bug
Clareza
Razoavelmente clara
Status de atividade
Estagnada
Stack de tecnologia
java
Domínio
tooling

Direção de pesquisa

Reproduza o problema com o exemplo TestFormat.java fornecido usando o JAR all-deps do google-java-format 1.15.0 ou 1.16.0 no Java 17. Execute a formatação repetidamente e compare o layout da string de switch-expression após cada passagem. Está concluído quando formatar o arquivo inalterado produzir uma saída idêntica em todas as execuções subsequentes.

Escrita pelo modelo de indexação a partir do texto da issue.

Descrição

bug

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.

Linguagem predominante
Java
Estrelas
6.2k
Forks
936
Merge médio
6min
PRs com merge (30d)
3

Guia de contribuição

Abrir o guia de contribuição

Primeiros passos

  1. Leia a issue inteira e depois o guia de contribuição do projeto.
  2. Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
  3. Faça um fork do repositório e trabalhe em uma branch.
  4. Abra um pull request que referencie o número da issue.

Mais de google/google-java-format

Todas as issues de google/google-java-format

Issues semelhantes

Mais issues de Java

Receba novas issues na sua caixa de entrada

Um resumo curto de issues do GitHub para quem está começando.