Fields with the same name in different classes collide
Mantenedores costumam responder em até 2 dias
Ninguém assumiu esta issue ainda.
Avaliação
- Dificuldade
- 4/5
- Tempo estimado
- 3-5 dias
- Facilidade para iniciantes
- 52/100
Direção de pesquisa
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.
Escrita pelo modelo de indexação a partir do texto da issue.
Descrição
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).
- Linguagem predominante
- Java
- Estrelas
- 67
- Forks
- 36
- Merge médio
- 4d 17h
- PRs com merge (30d)
- 7
Preparar o ambiente
- Sem Dockerfile nem arquivo Docker Compose
- Tem um modelo de pull request
- Ler o guia de contribuição
Primeiros passos
- Leia a issue inteira e depois o guia de contribuição do projeto.
- Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
- Faça um fork do repositório e trabalhe em uma branch.
- Abra um pull request que referencie o número da issue.
Mais de liquid-java/liquidjava
-
bug
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 78/100
liquid-java/liquidjava#321 ·
Mantenedores costumam responder em até 2 dias
-
Dificuldade 4/5 3-5 dias Facilidade para iniciantes 68/100
liquid-java/liquidjava#323 ·
Mantenedores costumam responder em até 2 dias
-
Soundness: a field of another class or object is read as this class's field with the same nameAbertabug
Dificuldade 3/5 1-2 dias Facilidade para iniciantes 76/100
liquid-java/liquidjava#322 ·
Mantenedores costumam responder em até 2 dias
-
bug
Dificuldade 4/5 3-5 dias Facilidade para iniciantes 55/100
liquid-java/liquidjava#317 ·
Mantenedores costumam responder em até 2 dias
-
bug
Dificuldade 4/5 3-5 dias Facilidade para iniciantes 62/100
liquid-java/liquidjava#316 ·
Mantenedores costumam responder em até 2 dias
Todas as issues de liquid-java/liquidjava
Issues semelhantes
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 72/100
grimmory-tools/grimmory#2850 · 1 comentário ·
Mantenedores costumam responder em até 1 dia
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 90/100
Mantenedores costumam responder em até 1 dia
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 65/100
aoqia194/leaf-loader#19 ·
-
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 84/100
apache/streampark#4521 ·
-
Update license yearAberta0 - Backlog 1 - Ready documentation good first issue help wanted
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 78/100