Fields with the same name in different classes collide
Los mantenedores suelen responder en 2 días
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 4/5
- Tiempo estimado
- 3-5 días
- Aptitud para principiantes
- 52/100
Línea de trabajo
Reproduce the failure with the minimal Collision example, then inspect field handling in OperationsChecker and RefinementTypeChecker.visitCtFieldRead. Trace how field reads and writes are keyed in the context, including the declaring class and target expression. Done means the example verifies successfully and similarly named fields retain their distinct refinements.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
Description
Fields are keyed in the context by name only (this#<name>), whatever class owns them and whatever the target expression is. Two fields with the same name in different classes (e.g. an outer class and a nested class) are treated as the same variable, so one is checked against the other's refinement.
Minimal reproducer
import liquidjava.specification.Refinement;
public class Collision {
@Refinement("_ < 0") int port = -1;
private final Job job = new Job();
public void send() { job.port = 5; }
static class Job { @Refinement("_ >= 0") int port; }
}
Expected
Correct! Passed Verification. (Job.port is _ >= 0.)
Actual
Refinement Error: this#port⁴ == 5 is not a subtype of this#port⁴ < 0
5 | public void send() { job.port = 5; }
| ^^^^^^^^^^^^^
The write to job.port is checked against Collision.port's refinement.
Cause
Field reads and writes use String.format(Formats.THIS, fieldName) (e.g. OperationsChecker, RefinementTypeChecker.visitCtFieldRead), with no owning class or target object. A fix would need to key fields by their declaring type, and ideally separate instances (this.port vs job.port).
Reproduced on main at fbfb4e23 (liquidjava-verifier 0.0.35).
- Lenguaje dominante
- Java
- Estrellas
- 67
- Forks
- 36
- Merge medio
- 4 d 17 h
- PR fusionados (30 d)
- 7
Preparar el entorno
- Sin Dockerfile ni archivo de Docker Compose
- Tiene una 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 liquid-java/liquidjava
-
bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
liquid-java/liquidjava#321 ·
Los mantenedores suelen responder en 2 días
-
Dificultad 4/5 3-5 días Aptitud para principiantes 68/100
liquid-java/liquidjava#323 ·
Los mantenedores suelen responder en 2 días
-
Soundness: a field of another class or object is read as this class's field with the same nameAbiertobug
Dificultad 3/5 1-2 días Aptitud para principiantes 76/100
liquid-java/liquidjava#322 ·
Los mantenedores suelen responder en 2 días
-
bug
Dificultad 4/5 3-5 días Aptitud para principiantes 55/100
liquid-java/liquidjava#317 ·
Los mantenedores suelen responder en 2 días
-
bug
Dificultad 4/5 3-5 días Aptitud para principiantes 62/100
liquid-java/liquidjava#316 ·
Los mantenedores suelen responder en 2 días
Todos los issues de liquid-java/liquidjava
Issues similares
-
Update license yearAbierto0 - Backlog 1 - Ready documentation good first issue help wanted
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
-
cbor
Dificultad 2/5 1-3 horas Aptitud para principiantes 84/100
FasterXML/jackson-dataformats-binary#844 ·
Los mantenedores suelen responder en 1 día
-
improvement
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
apache/iceberg#18351 · 1 comentario ·
Los mantenedores suelen responder en 1 día
-
bug good first issue
Dificultad 2/5 1-3 horas Aptitud para principiantes 90/100
repowise-dev/repowise#2945 · 1 comentario ·
Los mantenedores suelen responder en 1 día
-
Interpolating settings.xml can lead to malformed XML when variable value contains double-hyphenAbiertobug
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
apache/maven#13321 · 1 comentario ·
Los mantenedores suelen responder en 1 día