DuplicateBranches misses duplicate ternary branches when one branch is parenthesized
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
- Sin Dockerfile ni archivo de Docker Compose
- Sin plantilla de pull request
- Leer la guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de google/error-prone
-
ASTHelpers.getSymbol returns null for a parenthesized expression, while javac's TreeInfo.symbol returns the symbol insidePosiblemente ocupada @vlsi la tomó hace 8 días. Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
google/error-prone#6223 ·
Los mantenedores suelen responder en 1 día
-
InlineTrivialConstant misses an empty-string constant with a parenthesized initializerPosiblemente ocupada @Youssef-Khogaly la tomó hace 8 días. Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
google/error-prone#6217 · 1 comentario ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 74/100
google/error-prone#6215 ·
Los mantenedores suelen responder en 1 día
-
NonAtomicVolatileUpdate misses volatile increments and decrements with parenthesized operandsAbierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 76/100
google/error-prone#6214 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 76/100
google/error-prone#6213 ·
Los mantenedores suelen responder en 1 día
Todos los issues de google/error-prone
Issues similares
-
Update samples to Citrus 5.1.0Posiblemente ocupada @asuruceanu la tomó hoy. Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 82/100
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
snowflakedb/snowflake-kafka-connector#1610 ·
Los mantenedores suelen responder en 1 día
-
add multipart/form-data exampleAbierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
swagger-api/swagger-petstore#245 ·
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 70/100
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
liquid-java/liquidjava#443 ·
Los mantenedores suelen responder en 2 días