liquid-java / liquid-java/latte

Assignment of field to parent field giving error

Open
#23 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

bug
Dominant language
Java
Stars
3
Forks
1
PR merge metrics
No merged PRs in 30d

Description

Code issuing an error of NullPointerException

import java.util.Iterator;

import specification.Unique;

public class MyStackTest {

    @Unique int[] a;
    @Unique int size;

    private class ReverseArrayIterator implements Iterator<Integer> {
        public @Unique int i = size - 1;

        //(true >> this.i >= 0 -> return )
        @Override
        public boolean hasNext() { return i >= 0; }
        
        //(this.i >= 0 >> this.i == old(this.i) - 1)
        @Override
        public Integer next() { return a[i--]; }
    }

}

Error message:

Exception in thread "main" java.lang.NullPointerException: Cannot invoke "context.UniquenessAnnotation.isGreaterEqualThan(context.Uniqueness)" because "permV" is null
        at typechecking.LatteTypeChecker.visitCtFieldRead(LatteTypeChecker.java:270)
        at spoon.support.reflect.code.CtFieldReadImpl.accept(CtFieldReadImpl.java:18)
        at spoon.reflect.visitor.CtScanner.scan(CtScanner.java:194)
        at spoon.reflect.visitor.CtScanner.scan(CtScanner.java:184)
        at spoon.reflect.visitor.CtScanner.visitCtBinaryOperator(CtScanner.java:312)
        at typechecking.LatteTypeChecker.visitCtBinaryOperator(LatteTypeChecker.java:572)
        at spoon.support.reflect.code.CtBinaryOperatorImpl.accept(CtBinaryOperatorImpl.java:34)
        at spoon.reflect.visitor.CtScanner.scan(CtScanner.java:194)
        at spoon.reflect.visitor.CtScanner.scan(CtScanner.java:184)
        at spoon.reflect.visitor.CtScanner.visitCtField(CtScanner.java:436)
        at spoon.support.reflect.declaration.CtFieldImpl.accept(CtFieldImpl.java:53)
        at spoon.reflect.visitor.CtScanner.scan(CtScanner.java:194)
        at spoon.reflect.visitor.CtScanner.scan(CtScanner.java:184)
        at spoon.reflect.visitor.CtScanner.scan(CtScanner.java:149)
        at spoon.reflect.visitor.CtScanner.visitCtClass(CtScanner.java:357)
        at typechecking.LatteTypeChecker.visitCtClass(LatteTypeChecker.java:53)
        at spoon.support.reflect.declaration.CtClassImpl.accept(CtClassImpl.java:63)
        at spoon.reflect.visitor.CtScanner.scan(CtScanner.java:194)
        at spoon.reflect.visitor.CtScanner.scan(CtScanner.java:184)
        at spoon.reflect.visitor.CtScanner.scan(CtScanner.java:149)
        at spoon.reflect.visitor.CtScanner.visitCtClass(CtScanner.java:357)
        at typechecking.LatteTypeChecker.visitCtClass(LatteTypeChecker.java:53)
        at spoon.support.reflect.declaration.CtClassImpl.accept(CtClassImpl.java:63)
        at spoon.reflect.visitor.CtScanner.scan(CtScanner.java:194)
        at spoon.reflect.visitor.CtScanner.scan(CtScanner.java:184)
        at spoon.reflect.visitor.CtScanner.scan(CtScanner.java:149)
        at spoon.reflect.visitor.CtScanner.visitCtPackage(CtScanner.java:679)
        at spoon.support.reflect.declaration.CtPackageImpl.accept(CtPackageImpl.java:82)
        at typechecking.LatteProcessor.process(LatteProcessor.java:31)
        at typechecking.LatteProcessor.process(LatteProcessor.java:1)
        at spoon.support.visitor.ProcessingVisitor.scan(ProcessingVisitor.java:72)
        at spoon.support.QueueProcessingManager.process(QueueProcessingManager.java:118)
        at spoon.support.QueueProcessingManager.process(QueueProcessingManager.java:132)
        at api.App.launcher(App.java:90)
        at api.App.main(App.java:31)

Contributor guide

No contributing guide indexed for this repository

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start with the provided MyStackTest example and inspect typechecking/LatteTypeChecker.java at line 270, where the field-read path dereferences permV. Trace how the parent-field assignment is handled, then add or update a regression case so this input no longer produces a NullPointerException and verify the checker’s resulting behavior.

Written by the indexing model from the issue text.

Assessment

Tech stack
java
Domain
compilers
Issue type
Bug
Difficulty
3/5
Estimated time
1-2 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.