False error: @StateSet on a nested class gives "Argument Mismatch Error: ... expected Inner, got Inner"
維護者通常 2 天內回覆
還沒有人認領這個 Issue。
評估
研究方向
Start with TypeChecker.createStateGhost, then follow how GhostFunction and Utils handle the nested-class name Outer$Inner; Expression.throwArgumentMismatchError explains the reported type mismatch. Reproduce using the issue's Java example and compare with the top-level Inner case; done when the nested-class example verifies with “Correct! Passed Verification.”
由索引模型根據 Issue 內容生成。
描述
Impact: typestates on a nested class cannot be used: every state refinement of it fails with a self-contradictory message (expected Inner, got Inner) and no source location. The same class at top level verifies.
Minimal reproducer
import liquidjava.specification.StateRefinement;
import liquidjava.specification.StateSet;
public class Outer {
@StateSet({"fresh", "ready"})
static class Inner {
@StateRefinement(to = "ready(this)")
public Inner() {}
@StateRefinement(from = "ready(this)", to = "fresh(this)")
public void use() {}
}
static void ok() {
Inner i = new Inner();
i.use();
}
}
Expected: Correct! Passed Verification., as for the same Inner as a top-level class.
Actual (main @ 0053074e; this is the whole output, with no code snippet):
Argument Mismatch Error: Argument '#this_1' and its respective parameter of ghost 'Outer$Inner.state1' types are incompatible: expected Inner, got Inner
Cause. TypeChecker.createStateGhost gives the stateN ghost the parameter type type.getSimpleName() (Inner). GhostFunction swaps that for the prefix only when it equals Utils.getSimpleName(prefix), which splits on . only, so for Outer$Inner it is Outer$Inner and the swap does not happen. The parameter type stays an unresolved reference to Inner, which is neither equal to nor a supertype of Outer$Inner in Expression.throwArgumentMismatchError; both print as Inner. Related: the $ vs . naming of nested classes also breaks @Ghost on them (Z3 sort mismatch, #467).
🤖 Generated with Claude Code
- 主要語言
- Java
- 星號
- 71
- 分支
- 37
- 平均合併
- 1 天 19 小時
- 30 天內合併 PR
- 46
環境準備
- 沒有 Dockerfile 或 Docker Compose 檔案
- 有 Pull Request 範本
- 閱讀貢獻指南
從這裡開始
- 先讀完整個 Issue,再讀專案的貢獻指南。
- 在 Issue 下留言說明你要接手 —— 這能避免兩個人做同樣的事。
- Fork 儲存庫,在一個分支上完成修改。
- 送出 Pull Request,並在描述裡引用這個 Issue 編號。
liquid-java/liquidjava 的其他 Issue
-
難度 2/5 1-3 小時 新手友好度 72/100
liquid-java/liquidjava#443 ·
維護者通常 2 天內回覆
-
bug real-world-finding
難度 2/5 1-3 小時 新手友好度 82/100
liquid-java/liquidjava#395 ·
維護者通常 2 天內回覆
-
enhancement
難度 2/5 1-3 小時 新手友好度 65/100
liquid-java/liquidjava#373 ·
維護者通常 2 天內回覆
-
bug error messages
難度 4/5 3-5 天 新手友好度 52/100
liquid-java/liquidjava#471 ·
維護者通常 2 天內回覆
-
bug
難度 3/5 1-2 天 新手友好度 69/100
liquid-java/liquidjava#470 ·
維護者通常 2 天內回覆
查看 liquid-java/liquidjava 的全部 Issue
相似的 Issue
-
status:pending type:bug
難度 2/5 1-3 小時 新手友好度 78/100
EngineHub/WorldGuard#2329 ·
維護者通常 3 天內回覆
-
難度 2/5 1-3 小時 新手友好度 70/100
Dans-Plugins/Medieval-Roleplay-Engine#396 ·
維護者通常 1 天內回覆
-
難度 2/5 1-3 小時 新手友好度 72/100
維護者通常 6 天內回覆
-
type: dependency-upgrade
難度 1/5 1 小時以內 新手友好度 70/100
spring-projects/spring-session#4156 ·
維護者通常 1 天內回覆
-
難度 2/5 1-3 小時 新手友好度 68/100
quarkiverse/quarkus-langchain4j#3127 · 1 則留言 ·
維護者通常 1 天內回覆