Casos de Uso
1. Code Shift em uma análise e refatoração do código Java
Confira um exemplo do módulo CNPJ Alfanumérico para análise e refatoração de código Java. Ele utiliza uma análise baseada em AST (Abstract Syntax Tree) e listas de palavras-chave para identificar o uso de CNPJ nos repositórios. A partir disso, ele sugere melhorias no tratamento do CNPJ em Aplicações Java com StackSpot AI.
1. Busca por declarações de variáveis com CNPJ
O objetivo é identificar variáveis cujo nome ou tipo esteja relacionado às palavras-chave do CNPJ.
Exemplo:
private long cnpj;
Long cnpj = Long.parseLong(cnpjString);
2. Busca por declarações de métodos com CNPJ
O objetivo é localizar métodos que manipulem ou exponham o CNPJ.
Exemplo:
public long getCnpj() { ... }
public void setCnpj(long cnpj) { ... }
3. Busca por atribuição de valores a CNPJ
O objetivo é detectar atribuições diretas de valores a campos ou variáveis de CNPJ.
Exemplo:
cnpjLong = 34110468000150L;
anotherClient.setCnpj(45997418000153L);
4. Busca por instanciação de classes com CNPJ
O objetivo é identificar construtores ou métodos que recebem CNPJ como parâmetro.
Exemplo:
public EmpresaPública(String razaoSocial, String endereco, long cnpj) { ... }
Optional<ClientePJ> findByCnpj(Long cnpj);
5. Busca por chamadas encadeadas (Builders) com CNPJ
O objetivo é detectar uso de CNPJ em padrões de builder, por exemplo, Lombok, especialmente com tipos inadequados.
Exemplo:
// Antes:
NovaEmpresaRequest empresaAntes = NovaEmpresaRequest.builder()
.nomeFantasia("Tech Solutions")
.razaoSocial("Tech Solutions LTDA")
.cnpj(12345678000190L) // ⚠️ uso de long em vez de String
.inscricaoEstadual("1234567890")
.emailContato("contato@techsolutions.com")
.telefoneContato("(11) 98765-4321")
.endereco("Av. Paulista, 1000 - São Paulo/SP")
.build();
// Depois:
NovaEmpresaRequest empresaDepois = NovaEmpresaRequest.builder()
6. Busca por comparações com CNPJ
O objetivo é identificar comparações diretas de CNPJ, especialmente com tipos numéricos.
Exemplo:
if (cnpj == 34110468000150L) { ... } // ⚠️ uso de long em vez de String
7. Filtro por tipagem inadequada
O objetivo é listar todas as ocorrências de CNPJ com tipos diferentes de String.
Tipos analisados:
- byte;
- short;
- int;
- long;
- float;
- double;
- Integer.
8. Refatoração automatizada via StackSpot AI
Os principais objetivos são:
- Encontrar os pontos de alteração.
- Refatorar o código para garantir que o CNPJ seja tratado como String.
- Manter a compatibilidade com tipos numéricos.
- Ajustar testes automatizados.
Exemplo:
// Antes:
public class Empresa {
private long cnpj; // ⚠️ CNPJ como long
public void setCnpj(long cnpj) {
this.cnpj = cnpj;
}
public long getCnpj() {
return cnpj;
}
}
// Depois:
public class Empresa {
private String cnpj; // ✅ CNPJ como String
public void setCnpj(long cnpj) {
this.cnpj = String.valueOf(cnpj);
}
public void setCnpj(String cnpj) {
this.cnpj = cnpj;
}
public String getCnpj() {
return cnpj;
}
}
9. Busca por anotações e validações do CNPJ
O objetivo é identificar uso de anotações de validação e sugerir padronização.
Exemplo:
// Antes:
public class Empresa {
@ValidCnpj
private String cnpj;
}
// Depois:
public class Empresa {
@CNPJ // Anotação padronizada para validação de CNPJ
private String cnpj;
}
10. Busca por Máscaras de CNPJ
O objetivo é detectar implementações manuais de máscara/validação.
Exemplo:
String cnpjFormatado = cnpj.substring(0,2) + "." + ...;
11. Busca por serialização e desserialização de CNPJ
O objetivo é identificar problemas em serialização/desserialização de CNPJ.
Exemplo:
@JsonProperty("cnpj")
private String cnpj;
12. Comentários sobre CNPJ
O objetivo é identificar comentários relacionados ao campo CNPJ no código, sugerindo alterações para garantir que a descrição esteja de acordo.
Exemplo:
// Antes:
/**
* CNPJ da empresa deve conter apenas números.
*/
private String cnpj;
// Depois:
/**
* CNPJ da empresa pode conter caracteres alfanuméricos.
*/
private String cnpj;
2. Code Shift em uma análise e refatoração do código Cobol
Confira um exemplo usando o módulo CNPJ Alfanumérico para análise e refatoração de código Cobol, utilizando listas de palavras-chave para identificar o uso de CNPJ nos repositórios, sugerindo melhorias no tratamento do CNPJ em aplicações Cobol com a StackSpot AI.
Casos de uso detalhados
1. Declaração de variáveis PIC do CNPJ
O objetivo é padronizar a declaração de variáveis PIC do CNPJ para o tipo alfanumérico adequado.
Exemplo:
# Antes:
01 CNPJ-EMPRESA PIC 9(14).
01 CNPJ-CLIENTE PIC S9(14).
01 CNPJ-FORNECEDOR PIC S9(15).
# Depois:
01 CNPJ-EMPRESA PIC X(14).
01 CNPJ-CLIENTE PIC X(14).
01 CNPJ-FORNECEDOR PIC X(15).
2. Identificação de variáveis COMP-3 do CNPJ
O objetivo é padronizar a declaração de variáveis COMP-3 do CNPJ para o tipo alfanumérico adequado.
- Exemplo 1: COMP / COMP-3 / USAGE COMP com FILLER
# Antes:
03 NUM-CNPJ PIC 9(18) COMP. *> Cenário COMP
...
03 XPTO-FILLER PIC X(60). *> FILLER ORIGINAL NO FINAL DO BLOCO
* ESPACO RESERVADO
# Depois
03 FILLER PIC 9(18) COMP. *> Mantido para compatibilidade
...
03 NUM-CNPJ PIC X(18). *> CNPJALFA
03 XPTO-FILLER PIC X(42). *> FILLER ORIGINAL AJUSTADO (CNPJALFA)
* ESPACO RESERVADO
- Exemplo 2: COMP / COMP-3 / USAGE COMP com FILLER e uso total do espaço
# Antes:
03 NUM-CNPJ PIC 9(14) COMP-3. *> Cenário COMP-3
...
03 XPTO-FILLER PIC X(10). *> FILLER ORIGINAL NO FINAL DO BLOCO
* ESPACO RESERVADO
# Depois
03 FILLER PIC 9(14) COMP-3. *> Mantido para compatibilidade (CNPJALFA)
...
03 NUM-CNPJ PIC X(14). *> CNPJALFA
03 XPTO-FILLER PIC X(10). *> FILLER ORIGINAL COMENTADO (CNPJALFA)
* ESPACO RESERVADO
A conversão de COMP-3 para alfanumérico pode impactar o layout de registros em copybooks compartilhados.
3. Atribuição e movimentação de valores
O objetivo é ajustar comandos MOVE, INITIALIZE, redefinições e conversões de tipos para o novo padrão do CNPJ.
Exemplo:
# Antes:
MOVE ZEROS TO CNPJ-EMPRESA.
# Depois:
MOVE SPACES TO CNPJ-EMPRESA.
4. Validação de CNPJ Alfanumérico
O objetivo é padronizar a validação do campo CNPJ para garantir que ele possua exatamente 14 caracteres alfanuméricos.
Regras de conversão
| Condição Original | Conversão Obrigatória | Contexto | Documentar Como |
|---|---|---|---|
EQUAL ZEROS | EQUAL SPACES | Campos alfanuméricos | condition |
GREATER ZEROS | NOT EQUAL LOW-VALUES | Campos alfanuméricos | condition |
IS NUMERIC | NOT EQUAL SPACES | Validação de campo vazio | condition |
NOT NUMERIC | EQUAL LOW-VALUES | Validação de campo vazio | condition |
NOT NUMERIC OR EQUAL ZEROS | EQUAL LOW-VALUES OR EQUAL SPACES | Validação combinada | condition |
ZEROS OR SPACES | LOW-VALUES OR SPACES | Validação de campo vazio | condition |
VALUE ZEROS | VALUE SPACES | Inicialização | field_declaration |
VALUE 0 | VALUE SPACES | Inicialização | field_declaration |
VALUE ZEROES | VALUE SPACES | Inicialização | field_declaration |
MOVE ZEROS | MOVE SPACES | Atribuição | move_operation |
- Exemplo 1: validação de campo vazio:
# Antes:
VARCNPJ EQUALS SPACES OR ZEROS
# Depois:
VARCNPJ EQUALS SPACES *> CNPJALFA
- Exemplo 2: validação combinada
# Antes
IF VARCNPJCGC NOT NUMERIC OR VARCNPJCGC EQUAL ZEROS
# Depois
IF VARCNPJCGC EQUAL LOW-VALUES OR VARCNPJCGC EQUAL SPACES *> CNPJALFA
5. Tratamento de campos compartilhados (REDEFINES)
O objetivo é ajustar o uso de REDEFINES para permitir o compartilhamento de campos entre CNPJ.
Exemplo:
# Antes:
01 VAR-CGC PIC 9(14). *> Cenário REDEFINES
01 WCGC-VAR-CGC REDEFINES VAR-CGC
03 CGC1-VAR-CGC PIC 9(08).
03 CGC2-VAR-CGC PIC 9(04).
03 DACCGC-VAR-CGC PIC 9(02).
# Depois:
01 VAR-CGC PIC X(14). *> CNPJALFA - Cenário REDEFINES corrigido
01 WCGC-VAR-CGC REDEFINES VAR-CGC
03 CGC1-VAR-CGC PIC X(08).
03 CGC2-VAR-CGC PIC X(04).
03 DACCGC-VAR-CGC PIC X(02).