Assignment of field to parent field giving error
还没有人认领这个 Issue。
评估
调研方向
从提供的 MyStackTest 示例开始,检查 typechecking/LatteTypeChecker.java 的第 270 行,其中字段读取路径会对 permV 进行解引用。跟踪父字段赋值的处理方式,然后添加或更新一个回归用例,使该输入不再产生 NullPointerException,并验证 checker 的结果行为。
由索引模型根据 Issue 内容生成。
描述
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)
- 主要语言
- Java
- 星标
- 3
- 派生
- 1
- PR 合并指标
- 30 天内没有已合并 PR
贡献指南
这个仓库没有索引到贡献指南
从这里开始
- 先读完整个 Issue,再读项目的贡献指南。
- 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
- Fork 仓库,在一个分支上完成修改。
- 提交 Pull Request,并在描述里引用这个 Issue 编号。
liquid-java/latte 的其他 Issue
-
难度 4/5 3-5 天 新手友好度 42/100
liquid-java/latte#26 ·
-
bug
难度 4/5 3-5 天 新手友好度 35/100
liquid-java/latte#25 ·
-
enhancement
难度 4/5 3-5 天 新手友好度 35/100
liquid-java/latte#24 ·
-
liquid-java/latte#22 · 已指派 1 人 ·
-
bug
liquid-java/latte#17 · 已指派 1 人 ·
查看 liquid-java/latte 的全部 Issue
相似的 Issue
-
documentation
难度 2/5 1-3 小时 新手友好度 65/100
inu-appcenter/memorIN-backend#288 ·
-
难度 2/5 1-3 小时 新手友好度 65/100
-
frontend maui-pilot pilot-ask question
难度 2/5 1-3 小时 新手友好度 75/100
-
难度 2/5 1-3 小时 新手友好度 75/100
-
area/plugin
难度 2/5 1-3 小时 新手友好度 75/100
kestra-io/plugin-kestra#190 ·