Como impedir que o formatador Eclipse coloque todos os enums em uma linha


106

Eu tenho enums como:

public static enum Command
{
login,
register,
logout,
newMessage
}

Ao formatar o arquivo, a saída se torna:

public static enum Command 
{
login, register, logout, newMessage
}

1
Existe alguma variável no formatador externo (org.eclipse.jdt.core.formatter ......) para impor cada variável enum em uma linha separada?
Paramesh Korrakuti

Respostas:


198

A resposta de @wjans funcionou bem para enums normais, mas não para enums com argumentos. Para expandir um pouco sua resposta, aqui estão as configurações que forneceram a formatação mais adequada para mim no Eclipse Juno:

  1. Window> Preferences> Java> Code Style>Formatter
  2. Clique Edit
  3. Selecione a Line Wrappingguia
  4. Selecione o enumtreenode de declaração
  5. Defina Line wrapping policycomo Wrap all elements, every element on a new line (...)assim agora diz 3 de 3 entre parênteses.
  6. Desmarque Force split, even if line shorter than maximum line width (...)para que agora diga 3 de 3 entre parênteses.
  7. Selecione o Constantstreenó
  8. Verifica Force split, even if line shorter than maximum line width

Isso define os 3 subnós do treenó enum para a mesma política de agrupamento e a mesma política de divisão de força, exceto para o Constantstreenó, de modo que seus enums com argumentos serão formatados cada um em sua própria linha. Os argumentos só serão quebrados se excederem a largura máxima da linha.

Exemplos:

@wjans

enum Example {
    CANCELLED,
    RUNNING,
    WAITING,
    FINISHED
}

enum Example {
    GREEN(
        0,
        255,
        0),
    RED(
        255,
        0,
        0)
}

Solução descrita acima:

enum Example {
    CANCELLED,
    RUNNING,
    WAITING,
    FINISHED
}

enum Example {
    GREEN(0, 255, 0),
    RED(255, 0, 0)
}

1
Ainda parece errado no visualizador do eclipse para mim, mas quando experimentei na fonte real funcionou perfeitamente. Obrigado.
Ben Thurley,

50

Você pode especificar isso nas preferências do formatador:

  • Preferências: Java - Estilo de código - Formatador
  • Clique em Editar
  • Selecione a guia 'Quebra de linha'
  • Selecione a declaração 'enum' -> Constantes na caixa à esquerda
  • Defina a política de quebra de linha como 'Quebra todos os elementos, cada elemento em uma nova linha'
  • Marque 'Forçar divisão ...'

Eu tive esse problema por meses. A única coisa que eu não tentei foi "forçar divisão". Não sei por que ele deve ser necessário, já que você pensaria que "envolver todos os elementos" na verdade envolveria todos os elementos! Obrigado pela solução.
LegendLength

11

É um pouco feio também, mas se a política da sua empresa impedir que você altere o formatador, você pode simplesmente colocar comentários no final das linhas que não deseja quebrar.

public static enum Command 
{
    login,//
    register,//
    logout,//
    newMessage//
};

5

Não é legal, mas você pode desligar o formatador Eclipse para algumas seções do código ...

// @formatter:off
public static enum Command {
    login,
    register,
    logout,
    newMessage
};
// @formatter:on

a opção está no painel Windows-> Preferências-> Java-> Estilo de Código-> Formatador-> Editar-> Off / On Tags


1
Isso funciona ... mais ou menos. O compilador agora pensa que é um erro. Colocá-los nos comentários supera esse problema como // @formatter: off
Bob Kuhar

4

Você precisa definir a política de quebra de linha sob a declaração enum para "Constantes".

Defina a política de embalagem para

  • Envolva todos os elementos, cada elemento em uma nova linha

E

  • Marque a caixa que diz "Forçar divisão, mesmo se a linha for menor que ,,,,,

0

Acabei de adicionar o Eclipse 2018.9

  1. Window > Preferences > Java > Code Style > Formatter - Edit
  2. Expanda o Line Wrappingnó da árvore.
  3. Expandir Wrapping settings
  4. Expandir 'enum' declaration
  5. Editar Constantse Constant arguments.

As constantes precisam ser Wrap all elements, every element on a new line. Argumentos constantes precisam ser Wrap where necessary.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.