Hacktoberfest 2026: los issues que los mantenedores marcaron para octubre, abiertos y aptos para principiantes. Explorar issues de Hacktoberfest

DuplicateBranches misses duplicate ternary branches when one branch is parenthesized

Abierto Apto para principiantes
#6,216 0 comentarios 0 reacciones 0 asignados Ver en GitHub

Los mantenedores suelen responder en 1 día

Nadie ha tomado este issue todavía.

Evaluación

Dificultad
2/5
Tiempo estimado
1-3 horas
Aptitud para principiantes
72/100
Tipo de issue
Error
Claridad
Bien especificado
Estado de actividad
Activo
Stack tecnológico
java
Área
testing-qa

Línea de trabajo

Encuentra la comprobación DuplicateBranches y su comparación de ramas; después, lee cómo maneja ParenthesizedTree y ASTHelpers.stripParentheses. Añade o actualiza una prueba de regresión que use los dos ejemplos ternarios del issue. Se considera terminado cuando ambos ejemplos producen un hallazgo y pasan las pruebas pertinentes de la comprobación.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

Error Prone version

Error Prone 2.49.0 (javac 21.0.8, --source/--target 21)

Affected checks

DuplicateBranches

Description

Adding redundant parentheses around one branch of a conditional expression causes DuplicateBranches to miss duplicate branches. The check reports true ? 1 * 5 : 1 * 5, but does not report true ? 1 * 5 : (1 * 5), even though the two branches still compute the same expression.

Per JLS §15.8.5, parentheses around an expression do not change its value, type, or constant-expression status. Parenthesizing one branch should therefore not change whether the branches are considered duplicates.

I verified the following pair on Error Prone 2.49.0:

Check Rewrite BEFORE AFTER Effect
DuplicateBranches 1 * 5 → (1 * 5) in one branch 1 0 false negative

The branch comparison appears not to look through ParenthesizedTree. A possible fix is to unwrap the branch expressions before comparing them, for example with ASTHelpers.stripParentheses.

Reproducers
DuplicateBranches — (1 * 5) defeats the branch comparison

The two ternary branches remain identical; only one is parenthesized.

// BEFORE — 1 finding
public class Sample {
  int x;
  void m() { x = true ? 1 * 5 : 1 * 5; }
}
// AFTER — 0 findings
public class Sample {
  int x;
  void m() { x = true ? 1 * 5 : (1 * 5); }
}
Expected behavior

Both versions should produce 1 DuplicateBranches finding. The two ternary branches remain duplicates when one of them is enclosed in redundant parentheses.

Actual behavior

The BEFORE version produces 1 finding. The AFTER version produces 0 findings after the false branch 1 * 5 is parenthesized.

Lenguaje dominante
Java
Estrellas
7.3k
Forks
827
Merge medio
21 h 35 min
PR fusionados (30 d)
60

Preparar el entorno

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de google/error-prone

Todos los issues de google/error-prone

Issues similares

Más issues de Java

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.