From 5c6ecef5c3159a31275376a6c6ef526d18235294 Mon Sep 17 00:00:00 2001 From: wrongwrong Date: Sun, 2 Aug 2026 00:21:39 +0900 Subject: [PATCH 1/9] =?UTF-8?q?docs:=20=E5=90=8C=E4=B8=80=20sealed=20?= =?UTF-8?q?=E9=9A=8E=E5=B1=A4=E3=81=AE1=E3=83=95=E3=82=A1=E3=82=A4?= =?UTF-8?q?=E3=83=AB=E9=9B=86=E7=B4=84=E3=82=92=E8=A6=8F=E7=B4=84=E3=81=A7?= =?UTF-8?q?=E8=A8=B1=E5=AE=B9=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1ファイル1クラス規約により、階層の基底・末端・その周辺宣言が 数行のファイルへ細かく分割されていた。同一 sealed 階層を構成する クラス群に限り1ファイルへまとめてよいものとする。 Co-Authored-By: Claude Opus 5 --- CLAUDE.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CLAUDE.md b/CLAUDE.md index 583ddd5..c114446 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -25,6 +25,10 @@ - ライブラリバージョン変更が必要な場合、まず提案を行え - `import`無しでの外部定義利用は禁止(FQCNをコード中に直接書かない) - クラスは1ファイルにつき1つまで + - 例外として、同一の`sealed`階層を構成するクラス群は1ファイルへまとめてよい + - 末端・中間の他、末端の吸収サブタイプや`kind`の親クラスも同階層の構成要素として扱う + - ファイル名は基底の名前とする + - 配置(ネスト/トップレベル)自体が意味を持つ場合を除き、ネスト配置を優先する - 処理は意味単位で適切に関数分割すること - 1クラスは500行に収める - デフォルト引数は、コンフィグ系など表現が適切となる場合にのみ利用する From c715a37044bdbb1df8db3ee8384f5017f46250a8 Mon Sep 17 00:00:00 2001 From: wrongwrong Date: Sun, 2 Aug 2026 00:51:06 +0900 Subject: [PATCH 2/9] =?UTF-8?q?test:=20producer-jvm=20=E3=81=AE=E3=83=95?= =?UTF-8?q?=E3=82=A3=E3=82=AF=E3=82=B9=E3=83=81=E3=83=A3=E3=82=92=E9=9A=8E?= =?UTF-8?q?=E5=B1=A4=E5=8D=98=E4=BD=8D=E3=81=AE=E3=83=95=E3=82=A1=E3=82=A4?= =?UTF-8?q?=E3=83=AB=E3=81=B8=E5=86=8D=E7=B7=A8=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 基底・末端・吸収サブタイプ・kind の親クラスを基底名のファイルへ集約する (103 -> 41 ファイル)。宣言のネスト位置は変えない。entries の整列キーは 末端の FQN であり、ネストを動かすと期待値が変わるためである。 分離を保つのは検証の成立条件となる配置のみとする。 - private トップレベルの壁: vis.pub の VisRootFarLeaves - K7 の別ファイル配置: order.flat の FlatRootLeaves - import 集合が解決文脈となる: scope.target の競合 3 形 Co-Authored-By: Claude Opus 5 --- .../fixtures/companionleaf/Holder2.kt | 8 --- .../fixtures/companionleaf/Host.kt | 8 --- .../fixtures/companionleaf/HostA.kt | 5 -- .../fixtures/companionleaf/Token.kt | 28 +++++++- .../fixtures/companionleaf/WithNamed.kt | 7 -- .../projectmapk/fixtures/label/AliasNs.kt | 9 --- .../fixtures/label/AliasResolved.kt | 10 ++- .../fixtures/manual/impl/ManualHidden.kt | 8 --- .../fixtures/manual/impl/ManualLeaf.kt | 15 ---- .../fixtures/manual/impl/ManualSub.kt | 5 -- .../fixtures/manual/impl/WithManual.kt | 27 +++++++- .../fixtures/manual/tostr/BaseDisplay.kt | 6 -- .../fixtures/manual/tostr/Demanding.kt | 7 -- .../fixtures/manual/tostr/Displayed.kt | 17 +++++ .../fixtures/manual/tostr/FixedDisplay.kt | 7 -- .../projectmapk/fixtures/mid/LeafViaIface.kt | 4 -- .../projectmapk/fixtures/mid/LeafViaMid.kt | 5 -- .../projectmapk/fixtures/mid/MidClass.kt | 7 -- .../projectmapk/fixtures/mid/MidIface.kt | 7 -- .../github/projectmapk/fixtures/mid/MpBoth.kt | 5 -- .../github/projectmapk/fixtures/mid/MpLeft.kt | 4 -- .../projectmapk/fixtures/mid/MpOnlyLeft.kt | 4 -- .../projectmapk/fixtures/mid/MpOnlyRight.kt | 4 -- .../projectmapk/fixtures/mid/MpRight.kt | 4 -- .../projectmapk/fixtures/mid/MultiPath.kt | 19 ++++- .../projectmapk/fixtures/mid/RootVia.kt | 23 ++++++- .../projectmapk/fixtures/order/flat/AB1.kt | 5 -- .../projectmapk/fixtures/order/flat/Ab2.kt | 4 -- .../projectmapk/fixtures/order/flat/Box.kt | 6 -- .../fixtures/order/flat/FlatRoot.kt | 4 +- .../fixtures/order/flat/FlatRootLeaves.kt | 49 +++++++++++++ .../projectmapk/fixtures/order/flat/Foo.kt | 6 -- .../projectmapk/fixtures/order/flat/FooBar.kt | 4 -- .../projectmapk/fixtures/order/flat/Mmm.kt | 4 -- .../projectmapk/fixtures/order/flat/Sep.kt | 7 -- .../projectmapk/fixtures/order/flat/Sep0.kt | 4 -- .../projectmapk/fixtures/order/flat/Zzz.kt | 4 -- .../projectmapk/fixtures/order/flat/aB3.kt | 4 -- .../projectmapk/fixtures/order/flat/aLower.kt | 4 -- .../projectmapk/fixtures/order/flat/ab4.kt | 4 -- .../projectmapk/fixtures/order/mid/Aaa.kt | 4 -- .../projectmapk/fixtures/order/mid/Early.kt | 4 -- .../projectmapk/fixtures/order/mid/Late.kt | 4 -- .../fixtures/order/mid/MidMulti.kt | 9 --- .../projectmapk/fixtures/order/mid/MidNest.kt | 9 --- .../projectmapk/fixtures/order/mid/MidRoot.kt | 52 +++++++++++++- .../projectmapk/fixtures/order/mid/MidTop.kt | 5 -- .../projectmapk/fixtures/order/mid/Outpost.kt | 5 -- .../projectmapk/fixtures/order/mid/Probe.kt | 9 --- .../projectmapk/fixtures/order/mid/Wide.kt | 4 -- .../projectmapk/fixtures/order/mid/Zzz.kt | 4 -- .../projectmapk/fixtures/reentry/InitProbe.kt | 7 -- .../projectmapk/fixtures/reentry/LazyRoot.kt | 5 ++ .../projectmapk/fixtures/scope/target/Base.kt | 5 -- .../fixtures/scope/target/Holder.kt | 9 ++- .../fixtures/vis/narrow/AutoWide.kt | 5 -- .../fixtures/vis/narrow/NarrowBase.kt | 23 ++++++- .../fixtures/vis/narrow/NarrowLeaf.kt | 7 -- .../fixtures/vis/narrow/PublicLeaf.kt | 8 --- .../projectmapk/fixtures/vis/priv/PrivBase.kt | 3 +- .../projectmapk/fixtures/vis/pub/CmdFall.kt | 10 --- .../fixtures/vis/pub/FarInternal.kt | 5 -- .../projectmapk/fixtures/vis/pub/FarSecret.kt | 5 -- .../projectmapk/fixtures/vis/pub/Forged.kt | 7 -- .../projectmapk/fixtures/vis/pub/Half.kt | 7 -- .../fixtures/vis/pub/HiddenHost.kt | 7 -- .../projectmapk/fixtures/vis/pub/HiddenMid.kt | 5 -- .../github/projectmapk/fixtures/vis/pub/MA.kt | 6 -- .../projectmapk/fixtures/vis/pub/PrivComp.kt | 7 -- .../projectmapk/fixtures/vis/pub/ProtComp.kt | 8 --- .../projectmapk/fixtures/vis/pub/ValFall.kt | 8 --- .../projectmapk/fixtures/vis/pub/VisRoot.kt | 69 ++++++++++++++++--- .../fixtures/vis/pub/VisRootFarLeaves.kt | 21 ++++++ .../projectmapk/fixtures/zoo/Crafted.kt | 5 -- .../github/projectmapk/fixtures/zoo/Oval.kt | 5 -- .../github/projectmapk/fixtures/zoo/Quad.kt | 4 -- .../github/projectmapk/fixtures/zoo/Spot.kt | 5 -- .../github/projectmapk/fixtures/zoo/Square.kt | 5 -- .../github/projectmapk/fixtures/zoo/Veil.kt | 6 -- .../io/github/projectmapk/fixtures/zoo/Zoo.kt | 25 ++++++- 80 files changed, 350 insertions(+), 413 deletions(-) delete mode 100644 integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/companionleaf/Holder2.kt delete mode 100644 integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/companionleaf/Host.kt delete mode 100644 integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/companionleaf/HostA.kt delete mode 100644 integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/companionleaf/WithNamed.kt delete mode 100644 integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/label/AliasNs.kt delete mode 100644 integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/manual/impl/ManualHidden.kt delete mode 100644 integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/manual/impl/ManualLeaf.kt delete mode 100644 integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/manual/impl/ManualSub.kt delete mode 100644 integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/manual/tostr/BaseDisplay.kt delete mode 100644 integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/manual/tostr/Demanding.kt delete mode 100644 integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/manual/tostr/FixedDisplay.kt delete mode 100644 integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/mid/LeafViaIface.kt delete mode 100644 integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/mid/LeafViaMid.kt delete mode 100644 integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/mid/MidClass.kt delete mode 100644 integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/mid/MidIface.kt delete mode 100644 integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/mid/MpBoth.kt delete mode 100644 integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/mid/MpLeft.kt delete mode 100644 integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/mid/MpOnlyLeft.kt delete mode 100644 integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/mid/MpOnlyRight.kt delete mode 100644 integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/mid/MpRight.kt delete mode 100644 integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/order/flat/AB1.kt delete mode 100644 integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/order/flat/Ab2.kt delete mode 100644 integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/order/flat/Box.kt create mode 100644 integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/order/flat/FlatRootLeaves.kt delete mode 100644 integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/order/flat/Foo.kt delete mode 100644 integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/order/flat/FooBar.kt delete mode 100644 integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/order/flat/Mmm.kt delete mode 100644 integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/order/flat/Sep.kt delete mode 100644 integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/order/flat/Sep0.kt delete mode 100644 integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/order/flat/Zzz.kt delete mode 100644 integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/order/flat/aB3.kt delete mode 100644 integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/order/flat/aLower.kt delete mode 100644 integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/order/flat/ab4.kt delete mode 100644 integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/order/mid/Aaa.kt delete mode 100644 integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/order/mid/Early.kt delete mode 100644 integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/order/mid/Late.kt delete mode 100644 integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/order/mid/MidMulti.kt delete mode 100644 integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/order/mid/MidNest.kt delete mode 100644 integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/order/mid/MidTop.kt delete mode 100644 integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/order/mid/Outpost.kt delete mode 100644 integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/order/mid/Probe.kt delete mode 100644 integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/order/mid/Wide.kt delete mode 100644 integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/order/mid/Zzz.kt delete mode 100644 integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/reentry/InitProbe.kt delete mode 100644 integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/scope/target/Base.kt delete mode 100644 integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/vis/narrow/AutoWide.kt delete mode 100644 integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/vis/narrow/NarrowLeaf.kt delete mode 100644 integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/vis/narrow/PublicLeaf.kt delete mode 100644 integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/vis/pub/CmdFall.kt delete mode 100644 integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/vis/pub/FarInternal.kt delete mode 100644 integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/vis/pub/FarSecret.kt delete mode 100644 integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/vis/pub/Forged.kt delete mode 100644 integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/vis/pub/Half.kt delete mode 100644 integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/vis/pub/HiddenHost.kt delete mode 100644 integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/vis/pub/HiddenMid.kt delete mode 100644 integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/vis/pub/MA.kt delete mode 100644 integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/vis/pub/PrivComp.kt delete mode 100644 integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/vis/pub/ProtComp.kt delete mode 100644 integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/vis/pub/ValFall.kt create mode 100644 integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/vis/pub/VisRootFarLeaves.kt delete mode 100644 integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/zoo/Crafted.kt delete mode 100644 integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/zoo/Oval.kt delete mode 100644 integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/zoo/Quad.kt delete mode 100644 integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/zoo/Spot.kt delete mode 100644 integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/zoo/Square.kt delete mode 100644 integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/zoo/Veil.kt diff --git a/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/companionleaf/Holder2.kt b/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/companionleaf/Holder2.kt deleted file mode 100644 index 5bdde88..0000000 --- a/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/companionleaf/Holder2.kt +++ /dev/null @@ -1,8 +0,0 @@ -package io.github.projectmapk.fixtures.companionleaf - -// 名前つき companion(Zzz)が末端となる順序プローブ(docs/test/ケース03-順序.md ORD-08)。 -// companion 自身が末端の場合は宣言名が label と末端 ClassId(= 順序キー)の両方に効き、 -// p.Holder2.Zzz は共通接頭辞 "Ho" の後 'l'(108) < 's'(115) の比較で p.Host.Companion より先行する -class Holder2 { - companion object Zzz : Token -} diff --git a/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/companionleaf/Host.kt b/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/companionleaf/Host.kt deleted file mode 100644 index 7592c05..0000000 --- a/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/companionleaf/Host.kt +++ /dev/null @@ -1,8 +0,0 @@ -package io.github.projectmapk.fixtures.companionleaf - -// Host 自身は階層外で、companion のみが末端(docs/test/ケース01-生成と実行時API.md API-25。 -// kind = companion 自身・label = 宣言名 "Companion")。 -// ENUMIZE_COMPANION_LEAF_CONFLICT は外側 = 末端の場合にのみ発火し、この構成は許容される -class Host { - companion object : Token -} diff --git a/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/companionleaf/HostA.kt b/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/companionleaf/HostA.kt deleted file mode 100644 index 01af6cc..0000000 --- a/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/companionleaf/HostA.kt +++ /dev/null @@ -1,5 +0,0 @@ -package io.github.projectmapk.fixtures.companionleaf - -// 序数境界の対照末端(docs/test/ケース03-順序.md ORD-08): p.Host.Companion と p.HostA は -// 共通接頭辞 "Host" の後 '.'(46) < 'A'(65) のため Host.Companion が HostA より先行する -data object HostA : Token diff --git a/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/companionleaf/Token.kt b/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/companionleaf/Token.kt index d6b2f11..dd79185 100644 --- a/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/companionleaf/Token.kt +++ b/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/companionleaf/Token.kt @@ -4,7 +4,29 @@ import io.github.projectmapk.sealedClassEnumizer.Enumize // 階層外クラスの companion が単独で末端になる許容構成(docs/test/ケース01-生成と実行時API.md // API-25/API-26・docs/test/ケース03-順序.md ORD-08)。 -// 継承者はファイル分散: Host.kt(既定名 companion 末端)・WithNamed.kt(名前つき companion 末端)・ -// HostA.kt('.'(46) 序数境界の対照)・Holder2.kt(名前つき companion の順序プローブ)。 -// 基底 / 中間の companion 末端の成立形は sealedbase / mid が担う +// 基底 / 中間の companion 末端の成立形は sealedbase / mid が担う。 +// +// 期待 entries(label 列。FQN UTF-16 序数): [Zzz, Companion, HostA, Named] @Enumize sealed interface Token + +// Host 自身は階層外で、companion のみが末端(API-25。kind = companion 自身・label = 宣言名 "Companion")。 +// ENUMIZE_COMPANION_LEAF_CONFLICT は外側 = 末端の場合にのみ発火し、この構成は許容される +class Host { + companion object : Token +} + +// 名前つき companion が単独で末端(API-26。companion 自身が末端の場合に限り label = 宣言名 "Named") +class WithNamed { + companion object Named : Token +} + +// 序数境界の対照末端(ORD-08): p.Host.Companion と p.HostA は +// 共通接頭辞 "Host" の後 '.'(46) < 'A'(65) のため Host.Companion が HostA より先行する +data object HostA : Token + +// 名前つき companion(Zzz)が末端となる順序プローブ(ORD-08)。 +// companion 自身が末端の場合は宣言名が label と末端 ClassId(= 順序キー)の両方に効き、 +// p.Holder2.Zzz は共通接頭辞 "Ho" の後 'l'(108) < 's'(115) の比較で p.Host.Companion より先行する +class Holder2 { + companion object Zzz : Token +} diff --git a/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/companionleaf/WithNamed.kt b/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/companionleaf/WithNamed.kt deleted file mode 100644 index f17bdf1..0000000 --- a/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/companionleaf/WithNamed.kt +++ /dev/null @@ -1,7 +0,0 @@ -package io.github.projectmapk.fixtures.companionleaf - -// 名前つき companion が単独で末端(docs/test/ケース01-生成と実行時API.md API-26)。 -// companion 自身が末端の場合に限り label = 宣言名 "Named" -class WithNamed { - companion object Named : Token -} diff --git a/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/label/AliasNs.kt b/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/label/AliasNs.kt deleted file mode 100644 index db3e356..0000000 --- a/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/label/AliasNs.kt +++ /dev/null @@ -1,9 +0,0 @@ -package io.github.projectmapk.fixtures.label - -import io.github.projectmapk.sealedClassEnumizer.EnumishLabel - -// AliasResolved.Same と同一単純名の末端を階層外クラスのネストに持ち、明示 label で -// LABEL_CLASH を解消する構成(docs/test/ケース01-生成と実行時API.md API-56) -class AliasNs { - @EnumishLabel("SameInNs") data object Same : AliasResolved -} diff --git a/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/label/AliasResolved.kt b/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/label/AliasResolved.kt index ffcb184..c7e1677 100644 --- a/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/label/AliasResolved.kt +++ b/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/label/AliasResolved.kt @@ -1,10 +1,16 @@ package io.github.projectmapk.fixtures.label +import io.github.projectmapk.sealedClassEnumizer.EnumishLabel import io.github.projectmapk.sealedClassEnumizer.Enumize -// 明示 label による単純名衝突の解消の片側(docs/test/ケース01-生成と実行時API.md API-56)。 -// もう片側(同一単純名 Same の別配置末端)は AliasNs.kt +// 明示 label による単純名衝突の解消(docs/test/ケース01-生成と実行時API.md API-56)。 +// 同一単純名 Same の末端を基底ネストと階層外クラスのネストへ 1 つずつ置き、後者を明示 label で解消する @Enumize sealed interface AliasResolved { data object Same : AliasResolved } + +// AliasResolved.Same と同一単純名の末端を持つ階層外クラス +class AliasNs { + @EnumishLabel("SameInNs") data object Same : AliasResolved +} diff --git a/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/manual/impl/ManualHidden.kt b/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/manual/impl/ManualHidden.kt deleted file mode 100644 index 90584c4..0000000 --- a/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/manual/impl/ManualHidden.kt +++ /dev/null @@ -1,8 +0,0 @@ -package io.github.projectmapk.fixtures.manual.impl - -// 可視性の低い階層内手動実装(internal 形。docs/test/ケース01-生成と実行時API.md API-40)。 -// object 末端の生成 Enumish 冗長宣言は注入スキップで許容され(ケース04 DIA-51 の末端 Enumish -// 冗長宣言と同形)、kind は自身のまま entries に掲載される。メンバーの手動宣言は -// ENUMIZE_MEMBER_CONFLICT になるため置かない。internal のため跨 module の kind-when では -// else が必要になる(ケース05 が正典) -internal object ManualHidden : WithManual, WithManual.Enumish diff --git a/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/manual/impl/ManualLeaf.kt b/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/manual/impl/ManualLeaf.kt deleted file mode 100644 index 4ec3fb3..0000000 --- a/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/manual/impl/ManualLeaf.kt +++ /dev/null @@ -1,15 +0,0 @@ -package io.github.projectmapk.fixtures.manual.impl - -import kotlin.reflect.KClass - -// 階層内の手動実装(open 形。docs/test/ケース01-生成と実行時API.md API-40): -// 末端 class 自身が生成 Enumish を実装する形で、直接実装として inheritors に登載される -// (kind 単位の網羅 when に is 枝が必要 = API-41)。インスタンスは Enumish として振る舞うが -// kind ではない(この末端の kind は自動生成 companion) -open class ManualLeaf(val v: Int) : WithManual, WithManual.Enumish { - override val label: String - get() = "manual-value" - - override val enumizedClass: KClass - get() = ManualLeaf::class -} diff --git a/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/manual/impl/ManualSub.kt b/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/manual/impl/ManualSub.kt deleted file mode 100644 index cd2c749..0000000 --- a/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/manual/impl/ManualSub.kt +++ /dev/null @@ -1,5 +0,0 @@ -package io.github.projectmapk.fixtures.manual.impl - -// open 手動実装の下流サブタイプ(docs/test/ケース01-生成と実行時API.md API-41)。 -// 生成 Enumish を直接実装しないため inheritors には登載されず、既存の is ManualLeaf 枝が被覆する -class ManualSub(v: Int) : ManualLeaf(v) diff --git a/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/manual/impl/WithManual.kt b/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/manual/impl/WithManual.kt index 40a6176..2c22dbe 100644 --- a/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/manual/impl/WithManual.kt +++ b/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/manual/impl/WithManual.kt @@ -1,12 +1,35 @@ package io.github.projectmapk.fixtures.manual.impl import io.github.projectmapk.sealedClassEnumizer.Enumize +import kotlin.reflect.KClass -// 手動実装の許容フィクスチャ基底(docs/test/ケース01-生成と実行時API.md API-40/API-41)。 +// 手動実装の許容フィクスチャ(docs/test/ケース01-生成と実行時API.md API-40/API-41)。 // 階層内による生成 Enumish の実装はエラーにならず、class 形の手動実装値は kind ではないため // entries / valueOf に現れない。階層外からの直接実装は ENUMIZE_MANUAL_IMPL_OUTSIDE_HIERARCHY -// (ケース04 が正典) +// (ケース04 が正典。自由実装の許容形は FreeAgent.kt) @Enumize sealed interface WithManual { data object Real : WithManual } + +// 階層内の手動実装(open 形。API-40): 末端 class 自身が生成 Enumish を実装する形で、 +// 直接実装として inheritors に登載される(kind 単位の網羅 when に is 枝が必要 = API-41)。 +// インスタンスは Enumish として振る舞うが kind ではない(この末端の kind は自動生成 companion) +open class ManualLeaf(val v: Int) : WithManual, WithManual.Enumish { + override val label: String + get() = "manual-value" + + override val enumizedClass: KClass + get() = ManualLeaf::class +} + +// open 手動実装の下流サブタイプ(API-41)。 +// 生成 Enumish を直接実装しないため inheritors には登載されず、既存の is ManualLeaf 枝が被覆する +class ManualSub(v: Int) : ManualLeaf(v) + +// 可視性の低い階層内手動実装(internal 形。API-40)。 +// object 末端の生成 Enumish 冗長宣言は注入スキップで許容され(ケース04 DIA-51 の末端 Enumish +// 冗長宣言と同形)、kind は自身のまま entries に掲載される。メンバーの手動宣言は +// ENUMIZE_MEMBER_CONFLICT になるため置かない。internal のため跨 module の kind-when では +// else が必要になる(ケース05 が正典) +internal object ManualHidden : WithManual, WithManual.Enumish diff --git a/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/manual/tostr/BaseDisplay.kt b/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/manual/tostr/BaseDisplay.kt deleted file mode 100644 index b047a65..0000000 --- a/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/manual/tostr/BaseDisplay.kt +++ /dev/null @@ -1,6 +0,0 @@ -package io.github.projectmapk.fixtures.manual.tostr - -// Any 以外の具象 toString を提供する親クラス(docs/test/ケース01-生成と実行時API.md API-35 の継承元) -open class BaseDisplay { - override fun toString(): String = "base-display" -} diff --git a/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/manual/tostr/Demanding.kt b/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/manual/tostr/Demanding.kt deleted file mode 100644 index 260fb94..0000000 --- a/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/manual/tostr/Demanding.kt +++ /dev/null @@ -1,7 +0,0 @@ -package io.github.projectmapk.fixtures.manual.tostr - -// toString を抽象として再宣言する親クラス(docs/test/ケース01-生成と実行時API.md API-37。 -// 生成は充足を肩代わりせず、kind 側の手動実装が必要) -abstract class Demanding { - abstract override fun toString(): String -} diff --git a/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/manual/tostr/Displayed.kt b/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/manual/tostr/Displayed.kt index b19f287..49a504f 100644 --- a/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/manual/tostr/Displayed.kt +++ b/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/manual/tostr/Displayed.kt @@ -45,3 +45,20 @@ sealed interface Displayed { // ENUMIZE_EXTENSION_SHADOWED 警告の発火照合はケース04 が正典) data class Tagged(val label: String) : Displayed } + +// --- 末端 / kind が継承する toString 供給元 --- + +// Any 以外の具象 toString を提供する親クラス(API-35 の継承元) +open class BaseDisplay { + override fun toString(): String = "base-display" +} + +// final override の toString を持つ親クラス(API-35。生成をスキップするため final 衝突は起きない) +open class FixedDisplay { + final override fun toString(): String = "fixed-display" +} + +// toString を抽象として再宣言する親クラス(API-37。生成は充足を肩代わりせず、kind 側の手動実装が必要) +abstract class Demanding { + abstract override fun toString(): String +} diff --git a/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/manual/tostr/FixedDisplay.kt b/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/manual/tostr/FixedDisplay.kt deleted file mode 100644 index b3b9820..0000000 --- a/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/manual/tostr/FixedDisplay.kt +++ /dev/null @@ -1,7 +0,0 @@ -package io.github.projectmapk.fixtures.manual.tostr - -// final override の toString を持つ親クラス(docs/test/ケース01-生成と実行時API.md API-35。 -// 生成をスキップするため final 衝突は起きない) -open class FixedDisplay { - final override fun toString(): String = "fixed-display" -} diff --git a/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/mid/LeafViaIface.kt b/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/mid/LeafViaIface.kt deleted file mode 100644 index 9f5c56c..0000000 --- a/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/mid/LeafViaIface.kt +++ /dev/null @@ -1,4 +0,0 @@ -package io.github.projectmapk.fixtures.mid - -// 中間 sealed interface 経由の末端・companion 明示なし(docs/test/ケース01-生成と実行時API.md API-29) -class LeafViaIface(val v: Int) : MidIface diff --git a/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/mid/LeafViaMid.kt b/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/mid/LeafViaMid.kt deleted file mode 100644 index ed1e7ff..0000000 --- a/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/mid/LeafViaMid.kt +++ /dev/null @@ -1,5 +0,0 @@ -package io.github.projectmapk.fixtures.mid - -// 中間 sealed class 経由の末端・companion 明示なし(docs/test/ケース01-生成と実行時API.md API-29)。 -// raw 追跡再帰が `:MidClass()` → MidClass → RootVia へ到達し companion が自動生成される -class LeafViaMid(val v: Int) : MidClass() diff --git a/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/mid/MidClass.kt b/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/mid/MidClass.kt deleted file mode 100644 index e83c393..0000000 --- a/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/mid/MidClass.kt +++ /dev/null @@ -1,7 +0,0 @@ -package io.github.projectmapk.fixtures.mid - -// 中間 sealed class(entries には載らない。docs/test/ケース01-生成と実行時API.md API-30 の経由点)。 -// companion は自身が RootVia を実装する末端であり成立する(API-52。中間 companion 末端の成立形) -sealed class MidClass : RootVia { - companion object : RootVia -} diff --git a/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/mid/MidIface.kt b/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/mid/MidIface.kt deleted file mode 100644 index 6740ffb..0000000 --- a/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/mid/MidIface.kt +++ /dev/null @@ -1,7 +0,0 @@ -package io.github.projectmapk.fixtures.mid - -// 中間 sealed interface(entries には載らない。docs/test/ケース01-生成と実行時API.md API-30 の経由点)。 -// 明示 companion は階層を実装せず、Enumish 非注入・kind 非成立のまま残る(API-30 の観測点) -sealed interface MidIface : RootVia { - companion object -} diff --git a/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/mid/MpBoth.kt b/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/mid/MpBoth.kt deleted file mode 100644 index ba0d420..0000000 --- a/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/mid/MpBoth.kt +++ /dev/null @@ -1,5 +0,0 @@ -package io.github.projectmapk.fixtures.mid - -// 2 つの中間 sealed を同時に実装する末端(companion 明示なし = 多重経路での候補判定も観測する)。 -// MpLeft 経由の初出位置に 1 回だけ entries へ載る(docs/test/ケース01-生成と実行時API.md API-57) -class MpBoth : MpLeft, MpRight diff --git a/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/mid/MpLeft.kt b/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/mid/MpLeft.kt deleted file mode 100644 index 34d7de0..0000000 --- a/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/mid/MpLeft.kt +++ /dev/null @@ -1,4 +0,0 @@ -package io.github.projectmapk.fixtures.mid - -// 兄弟中間の一方(多重経路末端 MpBoth の初出経路。docs/test/ケース01-生成と実行時API.md API-57) -sealed interface MpLeft : MultiPath diff --git a/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/mid/MpOnlyLeft.kt b/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/mid/MpOnlyLeft.kt deleted file mode 100644 index f1382a9..0000000 --- a/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/mid/MpOnlyLeft.kt +++ /dev/null @@ -1,4 +0,0 @@ -package io.github.projectmapk.fixtures.mid - -// MpLeft 単独経路の末端(MpBoth の後続 = 初出位置の対照。docs/test/ケース01-生成と実行時API.md API-57) -data object MpOnlyLeft : MpLeft diff --git a/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/mid/MpOnlyRight.kt b/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/mid/MpOnlyRight.kt deleted file mode 100644 index bf1f7b6..0000000 --- a/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/mid/MpOnlyRight.kt +++ /dev/null @@ -1,4 +0,0 @@ -package io.github.projectmapk.fixtures.mid - -// MpRight 単独経路の末端(MpBoth の重複が除かれた後に続く。docs/test/ケース01-生成と実行時API.md API-57) -data object MpOnlyRight : MpRight diff --git a/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/mid/MpRight.kt b/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/mid/MpRight.kt deleted file mode 100644 index 6e3042e..0000000 --- a/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/mid/MpRight.kt +++ /dev/null @@ -1,4 +0,0 @@ -package io.github.projectmapk.fixtures.mid - -// 兄弟中間の他方(多重経路末端 MpBoth の 2 度目の到達経路。docs/test/ケース01-生成と実行時API.md API-57) -sealed interface MpRight : MultiPath diff --git a/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/mid/MultiPath.kt b/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/mid/MultiPath.kt index e540451..d0340f8 100644 --- a/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/mid/MultiPath.kt +++ b/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/mid/MultiPath.kt @@ -2,8 +2,23 @@ package io.github.projectmapk.fixtures.mid import io.github.projectmapk.sealedClassEnumizer.Enumize -// 多重経路(複数の中間 sealed を同時に実装する末端)のフィクスチャ基底 +// 多重経路(複数の中間 sealed を同時に実装する末端)のフィクスチャ // (docs/test/ケース01-生成と実行時API.md API-57)。 -// 継承者はファイル分散: MpLeft.kt / MpRight.kt(兄弟中間)と各末端ファイル。 // RootVia とは独立した階層とし、entries スナップショットを相互に汚さない @Enumize sealed interface MultiPath + +// 兄弟中間の一方(多重経路末端 MpBoth の初出経路) +sealed interface MpLeft : MultiPath + +// 兄弟中間の他方(多重経路末端 MpBoth の 2 度目の到達経路) +sealed interface MpRight : MultiPath + +// 2 つの中間 sealed を同時に実装する末端(companion 明示なし = 多重経路での候補判定も観測する)。 +// MpLeft 経由の初出位置に 1 回だけ entries へ載る +class MpBoth : MpLeft, MpRight + +// MpLeft 単独経路の末端(MpBoth の後続 = 初出位置の対照) +data object MpOnlyLeft : MpLeft + +// MpRight 単独経路の末端(MpBoth の重複が除かれた後に続く) +data object MpOnlyRight : MpRight diff --git a/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/mid/RootVia.kt b/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/mid/RootVia.kt index 9df4248..6eac006 100644 --- a/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/mid/RootVia.kt +++ b/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/mid/RootVia.kt @@ -3,7 +3,24 @@ package io.github.projectmapk.fixtures.mid import io.github.projectmapk.sealedClassEnumizer.Enumize // 中間 sealed 経由の raw 追跡再帰フィクスチャ(docs/test/ケース01-生成と実行時API.md -// API-29/API-30/API-52)。 -// 継承者はファイル分散: MidClass.kt(sealed class 中間 + companion 末端)・ -// MidIface.kt(sealed interface 中間 + 非実装 companion)と各経由の末端ファイル +// API-29/API-30/API-52)。中間は entries に載らず、経由末端の companion は自動生成される @Enumize sealed interface RootVia + +// 中間 sealed class(API-30 の経由点)。 +// companion は自身が RootVia を実装する末端であり成立する(API-52。中間 companion 末端の成立形) +sealed class MidClass : RootVia { + companion object : RootVia +} + +// 中間 sealed interface(API-30 の経由点)。 +// 明示 companion は階層を実装せず、Enumish 非注入・kind 非成立のまま残る(API-30 の観測点) +sealed interface MidIface : RootVia { + companion object +} + +// 中間 sealed class 経由の末端・companion 明示なし(API-29)。 +// raw 追跡再帰が `:MidClass()` → MidClass → RootVia へ到達し companion が自動生成される +class LeafViaMid(val v: Int) : MidClass() + +// 中間 sealed interface 経由の末端・companion 明示なし(API-29) +class LeafViaIface(val v: Int) : MidIface diff --git a/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/order/flat/AB1.kt b/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/order/flat/AB1.kt deleted file mode 100644 index faac5c0..0000000 --- a/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/order/flat/AB1.kt +++ /dev/null @@ -1,5 +0,0 @@ -package io.github.projectmapk.fixtures.order.flat - -// 大小区別境界の別ファイルトップレベル末端(docs/test/ケース03-順序.md ORD-01。 -// 数字サフィックスは Windows FS の大小無視ファイル名衝突の回避) -data object AB1 : FlatRoot diff --git a/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/order/flat/Ab2.kt b/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/order/flat/Ab2.kt deleted file mode 100644 index e1307fe..0000000 --- a/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/order/flat/Ab2.kt +++ /dev/null @@ -1,4 +0,0 @@ -package io.github.projectmapk.fixtures.order.flat - -// 大小区別境界の別ファイルトップレベル末端(docs/test/ケース03-順序.md ORD-01) -data object Ab2 : FlatRoot diff --git a/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/order/flat/Box.kt b/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/order/flat/Box.kt deleted file mode 100644 index c74cf26..0000000 --- a/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/order/flat/Box.kt +++ /dev/null @@ -1,6 +0,0 @@ -package io.github.projectmapk.fixtures.order.flat - -// 無関係クラス内ネスト配置の末端 Bbb(docs/test/ケース03-順序.md ORD-01。ClassId 残部 = Box.Bbb) -class Box { - data object Bbb : FlatRoot -} diff --git a/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/order/flat/FlatRoot.kt b/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/order/flat/FlatRoot.kt index 72ae068..39c13ce 100644 --- a/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/order/flat/FlatRoot.kt +++ b/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/order/flat/FlatRoot.kt @@ -3,8 +3,8 @@ package io.github.projectmapk.fixtures.order.flat import io.github.projectmapk.sealedClassEnumizer.Enumize // 中間無し 17 末端の順序フィクスチャ基底(docs/test/ケース03-順序.md §2.1・ORD-01/ORD-02/ORD-05/ORD-06)。 -// 本ファイルは「同一ファイルトップレベル」配置軸(K7)と宣言順≠FQN 順の要請(ORD-02)で複数トップレベル -// 宣言を同居させるため、1 ファイル 1 クラス規約の適用外とする。 +// 本ファイルは K7 の配置値のうち「基底ネスト」と「同一ファイルトップレベル」を担い、 +// 残る「別ファイルトップレベル」「無関係クラスネスト」は FlatRootLeaves.kt が担う。 // // 期待 entries(label 列。FQN UTF-16 序数・ケース03 §2.1 の導出どおり): // [A1, AA, AB1, A_, Ab2, Az, Bbb, Aaa, Foo, FooBar, Mmm, Q, Sep0, Zzz, aB3, aLower, ab4] diff --git a/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/order/flat/FlatRootLeaves.kt b/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/order/flat/FlatRootLeaves.kt new file mode 100644 index 0000000..5fa93cd --- /dev/null +++ b/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/order/flat/FlatRootLeaves.kt @@ -0,0 +1,49 @@ +package io.github.projectmapk.fixtures.order.flat + +// FlatRoot の別ファイル配置末端群(docs/test/ケース03-順序.md §2.1・ORD-01)。 +// K7 の配置値のうち「別ファイルトップレベル」と「無関係クラスネスト」を担い、 +// 基底と同一ファイルの配置値は FlatRoot.kt が担う。 +// 序数境界の役割は各宣言のコメントとケース03 §2.1 の導出表が持つ + +// --- 別ファイルトップレベル配置 × 文字境界 --- + +data object AB1 : FlatRoot + +data object Ab2 : FlatRoot + +// 'Z'(90) < 'a'(97) の直後域(小文字始まり × 大文字 2 文字目) +data object aB3 : FlatRoot + +// 全大文字名の後へ整列する小文字始まり +data object aLower : FlatRoot + +// 'L'(76) < 'b'(98) で aLower の後(小文字一色) +data object ab4 : FlatRoot + +data object Mmm : FlatRoot + +// 大文字域の末尾側 +data object Zzz : FlatRoot + +// --- 接頭辞対(短い方が先) --- + +// class 末端(自動生成 companion が kind): kind ClassId は Foo.Companion となるが、 +// '.'(46) < 'B'(66) により inheritors 順でも FooBar より先行が保たれる +class Foo : FlatRoot + +data object FooBar : FlatRoot + +// --- セパレータ対(ClassId 残部 Sep.Q の '.'(46) < Sep0 の '0'(48) でネスト側が先行する) --- + +// 無関係クラス内ネスト配置 +class Sep { + data object Q : FlatRoot +} + +data object Sep0 : FlatRoot + +// --- 無関係クラス内ネスト配置の末端 Bbb(ClassId 残部 = Box.Bbb) --- + +class Box { + data object Bbb : FlatRoot +} diff --git a/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/order/flat/Foo.kt b/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/order/flat/Foo.kt deleted file mode 100644 index 8852d3e..0000000 --- a/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/order/flat/Foo.kt +++ /dev/null @@ -1,6 +0,0 @@ -package io.github.projectmapk.fixtures.order.flat - -// 接頭辞対の短い側(docs/test/ケース03-順序.md ORD-01/ORD-06)。 -// class 末端(自動生成 companion が kind): kind ClassId は Foo.Companion となるが、 -// '.'(46) < 'B'(66) により inheritors 順でも FooBar より先行が保たれる -class Foo : FlatRoot diff --git a/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/order/flat/FooBar.kt b/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/order/flat/FooBar.kt deleted file mode 100644 index f37cf1a..0000000 --- a/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/order/flat/FooBar.kt +++ /dev/null @@ -1,4 +0,0 @@ -package io.github.projectmapk.fixtures.order.flat - -// 接頭辞対の長い側(docs/test/ケース03-順序.md ORD-01。接頭辞 Foo が先行 = 短い方が先) -data object FooBar : FlatRoot diff --git a/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/order/flat/Mmm.kt b/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/order/flat/Mmm.kt deleted file mode 100644 index 90d50ca..0000000 --- a/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/order/flat/Mmm.kt +++ /dev/null @@ -1,4 +0,0 @@ -package io.github.projectmapk.fixtures.order.flat - -// 別ファイルトップレベル配置の末端(docs/test/ケース03-順序.md ORD-01) -data object Mmm : FlatRoot diff --git a/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/order/flat/Sep.kt b/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/order/flat/Sep.kt deleted file mode 100644 index a83122f..0000000 --- a/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/order/flat/Sep.kt +++ /dev/null @@ -1,7 +0,0 @@ -package io.github.projectmapk.fixtures.order.flat - -// セパレータ対のネスト側(docs/test/ケース03-順序.md ORD-01。 -// ClassId 残部 Sep.Q の '.'(46) < Sep0 の '0'(48) でネスト側が先行する) -class Sep { - data object Q : FlatRoot -} diff --git a/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/order/flat/Sep0.kt b/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/order/flat/Sep0.kt deleted file mode 100644 index 0ad82e6..0000000 --- a/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/order/flat/Sep0.kt +++ /dev/null @@ -1,4 +0,0 @@ -package io.github.projectmapk.fixtures.order.flat - -// セパレータ対のトップレベル側(docs/test/ケース03-順序.md ORD-01) -data object Sep0 : FlatRoot diff --git a/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/order/flat/Zzz.kt b/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/order/flat/Zzz.kt deleted file mode 100644 index 94530d2..0000000 --- a/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/order/flat/Zzz.kt +++ /dev/null @@ -1,4 +0,0 @@ -package io.github.projectmapk.fixtures.order.flat - -// 別ファイルトップレベル配置の末端(docs/test/ケース03-順序.md ORD-01。大文字域の末尾側) -data object Zzz : FlatRoot diff --git a/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/order/flat/aB3.kt b/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/order/flat/aB3.kt deleted file mode 100644 index 0d59e46..0000000 --- a/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/order/flat/aB3.kt +++ /dev/null @@ -1,4 +0,0 @@ -package io.github.projectmapk.fixtures.order.flat - -// 小文字始まり × 大文字 2 文字目の境界末端(docs/test/ケース03-順序.md ORD-01。'Z'(90) < 'a'(97) の直後域) -data object aB3 : FlatRoot diff --git a/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/order/flat/aLower.kt b/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/order/flat/aLower.kt deleted file mode 100644 index 856fd70..0000000 --- a/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/order/flat/aLower.kt +++ /dev/null @@ -1,4 +0,0 @@ -package io.github.projectmapk.fixtures.order.flat - -// 小文字始まりの別ファイルトップレベル末端(docs/test/ケース03-順序.md ORD-01。全大文字名の後へ整列) -data object aLower : FlatRoot diff --git a/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/order/flat/ab4.kt b/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/order/flat/ab4.kt deleted file mode 100644 index 57f7594..0000000 --- a/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/order/flat/ab4.kt +++ /dev/null @@ -1,4 +0,0 @@ -package io.github.projectmapk.fixtures.order.flat - -// 小文字一色の境界末端(docs/test/ケース03-順序.md ORD-01。'L'(76) < 'b'(98) で aLower の後) -data object ab4 : FlatRoot diff --git a/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/order/mid/Aaa.kt b/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/order/mid/Aaa.kt deleted file mode 100644 index 2dfa157..0000000 --- a/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/order/mid/Aaa.kt +++ /dev/null @@ -1,4 +0,0 @@ -package io.github.projectmapk.fixtures.order.mid - -// 直接末端(in-place 展開位置の前側。docs/test/ケース03-順序.md ORD-03) -data object Aaa : MidRoot diff --git a/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/order/mid/Early.kt b/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/order/mid/Early.kt deleted file mode 100644 index 051070c..0000000 --- a/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/order/mid/Early.kt +++ /dev/null @@ -1,4 +0,0 @@ -package io.github.projectmapk.fixtures.order.mid - -// MidTop 配下のトップレベル末端(break の前側。docs/test/ケース03-順序.md ORD-03) -data object Early : MidTop diff --git a/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/order/mid/Late.kt b/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/order/mid/Late.kt deleted file mode 100644 index 6c5976b..0000000 --- a/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/order/mid/Late.kt +++ /dev/null @@ -1,4 +0,0 @@ -package io.github.projectmapk.fixtures.order.mid - -// MidTop 配下のトップレベル末端(break の後側。docs/test/ケース03-順序.md ORD-03) -data object Late : MidTop diff --git a/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/order/mid/MidMulti.kt b/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/order/mid/MidMulti.kt deleted file mode 100644 index 69d6459..0000000 --- a/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/order/mid/MidMulti.kt +++ /dev/null @@ -1,9 +0,0 @@ -package io.github.projectmapk.fixtures.order.mid - -// 多段中間(トップレベル中間 → ネスト中間 Deep。docs/test/ケース03-順序.md ORD-03)。 -// Deep 配下はネスト末端 Bottom とトップレベル末端 Wide(深部 break)で構成する -sealed interface MidMulti : MidRoot { - sealed interface Deep : MidMulti { - data object Bottom : Deep - } -} diff --git a/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/order/mid/MidNest.kt b/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/order/mid/MidNest.kt deleted file mode 100644 index 5df93b2..0000000 --- a/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/order/mid/MidNest.kt +++ /dev/null @@ -1,9 +0,0 @@ -package io.github.projectmapk.fixtures.order.mid - -// トップレベル中間 × ネスト末端(docs/test/ケース03-順序.md ORD-03。 -// 局所展開列 [NestA, NestB] が全末端 FQN 順とも一致する側) -sealed interface MidNest : MidRoot { - data object NestA : MidNest - - data object NestB : MidNest -} diff --git a/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/order/mid/MidRoot.kt b/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/order/mid/MidRoot.kt index 9b81499..7643889 100644 --- a/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/order/mid/MidRoot.kt +++ b/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/order/mid/MidRoot.kt @@ -2,7 +2,9 @@ package io.github.projectmapk.fixtures.order.mid import io.github.projectmapk.sealedClassEnumizer.Enumize -// 中間 sealed の DFS 入れ子展開フィクスチャ基底(docs/test/ケース03-順序.md §2.2・ORD-03/ORD-05/ORD-06)。 +// 中間 sealed の DFS 入れ子展開フィクスチャ(docs/test/ケース03-順序.md §2.2・ORD-03/ORD-05/ORD-06)。 +// 中間の配置(トップレベル / 基底ネスト)と末端の配置(中間ネスト / トップレベル)を組み合わせ、 +// 全末端 FQN 一括整列との break を作る。 // // 直接継承者の整列 = [Aaa, MidMulti, MidNest, MidRoot.MidIn, MidTop, Probe, Probe.Bb, Zzz] // 期待 entries(label 列。中間をその位置で深さ優先に入れ子展開): @@ -11,6 +13,52 @@ import io.github.projectmapk.sealedClassEnumizer.Enumize // [Aaa, Early, Late, Bottom, NestA, NestB, Outpost, Probe, Bb, Wide, Zzz] @Enumize sealed interface MidRoot { - // 基底ネスト配置の中間 sealed(配下の末端 Outpost はトップレベル配置。ORD-03) + // 基底ネスト配置の中間 sealed(配下の末端 Outpost はトップレベル配置) sealed interface MidIn : MidRoot } + +// --- 直接末端(in-place 展開位置の前後) --- + +data object Aaa : MidRoot + +data object Zzz : MidRoot + +// --- トップレベル中間 × ネスト末端(局所展開列 [NestA, NestB] が全末端 FQN 順とも一致する側) --- + +sealed interface MidNest : MidRoot { + data object NestA : MidNest + + data object NestB : MidNest +} + +// --- トップレベル中間 × トップレベル末端(配下の Early / Late は展開位置に留まり break を作る) --- + +sealed interface MidTop : MidRoot + +data object Early : MidTop + +data object Late : MidTop + +// --- 多段中間(トップレベル中間 → ネスト中間 Deep)。 +// Deep 配下はネスト末端 Bottom とトップレベル末端 Wide(深部 break)で構成する --- + +sealed interface MidMulti : MidRoot { + sealed interface Deep : MidMulti { + data object Bottom : Deep + } +} + +data object Wide : MidMulti.Deep + +// --- 基底ネスト中間 MidRoot.MidIn 配下のトップレベル末端(中間配置 = 基底ネスト値) --- + +data object Outpost : MidRoot.MidIn + +// --- inheritors 分岐プローブ(ORD-06): class 末端 Probe(自動生成 companion が kind)と、 +// その内側ネストの data object 末端 Bb。 +// kind ClassId 整列(inheritors 順)では Probe.Bb('B'=66) が Probe.Companion('C'=67) に先行する一方、 +// entries(末端 ClassId 由来)では Probe が Bb に先行し、相対順が分岐する --- + +class Probe : MidRoot { + data object Bb : MidRoot +} diff --git a/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/order/mid/MidTop.kt b/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/order/mid/MidTop.kt deleted file mode 100644 index e511d4c..0000000 --- a/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/order/mid/MidTop.kt +++ /dev/null @@ -1,5 +0,0 @@ -package io.github.projectmapk.fixtures.order.mid - -// トップレベル中間 × トップレベル末端(docs/test/ケース03-順序.md ORD-03。 -// 配下の Early / Late は展開位置に留まり、全末端 FQN 一括整列との break を作る) -sealed interface MidTop : MidRoot diff --git a/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/order/mid/Outpost.kt b/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/order/mid/Outpost.kt deleted file mode 100644 index d3ef38e..0000000 --- a/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/order/mid/Outpost.kt +++ /dev/null @@ -1,5 +0,0 @@ -package io.github.projectmapk.fixtures.order.mid - -// 基底ネスト中間 MidRoot.MidIn 配下のトップレベル末端(中間配置=基底ネスト値。 -// docs/test/ケース03-順序.md ORD-03) -data object Outpost : MidRoot.MidIn diff --git a/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/order/mid/Probe.kt b/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/order/mid/Probe.kt deleted file mode 100644 index 526a470..0000000 --- a/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/order/mid/Probe.kt +++ /dev/null @@ -1,9 +0,0 @@ -package io.github.projectmapk.fixtures.order.mid - -// class 末端 Probe(自動生成 companion が kind)と、その内側ネストの data object 末端 Bb -// (docs/test/ケース03-順序.md §2.2・ORD-06 の inheritors 分岐プローブ)。 -// kind ClassId 整列(inheritors 順)では Probe.Bb('B'=66) が Probe.Companion('C'=67) に先行する一方、 -// entries(末端 ClassId 由来)では Probe が Bb に先行し、相対順が分岐する -class Probe : MidRoot { - data object Bb : MidRoot -} diff --git a/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/order/mid/Wide.kt b/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/order/mid/Wide.kt deleted file mode 100644 index c68c619..0000000 --- a/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/order/mid/Wide.kt +++ /dev/null @@ -1,4 +0,0 @@ -package io.github.projectmapk.fixtures.order.mid - -// 多段中間 Deep 配下のトップレベル末端(深部 break。docs/test/ケース03-順序.md ORD-03) -data object Wide : MidMulti.Deep diff --git a/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/order/mid/Zzz.kt b/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/order/mid/Zzz.kt deleted file mode 100644 index 1adcc89..0000000 --- a/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/order/mid/Zzz.kt +++ /dev/null @@ -1,4 +0,0 @@ -package io.github.projectmapk.fixtures.order.mid - -// 直接末端(in-place 展開位置の後側。docs/test/ケース03-順序.md ORD-03) -data object Zzz : MidRoot diff --git a/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/reentry/InitProbe.kt b/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/reentry/InitProbe.kt deleted file mode 100644 index fc73459..0000000 --- a/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/reentry/InitProbe.kt +++ /dev/null @@ -1,7 +0,0 @@ -package io.github.projectmapk.fixtures.reentry - -// 遅延初期化の順序センサ(docs/test/ケース01-生成と実行時API.md API-44)。 -// kind の初期化が走ったことを記録する -object InitProbe { - val events: MutableList = mutableListOf() -} diff --git a/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/reentry/LazyRoot.kt b/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/reentry/LazyRoot.kt index f3d7ad7..5b6b767 100644 --- a/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/reentry/LazyRoot.kt +++ b/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/reentry/LazyRoot.kt @@ -12,3 +12,8 @@ sealed interface LazyRoot { } } } + +// 遅延初期化の順序センサ。kind の初期化が走ったことを記録する +object InitProbe { + val events: MutableList = mutableListOf() +} diff --git a/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/scope/target/Base.kt b/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/scope/target/Base.kt deleted file mode 100644 index 16fb994..0000000 --- a/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/scope/target/Base.kt +++ /dev/null @@ -1,5 +0,0 @@ -package io.github.projectmapk.fixtures.scope.target - -// 囮のトップレベル非 sealed interface(docs/test/ケース01-生成と実行時API.md API-51)。 -// @Enumize ではなく、raw 表記 "Base" の解決先競合を作るためだけに存在する -interface Base diff --git a/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/scope/target/Holder.kt b/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/scope/target/Holder.kt index 4b3ed56..f37d6d6 100644 --- a/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/scope/target/Holder.kt +++ b/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/scope/target/Holder.kt @@ -2,8 +2,13 @@ package io.github.projectmapk.fixtures.scope.target import io.github.projectmapk.sealedClassEnumizer.Enumize -// raw 追跡スコープ順の真基底(docs/test/ケース01-生成と実行時API.md API-51)。 -// object Holder 内ネストの @Enumize 基底であり、単純名 "Base" が同一 pkg のトップレベル囮(Base.kt)と競合する +// raw 追跡スコープ順フィクスチャの真基底と囮(docs/test/ケース01-生成と実行時API.md API-51)。 +// 単純名 "Base" が object Holder 内ネストの @Enumize 基底と同一 pkg のトップレベル囮の双方へ解決しうる状態を作る。 +// 競合 3 形は末端側のファイルが担い、各ファイルの import 集合がそのまま解決文脈となるため +// ViaImport.kt / ViaStar.kt / ShellHost.kt は分割を保つ object Holder { @Enumize sealed interface Base } + +// 囮のトップレベル非 sealed interface。@Enumize ではなく、raw 表記 "Base" の解決先競合を作るためだけに存在する +interface Base diff --git a/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/vis/narrow/AutoWide.kt b/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/vis/narrow/AutoWide.kt deleted file mode 100644 index ce311be..0000000 --- a/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/vis/narrow/AutoWide.kt +++ /dev/null @@ -1,5 +0,0 @@ -package io.github.projectmapk.fixtures.vis.narrow - -// 基底(internal)より広い public 末端・companion 明示なし(docs/test/ケース02-可視性.md VIS-11: -// 自動生成 companion は宣言 public・実効可視性が末端へ追随し常に規則 1。露出診断も規則 3 も発火しない) -class AutoWide(val v: Int) : NarrowBase diff --git a/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/vis/narrow/NarrowBase.kt b/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/vis/narrow/NarrowBase.kt index e56594c..b8b7084 100644 --- a/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/vis/narrow/NarrowBase.kt +++ b/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/vis/narrow/NarrowBase.kt @@ -2,10 +2,10 @@ package io.github.projectmapk.fixtures.vis.narrow import io.github.projectmapk.sealedClassEnumizer.Enumize -// internal 基底(docs/test/ケース02-可視性.md VIS-02/VIS-06/VIS-19。 -// module 内では全 API が通常どおり使える = 基底の可視性は制限ではない) +// internal 基底の可視性フィクスチャ(docs/test/ケース02-可視性.md VIS-02/VIS-06/VIS-10/VIS-11/VIS-19)。 +// module 内では全 API が通常どおり使える(= 基底の可視性は制限ではない)。 // -// NG 固定(docs/test/ケース02-可視性.md VIS-19): E-2(基底より広い末端)が成立するのは class 系末端のみ。 +// NG 固定(VIS-19): E-2(基底より広い末端)が成立するのは class 系末端のみ。 // 露出検査は interface の継承(extends 形)に働くため、internal 基底より広い public interface 末端は // 言語上構成できない(実測: e: 'public' sub-interface exposes its 'internal' supertype 'NarrowBase'): // @@ -18,3 +18,20 @@ internal sealed interface NarrowBase { internal companion object } } + +// internal 末端 × internal companion(VIS-10 = 規則 1 境界: +// eff(C) = eff(L) = internal の実効同値で規則 2 は発火せず具体型 NarrowLeaf.Companion のまま) +internal class NarrowLeaf(val v: Int) : NarrowBase { + internal companion object +} + +// 基底(internal)より広い public 末端・companion 明示なし(VIS-11: +// 自動生成 companion は宣言 public・実効可視性が末端へ追随し常に規則 1。露出診断も規則 3 も発火しない) +class AutoWide(val v: Int) : NarrowBase + +// 基底(internal)より広い public 末端 × 明示 public companion(VIS-19 = E-2 生成側。 +// sealed interface 階層では言語上成立し(診断なし=コンパイル成功が兼ねる)、 +// 階層 API(entries / valueOf)は internal・値/kind API(asEnumish / label)は public という分離が生じる) +class PublicLeaf(val v: Int) : NarrowBase { + companion object +} diff --git a/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/vis/narrow/NarrowLeaf.kt b/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/vis/narrow/NarrowLeaf.kt deleted file mode 100644 index 649a579..0000000 --- a/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/vis/narrow/NarrowLeaf.kt +++ /dev/null @@ -1,7 +0,0 @@ -package io.github.projectmapk.fixtures.vis.narrow - -// internal 末端 × internal companion(docs/test/ケース02-可視性.md VIS-10 = 規則 1 境界: -// eff(C) = eff(L) = internal の実効同値で規則 2 は発火せず具体型 NarrowLeaf.Companion のまま) -internal class NarrowLeaf(val v: Int) : NarrowBase { - internal companion object -} diff --git a/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/vis/narrow/PublicLeaf.kt b/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/vis/narrow/PublicLeaf.kt deleted file mode 100644 index b48b42f..0000000 --- a/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/vis/narrow/PublicLeaf.kt +++ /dev/null @@ -1,8 +0,0 @@ -package io.github.projectmapk.fixtures.vis.narrow - -// 基底(internal)より広い public 末端 × 明示 public companion(docs/test/ケース02-可視性.md VIS-19 = -// E-2 生成側。sealed interface 階層では言語上成立し(診断なし=コンパイル成功が兼ねる)、 -// 階層 API(entries / valueOf)は internal・値/kind API(asEnumish / label)は public という分離が生じる) -class PublicLeaf(val v: Int) : NarrowBase { - companion object -} diff --git a/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/vis/priv/PrivBase.kt b/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/vis/priv/PrivBase.kt index 6ca72f7..37e0f7e 100644 --- a/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/vis/priv/PrivBase.kt +++ b/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/vis/priv/PrivBase.kt @@ -4,8 +4,7 @@ import io.github.projectmapk.sealedClassEnumizer.Enumize import io.github.projectmapk.sealedClassEnumizer.label // private 基底の同一ファイル完結フィクスチャ(docs/test/ケース02-可視性.md VIS-01/VIS-10/VIS-20/VIS-22)。 -// private トップレベル基底はファイル内でのみ可視のため、末端・観測関数とも同一ファイル配置が言語上の -// 要請であり、1 ファイル 1 クラス規約の適用外とする。 +// private トップレベル基底はファイル内でのみ可視のため、末端・観測関数とも同一ファイル配置が言語上の要請となる。 @Enumize private sealed interface PrivBase { data object Hidden : PrivBase diff --git a/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/vis/pub/CmdFall.kt b/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/vis/pub/CmdFall.kt deleted file mode 100644 index cc7622c..0000000 --- a/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/vis/pub/CmdFall.kt +++ /dev/null @@ -1,10 +0,0 @@ -package io.github.projectmapk.fixtures.vis.pub - -// public enum class 末端 × internal companion(docs/test/ケース02-可視性.md VIS-14 = 規則 2 × 種別。 -// enum 全体で 1 kind・name と label の分離は維持される) -enum class CmdFall : VisRoot { - GO, - STOP; - - internal companion object -} diff --git a/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/vis/pub/FarInternal.kt b/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/vis/pub/FarInternal.kt deleted file mode 100644 index 6d80573..0000000 --- a/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/vis/pub/FarInternal.kt +++ /dev/null @@ -1,5 +0,0 @@ -package io.github.projectmapk.fixtures.vis.pub - -// 別ファイルの internal トップレベル末端(docs/test/ケース02-可視性.md VIS-16 の壁なし対照: -// internal は module 内可視のため基底スコープから直接参照できアクセサ不要) -internal class FarInternal(val v: Int) : VisRoot diff --git a/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/vis/pub/FarSecret.kt b/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/vis/pub/FarSecret.kt deleted file mode 100644 index 56a8f52..0000000 --- a/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/vis/pub/FarSecret.kt +++ /dev/null @@ -1,5 +0,0 @@ -package io.github.projectmapk.fixtures.vis.pub - -// 別ファイルの private トップレベル末端(docs/test/ケース02-可視性.md VIS-18 = トップレベル壁: -// 基底スコープから名前参照できず、壁と同一ファイルのトップレベル internal アクセサ関数経由で掲載される) -private class FarSecret(val v: Int) : VisRoot diff --git a/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/vis/pub/Forged.kt b/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/vis/pub/Forged.kt deleted file mode 100644 index 3b6c256..0000000 --- a/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/vis/pub/Forged.kt +++ /dev/null @@ -1,7 +0,0 @@ -package io.github.projectmapk.fixtures.vis.pub - -// public 末端 × internal 名前つき companion(docs/test/ケース02-可視性.md VIS-13 = 規則 2。 -// label は companion 名でなく末端単純名 "Forged" のまま不変) -class Forged(val v: Int) : VisRoot { - internal companion object Factory -} diff --git a/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/vis/pub/Half.kt b/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/vis/pub/Half.kt deleted file mode 100644 index fffc080..0000000 --- a/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/vis/pub/Half.kt +++ /dev/null @@ -1,7 +0,0 @@ -package io.github.projectmapk.fixtures.vis.pub - -// public 末端 × internal 既定名 companion(docs/test/ケース02-可視性.md VIS-12 = 規則 2: -// eff(C)=internal < eff(L)=public で asEnumish の返り値型は VisRoot.Enumish へフォールバック) -class Half(val v: Int) : VisRoot { - internal companion object -} diff --git a/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/vis/pub/HiddenHost.kt b/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/vis/pub/HiddenHost.kt deleted file mode 100644 index 680abb6..0000000 --- a/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/vis/pub/HiddenHost.kt +++ /dev/null @@ -1,7 +0,0 @@ -package io.github.projectmapk.fixtures.vis.pub - -// private 外側クラス内の末端(docs/test/ケース02-可視性.md VIS-18 = トップレベル壁: -// 外側チェーンにより基底スコープから名前参照できない配置でもアクセサ経由で entries に載る) -private class HiddenHost { - object HostedLeaf : VisRoot -} diff --git a/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/vis/pub/HiddenMid.kt b/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/vis/pub/HiddenMid.kt deleted file mode 100644 index 019d37a..0000000 --- a/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/vis/pub/HiddenMid.kt +++ /dev/null @@ -1,5 +0,0 @@ -package io.github.projectmapk.fixtures.vis.pub - -// internal な中間 sealed(docs/test/ケース02-可視性.md VIS-21。 -// 中間には何も生成されず、その可視性は生成・掲載・末端 kind 解決に影響しない) -internal sealed interface HiddenMid : VisRoot diff --git a/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/vis/pub/MA.kt b/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/vis/pub/MA.kt deleted file mode 100644 index 1c00290..0000000 --- a/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/vis/pub/MA.kt +++ /dev/null @@ -1,6 +0,0 @@ -package io.github.projectmapk.fixtures.vis.pub - -// internal 中間 HiddenMid 経由の public data object 末端(docs/test/ケース02-可視性.md VIS-21。 -// 露出検査は interface 実装に働かないため、internal 中間より広い public 末端が言語上成立する -// = docs/エッジケースへの対応方針.md §1.1 #2 の成立形) -data object MA : HiddenMid diff --git a/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/vis/pub/PrivComp.kt b/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/vis/pub/PrivComp.kt deleted file mode 100644 index 1994475..0000000 --- a/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/vis/pub/PrivComp.kt +++ /dev/null @@ -1,7 +0,0 @@ -package io.github.projectmapk.fixtures.vis.pub - -// トップレベル末端 × private companion(docs/test/ケース02-可視性.md VIS-17 = ネスト壁: -// kind は末端クラス内の IR-only アクセサ経由で掲載され、asEnumish の返り値型は規則 2) -class PrivComp(val v: Int) : VisRoot { - private companion object -} diff --git a/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/vis/pub/ProtComp.kt b/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/vis/pub/ProtComp.kt deleted file mode 100644 index 8e83805..0000000 --- a/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/vis/pub/ProtComp.kt +++ /dev/null @@ -1,8 +0,0 @@ -package io.github.projectmapk.fixtures.vis.pub - -// トップレベル末端 × protected companion(docs/test/ケース02-可視性.md VIS-17 = ネスト壁。 -// protected companion は class 内でのみ言語上構成できる。非 final 末端 × private companion の -// 組はケース05 の mpp kindaccessor が担う) -class ProtComp(val v: Int) : VisRoot { - protected companion object -} diff --git a/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/vis/pub/ValFall.kt b/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/vis/pub/ValFall.kt deleted file mode 100644 index ea8d282..0000000 --- a/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/vis/pub/ValFall.kt +++ /dev/null @@ -1,8 +0,0 @@ -package io.github.projectmapk.fixtures.vis.pub - -// public value class 末端 × internal companion(docs/test/ケース02-可視性.md VIS-14 = 規則 2 × 種別。 -// boxing を跨いでも kind は同一のまま) -@JvmInline -value class ValFall(val x: Int) : VisRoot { - internal companion object -} diff --git a/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/vis/pub/VisRoot.kt b/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/vis/pub/VisRoot.kt index 9218dd1..7acd3a2 100644 --- a/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/vis/pub/VisRoot.kt +++ b/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/vis/pub/VisRoot.kt @@ -3,8 +3,9 @@ package io.github.projectmapk.fixtures.vis.pub import io.github.projectmapk.sealedClassEnumizer.Enumize // 可視性合成階層の基底(docs/test/ケース02-可視性.md §2〜§4・§6・docs/test/ケース03-順序.md ORD-10)。 -// 本ファイルは同一ファイル配置がケースの要請となる宣言(同一ファイル private トップレベル末端・ -// private トップレベル中間とその末端)を同居させるため、1 ファイル 1 クラス規約の適用外とする。 +// 本ファイルは基底から名前参照できる末端(= IR-only アクセサ不要)と、ネスト壁を作る companion を担う。 +// 基底のファイル外へ置くこと自体が要請となる末端(別ファイル internal = 壁なし対照・ +// 別ファイル private トップレベル = トップレベル壁)は VisRootFarLeaves.kt が担う。 // // 期待 entries(label 列。FQN UTF-16 序数・ケース03 §1 の規則から導出): // [AutoLeaf, ClsLeaf, CmdFall, EnLeaf, FarInternal, FarSecret, Forged, Half, HostedLeaf, MA, @@ -45,21 +46,71 @@ internal class ClsLeaf(val v: Int) : VisRoot { internal class AutoLeaf(val v: Int) : VisRoot -// --- 同一ファイルの private トップレベル末端(壁なし対照。VIS-16) --- +// --- 規則 2(eff(C) < eff(L) で asEnumish の返り値型が VisRoot.Enumish へフォールバック) --- -private class NearSecret(val v: Int) : VisRoot +// public 末端 × internal 既定名 companion(VIS-12) +class Half(val v: Int) : VisRoot { + internal companion object +} -// --- private トップレベル中間とその末端(VIS-21: 中間は生成コードの参照対象外=アクセサ不要でビルド成立。 -// private トップレベルはファイル内可視のため中間と末端は本ファイル配置が言語上の要請) --- +// public 末端 × internal 名前つき companion(VIS-13。label は companion 名でなく末端単純名 "Forged" のまま不変) +class Forged(val v: Int) : VisRoot { + internal companion object Factory +} -private sealed interface PMid : VisRoot +// public value class 末端 × internal companion(VIS-14 = 規則 2 × 種別。boxing を跨いでも kind は同一のまま) +@JvmInline +value class ValFall(val x: Int) : VisRoot { + internal companion object +} -private data object PLeaf : PMid +// public enum class 末端 × internal companion(VIS-14 = 規則 2 × 種別。 +// enum 全体で 1 kind・name と label の分離は維持される) +enum class CmdFall : VisRoot { + GO, + STOP; + + internal companion object +} -// NG 固定(docs/test/ケース02-可視性.md VIS-15): interface / fun interface 末端の internal companion は +// NG 固定(VIS-15): interface / fun interface 末端の internal companion は // 言語上構成できない(e: Modifier 'internal' is not applicable inside 'interface'): // // interface IfNg : VisRoot { internal companion object } // fun interface FnNg : VisRoot { fun run(x: Int): Int; internal companion object } // // 対照(public companion の default asEnumish)はケース01 の zoo が担う + +// --- ネスト壁(VIS-17): 壁の親クラス内 `$EnumizeKindAccessor` 経由で掲載され、返り値型は規則 2 --- + +// トップレベル末端 × private companion +class PrivComp(val v: Int) : VisRoot { + private companion object +} + +// トップレベル末端 × protected companion(protected companion は class 内でのみ言語上構成できる。 +// 非 final 末端 × private companion の組はケース05 の mpp kindaccessor が担う) +class ProtComp(val v: Int) : VisRoot { + protected companion object +} + +// --- 同一ファイルの private トップレベル末端(壁なし対照。VIS-16) --- + +private class NearSecret(val v: Int) : VisRoot + +// --- 中間の可視性(VIS-21。中間には何も生成されず、その可視性は生成・掲載・末端 kind 解決に影響しない) --- + +// internal な中間 sealed +internal sealed interface HiddenMid : VisRoot + +// internal 中間経由の public data object 末端。 +// 露出検査は interface 実装に働かないため、internal 中間より広い public 末端が言語上成立する +// = docs/エッジケースへの対応方針.md §1.1 #2 の成立形 +data object MA : HiddenMid + +// private トップレベル中間とその末端(中間は生成コードの参照対象外=アクセサ不要でビルド成立。 +// private トップレベルはファイル内可視のため中間と末端は同一ファイル配置が言語上の要請) + +private sealed interface PMid : VisRoot + +private data object PLeaf : PMid diff --git a/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/vis/pub/VisRootFarLeaves.kt b/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/vis/pub/VisRootFarLeaves.kt new file mode 100644 index 0000000..fad5603 --- /dev/null +++ b/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/vis/pub/VisRootFarLeaves.kt @@ -0,0 +1,21 @@ +package io.github.projectmapk.fixtures.vis.pub + +// 基底のファイル外配置が要請となる VisRoot 末端群(docs/test/ケース02-可視性.md VIS-16/VIS-18)。 +// private は宣言ファイル内でのみ可視であり、本ファイルに置くこと自体が壁の成立条件である +// (基底と同一ファイルへ移すと壁が消え、VIS-18 のトップレベルアクセサ経路が観測できなくなる)。 +// 生成されるトップレベルアクセサは kind の外側クラス連鎖を名前へ含むため、1 ファイルに複数の壁が +// 同居しても衝突しない + +// 別ファイルの internal トップレベル末端(VIS-16 の壁なし対照: +// internal は module 内可視のため基底スコープから直接参照できアクセサ不要) +internal class FarInternal(val v: Int) : VisRoot + +// 別ファイルの private トップレベル末端(VIS-18 = トップレベル壁: +// 基底スコープから名前参照できず、壁と同一ファイルのトップレベル internal アクセサ関数経由で掲載される) +private class FarSecret(val v: Int) : VisRoot + +// private 外側クラス内の末端(VIS-18 = トップレベル壁: +// 外側チェーンにより基底スコープから名前参照できない配置でもアクセサ経由で entries に載る) +private class HiddenHost { + object HostedLeaf : VisRoot +} diff --git a/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/zoo/Crafted.kt b/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/zoo/Crafted.kt deleted file mode 100644 index 2b06b4b..0000000 --- a/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/zoo/Crafted.kt +++ /dev/null @@ -1,5 +0,0 @@ -package io.github.projectmapk.fixtures.zoo - -// interface 末端の第三者実装(docs/test/ケース01-生成と実行時API.md API-13)。 -// default 実装の asEnumish(JVM lowering 込み)を継承し IfaceLeaf の kind へ吸収される -class Crafted : Zoo.IfaceLeaf diff --git a/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/zoo/Oval.kt b/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/zoo/Oval.kt deleted file mode 100644 index 0d3da52..0000000 --- a/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/zoo/Oval.kt +++ /dev/null @@ -1,5 +0,0 @@ -package io.github.projectmapk.fixtures.zoo - -// open 末端の直下サブタイプ(docs/test/ケース01-生成と実行時API.md API-13)。 -// kind を新設せず OpenLeaf の kind へ吸収される -class Oval : Zoo.OpenLeaf() diff --git a/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/zoo/Quad.kt b/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/zoo/Quad.kt deleted file mode 100644 index 126adeb..0000000 --- a/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/zoo/Quad.kt +++ /dev/null @@ -1,4 +0,0 @@ -package io.github.projectmapk.fixtures.zoo - -// 多段吸収の中継サブタイプ(docs/test/ケース01-生成と実行時API.md API-13。末端は Square.kt) -open class Quad : Zoo.OpenLeaf() diff --git a/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/zoo/Spot.kt b/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/zoo/Spot.kt deleted file mode 100644 index 4dbb427..0000000 --- a/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/zoo/Spot.kt +++ /dev/null @@ -1,5 +0,0 @@ -package io.github.projectmapk.fixtures.zoo - -// 末端サブタイプの object(docs/test/ケース01-生成と実行時API.md API-13)。 -// object であっても自 kind を作らず OpenLeaf の kind へ吸収される -object Spot : Zoo.OpenLeaf() diff --git a/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/zoo/Square.kt b/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/zoo/Square.kt deleted file mode 100644 index 496eff8..0000000 --- a/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/zoo/Square.kt +++ /dev/null @@ -1,5 +0,0 @@ -package io.github.projectmapk.fixtures.zoo - -// 多段サブタイプ(docs/test/ケース01-生成と実行時API.md API-13/API-14)。 -// OpenLeaf ← Quad ← Square の 2 段でも最上位末端 OpenLeaf の kind へ吸収される -class Square : Quad() diff --git a/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/zoo/Veil.kt b/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/zoo/Veil.kt deleted file mode 100644 index 98b2c33..0000000 --- a/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/zoo/Veil.kt +++ /dev/null @@ -1,6 +0,0 @@ -package io.github.projectmapk.fixtures.zoo - -// 末端 interface への委譲実装(docs/test/ケース01-生成と実行時API.md API-13)。 -// kind を新設せず、委譲された asEnumish が IfaceLeaf の kind を返す。 -// 基底 Zoo への直接委譲は診断対象(docs/test/ケース04-診断.md DIA-69)であり、ここでは末端への委譲のみ扱う -class Veil(impl: Zoo.IfaceLeaf) : Zoo.IfaceLeaf by impl diff --git a/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/zoo/Zoo.kt b/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/zoo/Zoo.kt index 2598123..5b91dd8 100644 --- a/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/zoo/Zoo.kt +++ b/integration-test/producer-jvm/src/main/kotlin/io/github/projectmapk/fixtures/zoo/Zoo.kt @@ -6,8 +6,7 @@ import io.github.projectmapk.sealedClassEnumizer.Enumize // docs/test/ケース03-順序.md ORD-04)。 // object 系は自身が kind、class / interface / enum / value class 系は companion が kind。 // IfaceLeaf / FunLeaf は明示 public companion、それ以外は自動生成 companion。 -// 吸収サブタイプは Oval.kt / Quad.kt / Square.kt / Spot.kt / Crafted.kt / Veil.kt と -// テスト内(無名 object・local class)に分散する +// 吸収サブタイプは本ファイル末尾のトップレベル群とテスト内(無名 object・local class)に分散する @Enumize sealed interface Zoo { data class DataLeaf(val v: Int) : Zoo @@ -48,3 +47,25 @@ sealed interface Zoo { @JvmInline value class ValueLeaf(val x: Int) : Zoo } + +// --- 吸収サブタイプ(docs/test/ケース01-生成と実行時API.md API-13/API-14)。 +// いずれも自 kind を作らず、最上位末端の kind へ吸収される --- + +// open 末端の直下サブタイプ +class Oval : Zoo.OpenLeaf() + +// 多段吸収の中継サブタイプ(末端は Square) +open class Quad : Zoo.OpenLeaf() + +// 多段サブタイプ(OpenLeaf ← Quad ← Square の 2 段でも最上位末端 OpenLeaf の kind へ吸収される。API-14) +class Square : Quad() + +// object であっても自 kind を作らない +object Spot : Zoo.OpenLeaf() + +// interface 末端の第三者実装(default 実装の asEnumish を JVM lowering 込みで継承する) +class Crafted : Zoo.IfaceLeaf + +// 末端 interface への委譲実装(委譲された asEnumish が IfaceLeaf の kind を返す)。 +// 基底 Zoo への直接委譲は診断対象(docs/test/ケース04-診断.md DIA-69)であり、ここでは末端への委譲のみ扱う +class Veil(impl: Zoo.IfaceLeaf) : Zoo.IfaceLeaf by impl From 5c394174941ba3271bf7413d6cbbb15e98e05934 Mon Sep 17 00:00:00 2001 From: wrongwrong Date: Sun, 2 Aug 2026 00:51:16 +0900 Subject: [PATCH 3/9] =?UTF-8?q?test:=20mpp-producer=20=E3=81=AE=E3=83=95?= =?UTF-8?q?=E3=82=A3=E3=82=AF=E3=82=B9=E3=83=81=E3=83=A3=E3=82=92=E9=9A=8E?= =?UTF-8?q?=E5=B1=A4=E5=8D=98=E4=BD=8D=E3=81=AE=E3=83=95=E3=82=A1=E3=82=A4?= =?UTF-8?q?=E3=83=AB=E3=81=B8=E5=86=8D=E7=B7=A8=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit kindaccessor / order / tostring / wider を基底名のファイルへ集約する (34 -> 20 ファイル)。 参照不能 kind のうちトップレベル壁を作る 2 形(private トップレベル末端・ private 外側クラスの末端)は基底と別ファイルであることが壁の成立条件のため、 KaWalledLeaves へ分離して理由を明記する。 Co-Authored-By: Claude Opus 5 --- .../mpp/fixtures/kindaccessor/KaHiddenHost.kt | 6 ----- .../mpp/fixtures/kindaccessor/KaIface.kt | 7 ------ .../mpp/fixtures/kindaccessor/KaPrivComp.kt | 6 ----- .../mpp/fixtures/kindaccessor/KaPrivTop.kt | 4 ---- .../mpp/fixtures/kindaccessor/KaProtComp.kt | 6 ----- .../mpp/fixtures/kindaccessor/KaRoot.kt | 21 ++++++++++++++++- .../fixtures/kindaccessor/KaWalledLeaves.kt | 14 +++++++++++ .../projectmapk/mpp/fixtures/order/Aaa.kt | 5 ---- .../projectmapk/mpp/fixtures/order/Bbb.kt | 4 ---- .../projectmapk/mpp/fixtures/order/Box.kt | 7 ------ .../mpp/fixtures/order/BreakMid.kt | 4 ---- .../mpp/fixtures/order/BreakRoot.kt | 9 ++++++++ .../mpp/fixtures/order/FqnOrder.kt | 23 ++++++++++++++++++- .../projectmapk/mpp/fixtures/order/Mmm.kt | 4 ---- .../projectmapk/mpp/fixtures/order/S.kt | 7 ------ .../projectmapk/mpp/fixtures/order/Zzz.kt | 5 ---- .../projectmapk/mpp/fixtures/order/aLower.kt | 5 ---- .../projectmapk/mpp/fixtures/tostring/Loud.kt | 7 ------ .../projectmapk/mpp/fixtures/tostring/Show.kt | 5 ++++ .../projectmapk/mpp/fixtures/wider/Wide.kt | 8 ------- .../mpp/fixtures/wider/WideBase.kt | 8 ++++++- 21 files changed, 77 insertions(+), 88 deletions(-) delete mode 100644 integration-test/mpp-producer/src/commonMain/kotlin/io/github/projectmapk/mpp/fixtures/kindaccessor/KaHiddenHost.kt delete mode 100644 integration-test/mpp-producer/src/commonMain/kotlin/io/github/projectmapk/mpp/fixtures/kindaccessor/KaIface.kt delete mode 100644 integration-test/mpp-producer/src/commonMain/kotlin/io/github/projectmapk/mpp/fixtures/kindaccessor/KaPrivComp.kt delete mode 100644 integration-test/mpp-producer/src/commonMain/kotlin/io/github/projectmapk/mpp/fixtures/kindaccessor/KaPrivTop.kt delete mode 100644 integration-test/mpp-producer/src/commonMain/kotlin/io/github/projectmapk/mpp/fixtures/kindaccessor/KaProtComp.kt create mode 100644 integration-test/mpp-producer/src/commonMain/kotlin/io/github/projectmapk/mpp/fixtures/kindaccessor/KaWalledLeaves.kt delete mode 100644 integration-test/mpp-producer/src/commonMain/kotlin/io/github/projectmapk/mpp/fixtures/order/Aaa.kt delete mode 100644 integration-test/mpp-producer/src/commonMain/kotlin/io/github/projectmapk/mpp/fixtures/order/Bbb.kt delete mode 100644 integration-test/mpp-producer/src/commonMain/kotlin/io/github/projectmapk/mpp/fixtures/order/Box.kt delete mode 100644 integration-test/mpp-producer/src/commonMain/kotlin/io/github/projectmapk/mpp/fixtures/order/BreakMid.kt delete mode 100644 integration-test/mpp-producer/src/commonMain/kotlin/io/github/projectmapk/mpp/fixtures/order/Mmm.kt delete mode 100644 integration-test/mpp-producer/src/commonMain/kotlin/io/github/projectmapk/mpp/fixtures/order/S.kt delete mode 100644 integration-test/mpp-producer/src/commonMain/kotlin/io/github/projectmapk/mpp/fixtures/order/Zzz.kt delete mode 100644 integration-test/mpp-producer/src/commonMain/kotlin/io/github/projectmapk/mpp/fixtures/order/aLower.kt delete mode 100644 integration-test/mpp-producer/src/commonMain/kotlin/io/github/projectmapk/mpp/fixtures/tostring/Loud.kt delete mode 100644 integration-test/mpp-producer/src/commonMain/kotlin/io/github/projectmapk/mpp/fixtures/wider/Wide.kt diff --git a/integration-test/mpp-producer/src/commonMain/kotlin/io/github/projectmapk/mpp/fixtures/kindaccessor/KaHiddenHost.kt b/integration-test/mpp-producer/src/commonMain/kotlin/io/github/projectmapk/mpp/fixtures/kindaccessor/KaHiddenHost.kt deleted file mode 100644 index 8200715..0000000 --- a/integration-test/mpp-producer/src/commonMain/kotlin/io/github/projectmapk/mpp/fixtures/kindaccessor/KaHiddenHost.kt +++ /dev/null @@ -1,6 +0,0 @@ -package io.github.projectmapk.mpp.fixtures.kindaccessor - -// private 外側クラスにネストした参照不能末端 → 末端ファイルのトップレベル IR-only アクセサ経由で load -private class KaHiddenHost { - object Leaf : KaRoot -} diff --git a/integration-test/mpp-producer/src/commonMain/kotlin/io/github/projectmapk/mpp/fixtures/kindaccessor/KaIface.kt b/integration-test/mpp-producer/src/commonMain/kotlin/io/github/projectmapk/mpp/fixtures/kindaccessor/KaIface.kt deleted file mode 100644 index 80ffde4..0000000 --- a/integration-test/mpp-producer/src/commonMain/kotlin/io/github/projectmapk/mpp/fixtures/kindaccessor/KaIface.kt +++ /dev/null @@ -1,7 +0,0 @@ -package io.github.projectmapk.mpp.fixtures.kindaccessor - -// interface 末端の private companion(kind)→ 末端 interface 内にネストした IR-only アクセサ経由で load -// (interface メンバーは public / private のみ。nested object から private companion を intra-scope 参照する) -interface KaIface : KaRoot { - private companion object -} diff --git a/integration-test/mpp-producer/src/commonMain/kotlin/io/github/projectmapk/mpp/fixtures/kindaccessor/KaPrivComp.kt b/integration-test/mpp-producer/src/commonMain/kotlin/io/github/projectmapk/mpp/fixtures/kindaccessor/KaPrivComp.kt deleted file mode 100644 index 29df6f3..0000000 --- a/integration-test/mpp-producer/src/commonMain/kotlin/io/github/projectmapk/mpp/fixtures/kindaccessor/KaPrivComp.kt +++ /dev/null @@ -1,6 +0,0 @@ -package io.github.projectmapk.mpp.fixtures.kindaccessor - -// private companion(kind)→ 末端クラス内にネストした IR-only アクセサ経由で load -class KaPrivComp(val v: Int) : KaRoot { - private companion object -} diff --git a/integration-test/mpp-producer/src/commonMain/kotlin/io/github/projectmapk/mpp/fixtures/kindaccessor/KaPrivTop.kt b/integration-test/mpp-producer/src/commonMain/kotlin/io/github/projectmapk/mpp/fixtures/kindaccessor/KaPrivTop.kt deleted file mode 100644 index 5f7ac43..0000000 --- a/integration-test/mpp-producer/src/commonMain/kotlin/io/github/projectmapk/mpp/fixtures/kindaccessor/KaPrivTop.kt +++ /dev/null @@ -1,4 +0,0 @@ -package io.github.projectmapk.mpp.fixtures.kindaccessor - -// 別ファイルの private トップレベル末端 → 末端ファイルのトップレベル IR-only アクセサ経由で load -private object KaPrivTop : KaRoot diff --git a/integration-test/mpp-producer/src/commonMain/kotlin/io/github/projectmapk/mpp/fixtures/kindaccessor/KaProtComp.kt b/integration-test/mpp-producer/src/commonMain/kotlin/io/github/projectmapk/mpp/fixtures/kindaccessor/KaProtComp.kt deleted file mode 100644 index a7917da..0000000 --- a/integration-test/mpp-producer/src/commonMain/kotlin/io/github/projectmapk/mpp/fixtures/kindaccessor/KaProtComp.kt +++ /dev/null @@ -1,6 +0,0 @@ -package io.github.projectmapk.mpp.fixtures.kindaccessor - -// protected な既存 companion(kind)→ 末端クラス内にネストした IR-only アクセサ経由で load -abstract class KaProtComp : KaRoot { - protected companion object -} diff --git a/integration-test/mpp-producer/src/commonMain/kotlin/io/github/projectmapk/mpp/fixtures/kindaccessor/KaRoot.kt b/integration-test/mpp-producer/src/commonMain/kotlin/io/github/projectmapk/mpp/fixtures/kindaccessor/KaRoot.kt index ec3fd2c..9011857 100644 --- a/integration-test/mpp-producer/src/commonMain/kotlin/io/github/projectmapk/mpp/fixtures/kindaccessor/KaRoot.kt +++ b/integration-test/mpp-producer/src/commonMain/kotlin/io/github/projectmapk/mpp/fixtures/kindaccessor/KaRoot.kt @@ -4,9 +4,28 @@ import io.github.projectmapk.sealedClassEnumizer.Enumize // 参照不能 kind(private companion・private 外側クラスの末端・private トップレベル末端)が IR-only // アクセサ経由で entries に載ることを、全ターゲット(jvm / js / native / wasmJs / wasmWasi)で -// 実証する(docs/概要.md §8・docs/コンパイラプラグイン設計02.md §4.3)。トップレベル IR-only アクセサ生成の klib 直列化・リンク成立が焦点 +// 実証する(docs/概要.md §8・docs/コンパイラプラグイン設計02.md §4.3)。 +// 本ファイルは末端クラス内へネストするアクセサ形を担い、トップレベルアクセサ形(= 基底のファイル外 +// 配置が壁の成立条件となる末端)は KaWalledLeaves.kt が担う。 +// トップレベル IR-only アクセサ生成の klib 直列化・リンク成立が焦点 @Enumize sealed interface KaRoot { // 基底内ネストの public 末端(参照可能 = 直接参照) data object Visible : KaRoot } + +// private companion(kind)→ 末端クラス内にネストした IR-only アクセサ経由で load +class KaPrivComp(val v: Int) : KaRoot { + private companion object +} + +// protected な既存 companion(kind)→ 末端クラス内にネストした IR-only アクセサ経由で load +abstract class KaProtComp : KaRoot { + protected companion object +} + +// interface 末端の private companion(kind)→ 末端 interface 内にネストした IR-only アクセサ経由で load +// (interface メンバーは public / private のみ。nested object から private companion を intra-scope 参照する) +interface KaIface : KaRoot { + private companion object +} diff --git a/integration-test/mpp-producer/src/commonMain/kotlin/io/github/projectmapk/mpp/fixtures/kindaccessor/KaWalledLeaves.kt b/integration-test/mpp-producer/src/commonMain/kotlin/io/github/projectmapk/mpp/fixtures/kindaccessor/KaWalledLeaves.kt new file mode 100644 index 0000000..2ec789f --- /dev/null +++ b/integration-test/mpp-producer/src/commonMain/kotlin/io/github/projectmapk/mpp/fixtures/kindaccessor/KaWalledLeaves.kt @@ -0,0 +1,14 @@ +package io.github.projectmapk.mpp.fixtures.kindaccessor + +// 基底のファイル外配置が要請となる KaRoot 末端群(docs/コンパイラプラグイン設計02.md §4.3)。 +// private は宣言ファイル内でのみ可視であり、本ファイルに置くこと自体がトップレベル壁の成立条件である。 +// 生成されるトップレベルアクセサは kind の外側クラス連鎖を名前へ含むため、1 ファイルに複数の壁が +// 同居しても衝突しない + +// 別ファイルの private トップレベル末端 → 本ファイルのトップレベル IR-only アクセサ経由で load +private object KaPrivTop : KaRoot + +// private 外側クラスにネストした参照不能末端 → 本ファイルのトップレベル IR-only アクセサ経由で load +private class KaHiddenHost { + object Leaf : KaRoot +} diff --git a/integration-test/mpp-producer/src/commonMain/kotlin/io/github/projectmapk/mpp/fixtures/order/Aaa.kt b/integration-test/mpp-producer/src/commonMain/kotlin/io/github/projectmapk/mpp/fixtures/order/Aaa.kt deleted file mode 100644 index 7a47524..0000000 --- a/integration-test/mpp-producer/src/commonMain/kotlin/io/github/projectmapk/mpp/fixtures/order/Aaa.kt +++ /dev/null @@ -1,5 +0,0 @@ -package io.github.projectmapk.mpp.fixtures.order - -// docs/test/ケース05-境界横断.md XMP-36: 中間 sealed の継承者 -// (トップレベル配置 = 全体が FQN 序数順にならない break の当事者) -data object Aaa : BreakMid diff --git a/integration-test/mpp-producer/src/commonMain/kotlin/io/github/projectmapk/mpp/fixtures/order/Bbb.kt b/integration-test/mpp-producer/src/commonMain/kotlin/io/github/projectmapk/mpp/fixtures/order/Bbb.kt deleted file mode 100644 index c09b010..0000000 --- a/integration-test/mpp-producer/src/commonMain/kotlin/io/github/projectmapk/mpp/fixtures/order/Bbb.kt +++ /dev/null @@ -1,4 +0,0 @@ -package io.github.projectmapk.mpp.fixtures.order - -// docs/test/ケース05-境界横断.md XMP-36: 基底直下のトップレベル末端(FQN 順で BreakMid より先行する) -data object Bbb : BreakRoot diff --git a/integration-test/mpp-producer/src/commonMain/kotlin/io/github/projectmapk/mpp/fixtures/order/Box.kt b/integration-test/mpp-producer/src/commonMain/kotlin/io/github/projectmapk/mpp/fixtures/order/Box.kt deleted file mode 100644 index 52cab7d..0000000 --- a/integration-test/mpp-producer/src/commonMain/kotlin/io/github/projectmapk/mpp/fixtures/order/Box.kt +++ /dev/null @@ -1,7 +0,0 @@ -package io.github.projectmapk.mpp.fixtures.order - -// ネスト末端 Box.Bbb の外側クラス(docs/概要.md §5 の実測形)。FQN "Box.Bbb" が -// 序数最小のため entries では先頭になる -class Box { - data object Bbb : FqnOrder -} diff --git a/integration-test/mpp-producer/src/commonMain/kotlin/io/github/projectmapk/mpp/fixtures/order/BreakMid.kt b/integration-test/mpp-producer/src/commonMain/kotlin/io/github/projectmapk/mpp/fixtures/order/BreakMid.kt deleted file mode 100644 index 24cb146..0000000 --- a/integration-test/mpp-producer/src/commonMain/kotlin/io/github/projectmapk/mpp/fixtures/order/BreakMid.kt +++ /dev/null @@ -1,4 +0,0 @@ -package io.github.projectmapk.mpp.fixtures.order - -// docs/test/ケース05-境界横断.md XMP-36: 非入れ子の中間 sealed(この位置に継承者が入れ子展開される) -sealed interface BreakMid : BreakRoot diff --git a/integration-test/mpp-producer/src/commonMain/kotlin/io/github/projectmapk/mpp/fixtures/order/BreakRoot.kt b/integration-test/mpp-producer/src/commonMain/kotlin/io/github/projectmapk/mpp/fixtures/order/BreakRoot.kt index ed231bc..d0f5c29 100644 --- a/integration-test/mpp-producer/src/commonMain/kotlin/io/github/projectmapk/mpp/fixtures/order/BreakRoot.kt +++ b/integration-test/mpp-producer/src/commonMain/kotlin/io/github/projectmapk/mpp/fixtures/order/BreakRoot.kt @@ -6,3 +6,12 @@ import io.github.projectmapk.sealedClassEnumizer.Enumize // 「中間 sealed の継承者がトップレベル」構成を common ソースセットへ置き、DFS 展開順が // metadata / 全 platform で決定的に一致することを検証する) @Enumize sealed interface BreakRoot + +// 基底直下のトップレベル末端(FQN 順で BreakMid より先行する) +data object Bbb : BreakRoot + +// 非入れ子の中間 sealed(この位置に継承者が入れ子展開される) +sealed interface BreakMid : BreakRoot + +// 中間 sealed の継承者(トップレベル配置 = 全体が FQN 序数順にならない break の当事者) +data object Aaa : BreakMid diff --git a/integration-test/mpp-producer/src/commonMain/kotlin/io/github/projectmapk/mpp/fixtures/order/FqnOrder.kt b/integration-test/mpp-producer/src/commonMain/kotlin/io/github/projectmapk/mpp/fixtures/order/FqnOrder.kt index 5876f56..9ede6a7 100644 --- a/integration-test/mpp-producer/src/commonMain/kotlin/io/github/projectmapk/mpp/fixtures/order/FqnOrder.kt +++ b/integration-test/mpp-producer/src/commonMain/kotlin/io/github/projectmapk/mpp/fixtures/order/FqnOrder.kt @@ -5,5 +5,26 @@ import io.github.projectmapk.sealedClassEnumizer.Enumize // entries 順序(FQN 序数順)の MPP 版フィクスチャ(docs/概要.md §5 の実測形・ // docs/test/ケース05-境界横断.md XMP-36)。ネスト末端 S.Aaa / Box.Bbb とトップレベル末端 // Mmm / Zzz / aLower を混在させ、entries = [Bbb, Mmm, Aaa, Zzz, aLower](FQN 序数順)が -// 全ターゲットで一致することを観測する。継承者はファイル分散で定義する +// 全ターゲットで一致することを観測する @Enumize sealed interface FqnOrder + +// ネスト末端 Box.Bbb の外側クラス。FQN "Box.Bbb" が序数最小のため entries では先頭になる +class Box { + data object Bbb : FqnOrder +} + +// トップレベル末端 +data object Mmm : FqnOrder + +// ネスト末端 S.Aaa の外側クラス。単純名順なら Aaa が先頭になるところ、 +// FQN "S.Aaa" として並ぶため entries では 3 番目になる +class S { + data object Aaa : FqnOrder +} + +// トップレベル末端。'Z'(90) は 'S'(83) の後・'a'(97) の前のため entries では 4 番目になる +data object Zzz : FqnOrder + +// 小文字始まりのトップレベル末端。大文字小文字を区別する序数比較では +// 'a'(97) > 'Z'(90) のため末尾になる(大小無視の辞書順なら先頭になる) +@Suppress("ClassName") data object aLower : FqnOrder diff --git a/integration-test/mpp-producer/src/commonMain/kotlin/io/github/projectmapk/mpp/fixtures/order/Mmm.kt b/integration-test/mpp-producer/src/commonMain/kotlin/io/github/projectmapk/mpp/fixtures/order/Mmm.kt deleted file mode 100644 index 6014a84..0000000 --- a/integration-test/mpp-producer/src/commonMain/kotlin/io/github/projectmapk/mpp/fixtures/order/Mmm.kt +++ /dev/null @@ -1,4 +0,0 @@ -package io.github.projectmapk.mpp.fixtures.order - -// トップレベル末端(docs/概要.md §5 の実測形) -data object Mmm : FqnOrder diff --git a/integration-test/mpp-producer/src/commonMain/kotlin/io/github/projectmapk/mpp/fixtures/order/S.kt b/integration-test/mpp-producer/src/commonMain/kotlin/io/github/projectmapk/mpp/fixtures/order/S.kt deleted file mode 100644 index 97f46cd..0000000 --- a/integration-test/mpp-producer/src/commonMain/kotlin/io/github/projectmapk/mpp/fixtures/order/S.kt +++ /dev/null @@ -1,7 +0,0 @@ -package io.github.projectmapk.mpp.fixtures.order - -// ネスト末端 S.Aaa の外側クラス(docs/概要.md §5 の実測形)。単純名順なら Aaa が先頭に -// なるところ、FQN "S.Aaa" として並ぶため entries では 3 番目になる -class S { - data object Aaa : FqnOrder -} diff --git a/integration-test/mpp-producer/src/commonMain/kotlin/io/github/projectmapk/mpp/fixtures/order/Zzz.kt b/integration-test/mpp-producer/src/commonMain/kotlin/io/github/projectmapk/mpp/fixtures/order/Zzz.kt deleted file mode 100644 index d91eec2..0000000 --- a/integration-test/mpp-producer/src/commonMain/kotlin/io/github/projectmapk/mpp/fixtures/order/Zzz.kt +++ /dev/null @@ -1,5 +0,0 @@ -package io.github.projectmapk.mpp.fixtures.order - -// トップレベル末端(docs/概要.md §5 の実測形)。'Z'(90) は 'S'(83) の後・'a'(97) の前のため -// entries では 4 番目になる -data object Zzz : FqnOrder diff --git a/integration-test/mpp-producer/src/commonMain/kotlin/io/github/projectmapk/mpp/fixtures/order/aLower.kt b/integration-test/mpp-producer/src/commonMain/kotlin/io/github/projectmapk/mpp/fixtures/order/aLower.kt deleted file mode 100644 index 526bd99..0000000 --- a/integration-test/mpp-producer/src/commonMain/kotlin/io/github/projectmapk/mpp/fixtures/order/aLower.kt +++ /dev/null @@ -1,5 +0,0 @@ -package io.github.projectmapk.mpp.fixtures.order - -// 小文字始まりのトップレベル末端(docs/概要.md §5 の実測形)。大文字小文字を区別する序数比較では -// 'a'(97) > 'Z'(90) のため末尾になる(大小無視の辞書順なら先頭になる) -@Suppress("ClassName") data object aLower : FqnOrder diff --git a/integration-test/mpp-producer/src/commonMain/kotlin/io/github/projectmapk/mpp/fixtures/tostring/Loud.kt b/integration-test/mpp-producer/src/commonMain/kotlin/io/github/projectmapk/mpp/fixtures/tostring/Loud.kt deleted file mode 100644 index 5523207..0000000 --- a/integration-test/mpp-producer/src/commonMain/kotlin/io/github/projectmapk/mpp/fixtures/tostring/Loud.kt +++ /dev/null @@ -1,7 +0,0 @@ -package io.github.projectmapk.mpp.fixtures.tostring - -// kind(companion)の継承経路に置く「Any 以外の具象 toString」(docs/概要.md §4 原則 1 の -// 「継承実装」ケース)。Show.Inherited の companion がこれを継承する -abstract class Loud { - override fun toString(): String = "loud" -} diff --git a/integration-test/mpp-producer/src/commonMain/kotlin/io/github/projectmapk/mpp/fixtures/tostring/Show.kt b/integration-test/mpp-producer/src/commonMain/kotlin/io/github/projectmapk/mpp/fixtures/tostring/Show.kt index 770f6d5..5acd5cd 100644 --- a/integration-test/mpp-producer/src/commonMain/kotlin/io/github/projectmapk/mpp/fixtures/tostring/Show.kt +++ b/integration-test/mpp-producer/src/commonMain/kotlin/io/github/projectmapk/mpp/fixtures/tostring/Show.kt @@ -30,3 +30,8 @@ sealed interface Show { companion object : Loud() } } + +// kind(companion)の継承経路に置く「Any 以外の具象 toString」(docs/概要.md §4 原則 1 の「継承実装」ケース) +abstract class Loud { + override fun toString(): String = "loud" +} diff --git a/integration-test/mpp-producer/src/commonMain/kotlin/io/github/projectmapk/mpp/fixtures/wider/Wide.kt b/integration-test/mpp-producer/src/commonMain/kotlin/io/github/projectmapk/mpp/fixtures/wider/Wide.kt deleted file mode 100644 index 0d7859c..0000000 --- a/integration-test/mpp-producer/src/commonMain/kotlin/io/github/projectmapk/mpp/fixtures/wider/Wide.kt +++ /dev/null @@ -1,8 +0,0 @@ -package io.github.projectmapk.mpp.fixtures.wider - -// 基底(internal)より広い可視性の末端(docs/エッジケースへの対応方針.md §1.1 #2)。companion は public(= 末端以上)の -// ため規則 1 が適用され、asEnumish の返り値型は Wide.Companion になる(規則 3 の -// ENUMIZE_KIND_TYPE_NOT_DENOTABLE は発火しない。docs/test/ケース05-境界横断.md XMP-43 の正値側) -class Wide : WideBase { - companion object -} diff --git a/integration-test/mpp-producer/src/commonMain/kotlin/io/github/projectmapk/mpp/fixtures/wider/WideBase.kt b/integration-test/mpp-producer/src/commonMain/kotlin/io/github/projectmapk/mpp/fixtures/wider/WideBase.kt index 29f99a6..450a417 100644 --- a/integration-test/mpp-producer/src/commonMain/kotlin/io/github/projectmapk/mpp/fixtures/wider/WideBase.kt +++ b/integration-test/mpp-producer/src/commonMain/kotlin/io/github/projectmapk/mpp/fixtures/wider/WideBase.kt @@ -2,7 +2,13 @@ package io.github.projectmapk.mpp.fixtures.wider import io.github.projectmapk.sealedClassEnumizer.Enumize -// internal 基底(E-2 の生成側 MPP 版: 基底より広い可視性の末端は Wide.kt。docs/エッジケースへの対応方針.md §1.2・ +// internal 基底(E-2 の生成側 MPP 版。docs/エッジケースへの対応方針.md §1.1 #2・§1.2・ // docs/test/ケース05-境界横断.md XMP-43)。階層 API(entries / valueOf)は internal、 // 値・kind API(asEnumish / label)は public という分離が全ターゲットで成立することを観測する @Enumize internal sealed interface WideBase + +// 基底(internal)より広い可視性の末端。companion は public(= 末端以上)のため規則 1 が適用され、 +// asEnumish の返り値型は Wide.Companion になる(規則 3 の ENUMIZE_KIND_TYPE_NOT_DENOTABLE は発火しない) +class Wide : WideBase { + companion object +} From a810f7040e7bae477ca981857e0cd01aacb876dc Mon Sep 17 00:00:00 2001 From: wrongwrong Date: Sun, 2 Aug 2026 00:51:30 +0900 Subject: [PATCH 4/9] =?UTF-8?q?test:=20TestKit=20=E3=81=AE=E9=9D=9E?= =?UTF-8?q?=E8=A8=BA=E6=96=AD=E3=83=95=E3=82=A3=E3=82=AF=E3=82=B9=E3=83=81?= =?UTF-8?q?=E3=83=A3=E3=82=92=E6=A4=9C=E8=A8=BC=E5=8D=98=E4=BD=8D=E3=81=B8?= =?UTF-8?q?=E5=86=8D=E7=B7=A8=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit sweep-* / probe-* / binary-swap の基底と末端・利用点を 1 ファイルへ集約し、 参照するテストのファイル名・行番号を実測値へ合わせる。 ファイル粒度が検証対象となる箇所は分離を保つ。 - runMain の mainClass はファイル名由来のため Main.kt は分離する - probe-annotation-alias はテストが別名ファイルを削除するため分離する - ic-* / determinism / abi-propagation はテストがファイル単位で編集するため対象外 Co-Authored-By: Claude Opus 5 --- .../github/projectmapk/gradle/ProbeGateTest.kt | 4 ++-- .../projectmapk/gradle/TypealiasGateTest.kt | 4 ++-- .../kotlin/io/github/projectmapk/swapuse/Main.kt | 7 +++++++ .../kotlin/io/github/projectmapk/swapuse/Use.kt | 10 ---------- .../io/github/projectmapk/swapuse2/Main.kt | 8 ++++++++ .../kotlin/io/github/projectmapk/swapuse2/Use.kt | 11 ----------- .../kotlin/io/github/projectmapk/shared/Two.kt | 2 +- .../projectmapk/probe/alias/AaAliasDecl.kt | 3 ++- .../io/github/projectmapk/probe/alias/Main.kt | 3 ++- .../io/github/projectmapk/probe/cclash/CcLeaf.kt | 8 -------- .../io/github/projectmapk/probe/cclash/CcSi.kt | 7 +++++++ .../io/github/projectmapk/probe/deleg/Del.kt | 5 ----- .../io/github/projectmapk/probe/deleg/PSi.kt | 4 ++++ .../io/github/projectmapk/sweep/md/SwMd.kt | 10 ++++++++++ .../io/github/projectmapk/sweep/md/SwMdOuterA.kt | 6 ------ .../io/github/projectmapk/sweep/md/SwMdOuterB.kt | 6 ------ .../io/github/projectmapk/sweep/taimpl/SwTiAl.kt | 16 +++++++++++++++- .../projectmapk/sweep/taimpl/SwTiAlLeaf.kt | 10 ---------- .../io/github/projectmapk/sweep/taimpl/SwTiEx.kt | 13 +++++++++++++ .../projectmapk/sweep/taimpl/SwTiExLeaf.kt | 10 ---------- .../github/projectmapk/sweep/taimpl/UseSwTiAl.kt | 6 ------ .../github/projectmapk/sweep/taimpl/UseSwTiEx.kt | 6 ------ .../io/github/projectmapk/sweep/xn/SwXnMan.kt | 3 +-- .../io/github/projectmapk/sweep/xn/SwXnMix.kt | 6 ++++++ .../io/github/projectmapk/sweep/xn/SwXnPub.kt | 4 ---- .../io/github/projectmapk/sweep/xn/SwXnSec.kt | 4 ---- .../github/projectmapk/sweep/xn/SwXnWideBase.kt | 8 +++++++- .../github/projectmapk/sweep/xn/SwXnWideLeaf.kt | 6 ------ 28 files changed, 87 insertions(+), 103 deletions(-) delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/binary-swap/consumer/src/main/kotlin/io/github/projectmapk/swapuse/Use.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/binary-swap/consumer2/src/main/kotlin/io/github/projectmapk/swapuse2/Use.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/probe-companion-clash/src/main/kotlin/io/github/projectmapk/probe/cclash/CcLeaf.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/probe-delegation/src/main/kotlin/io/github/projectmapk/probe/deleg/Del.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/sweep-mpp-metadata-diag/src/commonMain/kotlin/io/github/projectmapk/sweep/md/SwMdOuterA.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/sweep-mpp-metadata-diag/src/commonMain/kotlin/io/github/projectmapk/sweep/md/SwMdOuterB.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/sweep-typealias-impl/src/main/kotlin/io/github/projectmapk/sweep/taimpl/SwTiAlLeaf.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/sweep-typealias-impl/src/main/kotlin/io/github/projectmapk/sweep/taimpl/SwTiExLeaf.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/sweep-typealias-impl/src/main/kotlin/io/github/projectmapk/sweep/taimpl/UseSwTiAl.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/sweep-typealias-impl/src/main/kotlin/io/github/projectmapk/sweep/taimpl/UseSwTiEx.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/sweep-xm-negative/producer/src/main/kotlin/io/github/projectmapk/sweep/xn/SwXnPub.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/sweep-xm-negative/producer/src/main/kotlin/io/github/projectmapk/sweep/xn/SwXnSec.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/sweep-xm-negative/producer/src/main/kotlin/io/github/projectmapk/sweep/xn/SwXnWideLeaf.kt diff --git a/integration-test/gradle-integration/src/test/kotlin/io/github/projectmapk/gradle/ProbeGateTest.kt b/integration-test/gradle-integration/src/test/kotlin/io/github/projectmapk/gradle/ProbeGateTest.kt index 2b16075..6b04939 100644 --- a/integration-test/gradle-integration/src/test/kotlin/io/github/projectmapk/gradle/ProbeGateTest.kt +++ b/integration-test/gradle-integration/src/test/kotlin/io/github/projectmapk/gradle/ProbeGateTest.kt @@ -14,8 +14,8 @@ class ProbeGateTest : DiagTestBase() { @Test fun companionNameClashBehaviorIsPinned() { val output = failOutput("probe-companion-clash", "compileKotlin") - assertDiagnosticAt(output, "CcLeaf.kt", 6, DiagFragments.LANG_CONFLICTING_DECLARATIONS) - assertDiagnosticAt(output, "CcLeaf.kt", 7, DiagFragments.LANG_CONFLICTING_DECLARATIONS) + assertDiagnosticAt(output, "CcSi.kt", 12, DiagFragments.LANG_CONFLICTING_DECLARATIONS) + assertDiagnosticAt(output, "CcSi.kt", 13, DiagFragments.LANG_CONFLICTING_DECLARATIONS) } // docs/test/ケース04-診断.md DIA-67: @Enumize の import 別名・typealias 表記は述語 diff --git a/integration-test/gradle-integration/src/test/kotlin/io/github/projectmapk/gradle/TypealiasGateTest.kt b/integration-test/gradle-integration/src/test/kotlin/io/github/projectmapk/gradle/TypealiasGateTest.kt index b04c0f4..8c86076 100644 --- a/integration-test/gradle-integration/src/test/kotlin/io/github/projectmapk/gradle/TypealiasGateTest.kt +++ b/integration-test/gradle-integration/src/test/kotlin/io/github/projectmapk/gradle/TypealiasGateTest.kt @@ -14,13 +14,13 @@ class TypealiasGateTest : DiagTestBase() { val output = failOutput("sweep-typealias-impl", "compileKotlin") assertDiagnosticAnywhere( output, - "UseSwTiAl.kt", + "SwTiAl.kt", DiagFragments.LANG_WHEN_NOT_EXHAUSTIVE, "is SwTiAlLeaf", ) assertDiagnosticAnywhere( output, - "UseSwTiEx.kt", + "SwTiEx.kt", DiagFragments.LANG_WHEN_NOT_EXHAUSTIVE, "is SwTiExLeaf", ) diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/binary-swap/consumer/src/main/kotlin/io/github/projectmapk/swapuse/Main.kt b/integration-test/gradle-integration/src/test/resources/fixtures/binary-swap/consumer/src/main/kotlin/io/github/projectmapk/swapuse/Main.kt index d352d0d..b814ca0 100644 --- a/integration-test/gradle-integration/src/test/resources/fixtures/binary-swap/consumer/src/main/kotlin/io/github/projectmapk/swapuse/Main.kt +++ b/integration-test/gradle-integration/src/test/resources/fixtures/binary-swap/consumer/src/main/kotlin/io/github/projectmapk/swapuse/Main.kt @@ -18,3 +18,10 @@ private fun probeBaz(): String = try { } catch (e: IllegalArgumentException) { "IAE" } + +// v1(2 末端)に対して網羅の else 無し kind-when。実行時 v2 で未知 kind を通すと +// NoWhenBranchMatchedException になる(docs/test/ケース06-ビルド動態.md BLD-40) +fun describeKind(kind: SI.Enumish): String = when (kind) { + SI.Foo.Companion -> "foo" + SI.Bar -> "bar" +} diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/binary-swap/consumer/src/main/kotlin/io/github/projectmapk/swapuse/Use.kt b/integration-test/gradle-integration/src/test/resources/fixtures/binary-swap/consumer/src/main/kotlin/io/github/projectmapk/swapuse/Use.kt deleted file mode 100644 index 8180fe1..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/binary-swap/consumer/src/main/kotlin/io/github/projectmapk/swapuse/Use.kt +++ /dev/null @@ -1,10 +0,0 @@ -package io.github.projectmapk.swapuse - -import io.github.projectmapk.swaplib.SI - -// v1(2 末端)に対して網羅の else 無し kind-when。実行時 v2 で未知 kind を通すと -// NoWhenBranchMatchedException になる(docs/test/ケース06-ビルド動態.md BLD-40) -fun describeKind(kind: SI.Enumish): String = when (kind) { - SI.Foo.Companion -> "foo" - SI.Bar -> "bar" -} diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/binary-swap/consumer2/src/main/kotlin/io/github/projectmapk/swapuse2/Main.kt b/integration-test/gradle-integration/src/test/resources/fixtures/binary-swap/consumer2/src/main/kotlin/io/github/projectmapk/swapuse2/Main.kt index d006baa..7059fe6 100644 --- a/integration-test/gradle-integration/src/test/resources/fixtures/binary-swap/consumer2/src/main/kotlin/io/github/projectmapk/swapuse2/Main.kt +++ b/integration-test/gradle-integration/src/test/resources/fixtures/binary-swap/consumer2/src/main/kotlin/io/github/projectmapk/swapuse2/Main.kt @@ -18,3 +18,11 @@ private fun probeBaz(): String = try { } catch (e: IllegalArgumentException) { "IAE" } + +// v2(3 末端)に対して網羅の else 無し kind-when。実行時 v1 では存在する kind だけが通り +// 全枝が解決される(docs/test/ケース06-ビルド動態.md BLD-40 の削除方向) +fun describeKind(kind: SI.Enumish): String = when (kind) { + SI.Foo.Companion -> "foo" + SI.Bar -> "bar" + SI.Baz -> "baz" +} diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/binary-swap/consumer2/src/main/kotlin/io/github/projectmapk/swapuse2/Use.kt b/integration-test/gradle-integration/src/test/resources/fixtures/binary-swap/consumer2/src/main/kotlin/io/github/projectmapk/swapuse2/Use.kt deleted file mode 100644 index 7337a45..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/binary-swap/consumer2/src/main/kotlin/io/github/projectmapk/swapuse2/Use.kt +++ /dev/null @@ -1,11 +0,0 @@ -package io.github.projectmapk.swapuse2 - -import io.github.projectmapk.swaplib.SI - -// v2(3 末端)に対して網羅の else 無し kind-when。実行時 v1 では存在する kind だけが通り -// 全枝が解決される(docs/test/ケース06-ビルド動態.md BLD-40 の削除方向) -fun describeKind(kind: SI.Enumish): String = when (kind) { - SI.Foo.Companion -> "foo" - SI.Bar -> "bar" - SI.Baz -> "baz" -} diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/ic-shared-file/src/main/kotlin/io/github/projectmapk/shared/Two.kt b/integration-test/gradle-integration/src/test/resources/fixtures/ic-shared-file/src/main/kotlin/io/github/projectmapk/shared/Two.kt index 2347e8f..491e477 100644 --- a/integration-test/gradle-integration/src/test/resources/fixtures/ic-shared-file/src/main/kotlin/io/github/projectmapk/shared/Two.kt +++ b/integration-test/gradle-integration/src/test/resources/fixtures/ic-shared-file/src/main/kotlin/io/github/projectmapk/shared/Two.kt @@ -4,7 +4,7 @@ import io.github.projectmapk.sealedClassEnumizer.Enumize // 同一ファイルに 2 つの独立した @Enumize 階層を同居させる境界フィクスチャ(docs/test/ケース06-ビルド動態.md BLD-32)。 // P3(非集約)は論理集約の話であり、同一ファイル内では再コンパイル単位がファイルのため物理的に -// 共連れになる。2 階層の同居がテストの本質のため、1 ファイル 1 クラスの規約はこのファイルに限り適用外 +// 共連れになる。独立した 2 階層の同居そのものがテストの入力である @Enumize sealed interface SA { data object A1 : SA diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/probe-annotation-alias/src/main/kotlin/io/github/projectmapk/probe/alias/AaAliasDecl.kt b/integration-test/gradle-integration/src/test/resources/fixtures/probe-annotation-alias/src/main/kotlin/io/github/projectmapk/probe/alias/AaAliasDecl.kt index 3460d40..185fa53 100644 --- a/integration-test/gradle-integration/src/test/resources/fixtures/probe-annotation-alias/src/main/kotlin/io/github/projectmapk/probe/alias/AaAliasDecl.kt +++ b/integration-test/gradle-integration/src/test/resources/fixtures/probe-annotation-alias/src/main/kotlin/io/github/projectmapk/probe/alias/AaAliasDecl.kt @@ -1,4 +1,5 @@ package io.github.projectmapk.probe.alias -// docs/test/ケース04-診断.md DIA-67 用: @Enumize 自体への typealias +// docs/test/ケース04-診断.md DIA-67 用: @Enumize 自体への typealias。 +// AaTypealias.kt はテスト側が除去するため、別名宣言はそれと別ファイルに置く typealias EnumizeAlias = io.github.projectmapk.sealedClassEnumizer.Enumize diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/probe-annotation-alias/src/main/kotlin/io/github/projectmapk/probe/alias/Main.kt b/integration-test/gradle-integration/src/test/resources/fixtures/probe-annotation-alias/src/main/kotlin/io/github/projectmapk/probe/alias/Main.kt index b2a9466..1c1b874 100644 --- a/integration-test/gradle-integration/src/test/resources/fixtures/probe-annotation-alias/src/main/kotlin/io/github/projectmapk/probe/alias/Main.kt +++ b/integration-test/gradle-integration/src/test/resources/fixtures/probe-annotation-alias/src/main/kotlin/io/github/projectmapk/probe/alias/Main.kt @@ -1,7 +1,8 @@ package io.github.projectmapk.probe.alias // FQN 表記の生成 API 到達を実行時 entries で観測する(import 別名 = AaImport.kt と -// typealias = AaTypealias.kt は ALIASED_ANNOTATION エラーのため、テスト側が除去してから実行する) +// typealias = AaTypealias.kt は ALIASED_ANNOTATION エラーのため、テスト側が除去してから実行する)。 +// runMain の mainClass はファイル名由来(MainKt)であり、本ファイルは分離を保つ fun main() { println("OUT:FQ=" + AaFq.Enumish.entries.joinToString(",") { it.label }) } diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/probe-companion-clash/src/main/kotlin/io/github/projectmapk/probe/cclash/CcLeaf.kt b/integration-test/gradle-integration/src/test/resources/fixtures/probe-companion-clash/src/main/kotlin/io/github/projectmapk/probe/cclash/CcLeaf.kt deleted file mode 100644 index b894988..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/probe-companion-clash/src/main/kotlin/io/github/projectmapk/probe/cclash/CcLeaf.kt +++ /dev/null @@ -1,8 +0,0 @@ -package io.github.projectmapk.probe.cclash - -// docs/test/ケース04-診断.md DIA-66: companion 無し末端 class が非 companion のネスト宣言 -// object Companion を持つ形。自動生成 companion の ClassId と衝突する帰結 -// (REDECLARATION / ICE / シャドーイング)を固定する -class CcLeaf(val v: Int) : CcSi { - object Companion -} diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/probe-companion-clash/src/main/kotlin/io/github/projectmapk/probe/cclash/CcSi.kt b/integration-test/gradle-integration/src/test/resources/fixtures/probe-companion-clash/src/main/kotlin/io/github/projectmapk/probe/cclash/CcSi.kt index ae1cd8c..f9163a7 100644 --- a/integration-test/gradle-integration/src/test/resources/fixtures/probe-companion-clash/src/main/kotlin/io/github/projectmapk/probe/cclash/CcSi.kt +++ b/integration-test/gradle-integration/src/test/resources/fixtures/probe-companion-clash/src/main/kotlin/io/github/projectmapk/probe/cclash/CcSi.kt @@ -5,3 +5,10 @@ import io.github.projectmapk.sealedClassEnumizer.Enumize // docs/test/ケース04-診断.md DIA-66 用の基底 @Enumize sealed interface CcSi + +// docs/test/ケース04-診断.md DIA-66: companion 無し末端 class が非 companion のネスト宣言 +// object Companion を持つ形。自動生成 companion の ClassId と衝突する帰結 +// (REDECLARATION / ICE / シャドーイング)を固定する +class CcLeaf(val v: Int) : CcSi { + object Companion +} diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/probe-delegation/src/main/kotlin/io/github/projectmapk/probe/deleg/Del.kt b/integration-test/gradle-integration/src/test/resources/fixtures/probe-delegation/src/main/kotlin/io/github/projectmapk/probe/deleg/Del.kt deleted file mode 100644 index 3d8d629..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/probe-delegation/src/main/kotlin/io/github/projectmapk/probe/deleg/Del.kt +++ /dev/null @@ -1,5 +0,0 @@ -package io.github.projectmapk.probe.deleg - -// docs/test/ケース04-診断.md DIA-69: 基底へのクラス委譲末端。委譲が asEnumish の実装を供給し、 -// 生成 override との衝突(宣言衝突)か委譲勝ち(kind 契約破れ)のどちらに倒れるかを観測する -class Del(private val o: PSi) : PSi by o diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/probe-delegation/src/main/kotlin/io/github/projectmapk/probe/deleg/PSi.kt b/integration-test/gradle-integration/src/test/resources/fixtures/probe-delegation/src/main/kotlin/io/github/projectmapk/probe/deleg/PSi.kt index bd54534..0303fc2 100644 --- a/integration-test/gradle-integration/src/test/resources/fixtures/probe-delegation/src/main/kotlin/io/github/projectmapk/probe/deleg/PSi.kt +++ b/integration-test/gradle-integration/src/test/resources/fixtures/probe-delegation/src/main/kotlin/io/github/projectmapk/probe/deleg/PSi.kt @@ -7,3 +7,7 @@ import io.github.projectmapk.sealedClassEnumizer.Enumize sealed interface PSi { data object Ok : PSi } + +// docs/test/ケース04-診断.md DIA-69: 基底へのクラス委譲末端。委譲が asEnumish の実装を供給し、 +// 生成 override との衝突(宣言衝突)か委譲勝ち(kind 契約破れ)のどちらに倒れるかを観測する +class Del(private val o: PSi) : PSi by o diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/sweep-mpp-metadata-diag/src/commonMain/kotlin/io/github/projectmapk/sweep/md/SwMd.kt b/integration-test/gradle-integration/src/test/resources/fixtures/sweep-mpp-metadata-diag/src/commonMain/kotlin/io/github/projectmapk/sweep/md/SwMd.kt index f73ef17..23b942f 100644 --- a/integration-test/gradle-integration/src/test/resources/fixtures/sweep-mpp-metadata-diag/src/commonMain/kotlin/io/github/projectmapk/sweep/md/SwMd.kt +++ b/integration-test/gradle-integration/src/test/resources/fixtures/sweep-mpp-metadata-diag/src/commonMain/kotlin/io/github/projectmapk/sweep/md/SwMd.kt @@ -5,3 +5,13 @@ import io.github.projectmapk.sealedClassEnumizer.Enumize // docs/test/ケース04-診断.md DIA-12 用の基底(commonMain に label 衝突する 2 末端を持つ) @Enumize sealed interface SwMd + +// label 衝突の当事者 A(common ソースセット) +class SwMdOuterA { + object Dup : SwMd +} + +// label 衝突の当事者 B(common ソースセット) +class SwMdOuterB { + object Dup : SwMd +} diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/sweep-mpp-metadata-diag/src/commonMain/kotlin/io/github/projectmapk/sweep/md/SwMdOuterA.kt b/integration-test/gradle-integration/src/test/resources/fixtures/sweep-mpp-metadata-diag/src/commonMain/kotlin/io/github/projectmapk/sweep/md/SwMdOuterA.kt deleted file mode 100644 index 1373928..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/sweep-mpp-metadata-diag/src/commonMain/kotlin/io/github/projectmapk/sweep/md/SwMdOuterA.kt +++ /dev/null @@ -1,6 +0,0 @@ -package io.github.projectmapk.sweep.md - -// docs/test/ケース04-診断.md DIA-12: label 衝突の当事者 A(common ソースセット) -class SwMdOuterA { - object Dup : SwMd -} diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/sweep-mpp-metadata-diag/src/commonMain/kotlin/io/github/projectmapk/sweep/md/SwMdOuterB.kt b/integration-test/gradle-integration/src/test/resources/fixtures/sweep-mpp-metadata-diag/src/commonMain/kotlin/io/github/projectmapk/sweep/md/SwMdOuterB.kt deleted file mode 100644 index 2557610..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/sweep-mpp-metadata-diag/src/commonMain/kotlin/io/github/projectmapk/sweep/md/SwMdOuterB.kt +++ /dev/null @@ -1,6 +0,0 @@ -package io.github.projectmapk.sweep.md - -// docs/test/ケース04-診断.md DIA-12: label 衝突の当事者 B(common ソースセット) -class SwMdOuterB { - object Dup : SwMd -} diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/sweep-typealias-impl/src/main/kotlin/io/github/projectmapk/sweep/taimpl/SwTiAl.kt b/integration-test/gradle-integration/src/test/resources/fixtures/sweep-typealias-impl/src/main/kotlin/io/github/projectmapk/sweep/taimpl/SwTiAl.kt index 43d8673..4be14d7 100644 --- a/integration-test/gradle-integration/src/test/resources/fixtures/sweep-typealias-impl/src/main/kotlin/io/github/projectmapk/sweep/taimpl/SwTiAl.kt +++ b/integration-test/gradle-integration/src/test/resources/fixtures/sweep-typealias-impl/src/main/kotlin/io/github/projectmapk/sweep/taimpl/SwTiAl.kt @@ -1,7 +1,21 @@ package io.github.projectmapk.sweep.taimpl import io.github.projectmapk.sealedClassEnumizer.Enumize +import kotlin.reflect.KClass -// 観測対象(別名形): 階層内の手動実装を typealias 経由で書く基底 +// 観測対象(別名形): 階層内の手動実装を typealias 経由で書く基底。 +// 別名宣言は SwTiAlias.kt が持つ(生成型への typealias は宣言ファイルの位置で解決順が変わるため分離する) @Enumize sealed interface SwTiAl + +// 別名形の階層内手動実装(SwTiExLeaf と同一構造で supertype の表記だけが typealias) +data class SwTiAlLeaf(val v: Int) : SwTiAl, SwTiAlias { + override val label: String get() = "aliased" + + override val enumizedClass: KClass get() = SwTiAlLeaf::class +} + +// useSwTiEx と同一形。別名形の手動実装が継承者一覧に載らなければ、この when は網羅と見なされる +fun useSwTiAl(kind: SwTiAl.Enumish): Int = when (kind) { + SwTiAlLeaf.Companion -> 1 +} diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/sweep-typealias-impl/src/main/kotlin/io/github/projectmapk/sweep/taimpl/SwTiAlLeaf.kt b/integration-test/gradle-integration/src/test/resources/fixtures/sweep-typealias-impl/src/main/kotlin/io/github/projectmapk/sweep/taimpl/SwTiAlLeaf.kt deleted file mode 100644 index 6979c80..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/sweep-typealias-impl/src/main/kotlin/io/github/projectmapk/sweep/taimpl/SwTiAlLeaf.kt +++ /dev/null @@ -1,10 +0,0 @@ -package io.github.projectmapk.sweep.taimpl - -import kotlin.reflect.KClass - -// 別名形の階層内手動実装(SwTiExLeaf と同一構造で supertype の表記だけが typealias) -data class SwTiAlLeaf(val v: Int) : SwTiAl, SwTiAlias { - override val label: String get() = "aliased" - - override val enumizedClass: KClass get() = SwTiAlLeaf::class -} diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/sweep-typealias-impl/src/main/kotlin/io/github/projectmapk/sweep/taimpl/SwTiEx.kt b/integration-test/gradle-integration/src/test/resources/fixtures/sweep-typealias-impl/src/main/kotlin/io/github/projectmapk/sweep/taimpl/SwTiEx.kt index 177817b..d5dead9 100644 --- a/integration-test/gradle-integration/src/test/resources/fixtures/sweep-typealias-impl/src/main/kotlin/io/github/projectmapk/sweep/taimpl/SwTiEx.kt +++ b/integration-test/gradle-integration/src/test/resources/fixtures/sweep-typealias-impl/src/main/kotlin/io/github/projectmapk/sweep/taimpl/SwTiEx.kt @@ -1,7 +1,20 @@ package io.github.projectmapk.sweep.taimpl import io.github.projectmapk.sealedClassEnumizer.Enumize +import kotlin.reflect.KClass // 対照(明示形): 階層内の手動実装を SwTiEx.Enumish と直接書く基底 @Enumize sealed interface SwTiEx + +// 明示形の階層内手動実装(末端 class 自身が生成 Enumish を実装する形)。kind は companion 側 +data class SwTiExLeaf(val v: Int) : SwTiEx, SwTiEx.Enumish { + override val label: String get() = "explicit" + + override val enumizedClass: KClass get() = SwTiExLeaf::class +} + +// 手動実装の枝を欠いた kind-when。手動実装が継承者一覧に載っていれば網羅性エラーになる +fun useSwTiEx(kind: SwTiEx.Enumish): Int = when (kind) { + SwTiExLeaf.Companion -> 1 +} diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/sweep-typealias-impl/src/main/kotlin/io/github/projectmapk/sweep/taimpl/SwTiExLeaf.kt b/integration-test/gradle-integration/src/test/resources/fixtures/sweep-typealias-impl/src/main/kotlin/io/github/projectmapk/sweep/taimpl/SwTiExLeaf.kt deleted file mode 100644 index e3c1950..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/sweep-typealias-impl/src/main/kotlin/io/github/projectmapk/sweep/taimpl/SwTiExLeaf.kt +++ /dev/null @@ -1,10 +0,0 @@ -package io.github.projectmapk.sweep.taimpl - -import kotlin.reflect.KClass - -// 明示形の階層内手動実装(末端 class 自身が生成 Enumish を実装する形)。kind は companion 側 -data class SwTiExLeaf(val v: Int) : SwTiEx, SwTiEx.Enumish { - override val label: String get() = "explicit" - - override val enumizedClass: KClass get() = SwTiExLeaf::class -} diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/sweep-typealias-impl/src/main/kotlin/io/github/projectmapk/sweep/taimpl/UseSwTiAl.kt b/integration-test/gradle-integration/src/test/resources/fixtures/sweep-typealias-impl/src/main/kotlin/io/github/projectmapk/sweep/taimpl/UseSwTiAl.kt deleted file mode 100644 index 40c187e..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/sweep-typealias-impl/src/main/kotlin/io/github/projectmapk/sweep/taimpl/UseSwTiAl.kt +++ /dev/null @@ -1,6 +0,0 @@ -package io.github.projectmapk.sweep.taimpl - -// UseSwTiEx と同一形。別名形の手動実装が継承者一覧に載らなければ、この when は網羅と見なされる -fun useSwTiAl(kind: SwTiAl.Enumish): Int = when (kind) { - SwTiAlLeaf.Companion -> 1 -} diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/sweep-typealias-impl/src/main/kotlin/io/github/projectmapk/sweep/taimpl/UseSwTiEx.kt b/integration-test/gradle-integration/src/test/resources/fixtures/sweep-typealias-impl/src/main/kotlin/io/github/projectmapk/sweep/taimpl/UseSwTiEx.kt deleted file mode 100644 index c55a7ea..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/sweep-typealias-impl/src/main/kotlin/io/github/projectmapk/sweep/taimpl/UseSwTiEx.kt +++ /dev/null @@ -1,6 +0,0 @@ -package io.github.projectmapk.sweep.taimpl - -// 手動実装の枝を欠いた kind-when。手動実装が継承者一覧に載っていれば網羅性エラーになる -fun useSwTiEx(kind: SwTiEx.Enumish): Int = when (kind) { - SwTiExLeaf.Companion -> 1 -} diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/sweep-xm-negative/producer/src/main/kotlin/io/github/projectmapk/sweep/xn/SwXnMan.kt b/integration-test/gradle-integration/src/test/resources/fixtures/sweep-xm-negative/producer/src/main/kotlin/io/github/projectmapk/sweep/xn/SwXnMan.kt index 307d6cf..0e340be 100644 --- a/integration-test/gradle-integration/src/test/resources/fixtures/sweep-xm-negative/producer/src/main/kotlin/io/github/projectmapk/sweep/xn/SwXnMan.kt +++ b/integration-test/gradle-integration/src/test/resources/fixtures/sweep-xm-negative/producer/src/main/kotlin/io/github/projectmapk/sweep/xn/SwXnMan.kt @@ -4,8 +4,7 @@ import io.github.projectmapk.sealedClassEnumizer.Enumize import kotlin.reflect.KClass // docs/test/ケース05-境界横断.md XMP-13 用: public 基底 + internal な階層内手動実装。 -// 手動実装は inheritors に載るが跨モジュールでは不可視のため、消費側の kind-when は else 必須になる。 -// 1 ファイル 1 クラス規約は「階層内手動実装が同一階層に閉じる」構成要求を優先して適用外とする +// 手動実装は inheritors に載るが跨モジュールでは不可視のため、消費側の kind-when は else 必須になる @Enumize sealed interface SwXnMan { data object Only : SwXnMan diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/sweep-xm-negative/producer/src/main/kotlin/io/github/projectmapk/sweep/xn/SwXnMix.kt b/integration-test/gradle-integration/src/test/resources/fixtures/sweep-xm-negative/producer/src/main/kotlin/io/github/projectmapk/sweep/xn/SwXnMix.kt index ff839e8..6daa608 100644 --- a/integration-test/gradle-integration/src/test/resources/fixtures/sweep-xm-negative/producer/src/main/kotlin/io/github/projectmapk/sweep/xn/SwXnMix.kt +++ b/integration-test/gradle-integration/src/test/resources/fixtures/sweep-xm-negative/producer/src/main/kotlin/io/github/projectmapk/sweep/xn/SwXnMix.kt @@ -5,3 +5,9 @@ import io.github.projectmapk.sealedClassEnumizer.Enumize // docs/test/ケース05-境界横断.md XMP-13 用: public 基底 + public / internal 末端の混在 @Enumize sealed interface SwXnMix + +// 外側から名指しできる public 末端 +data object SwXnPub : SwXnMix + +// 外側から名指しできず else を強制する internal 末端 +internal data object SwXnSec : SwXnMix diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/sweep-xm-negative/producer/src/main/kotlin/io/github/projectmapk/sweep/xn/SwXnPub.kt b/integration-test/gradle-integration/src/test/resources/fixtures/sweep-xm-negative/producer/src/main/kotlin/io/github/projectmapk/sweep/xn/SwXnPub.kt deleted file mode 100644 index d85ed49..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/sweep-xm-negative/producer/src/main/kotlin/io/github/projectmapk/sweep/xn/SwXnPub.kt +++ /dev/null @@ -1,4 +0,0 @@ -package io.github.projectmapk.sweep.xn - -// docs/test/ケース05-境界横断.md XMP-13 用の public 末端(外側から名指しできる側) -data object SwXnPub : SwXnMix diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/sweep-xm-negative/producer/src/main/kotlin/io/github/projectmapk/sweep/xn/SwXnSec.kt b/integration-test/gradle-integration/src/test/resources/fixtures/sweep-xm-negative/producer/src/main/kotlin/io/github/projectmapk/sweep/xn/SwXnSec.kt deleted file mode 100644 index 877f1fe..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/sweep-xm-negative/producer/src/main/kotlin/io/github/projectmapk/sweep/xn/SwXnSec.kt +++ /dev/null @@ -1,4 +0,0 @@ -package io.github.projectmapk.sweep.xn - -// docs/test/ケース05-境界横断.md XMP-13 用の internal 末端(外側から名指しできず else を強制する側) -internal data object SwXnSec : SwXnMix diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/sweep-xm-negative/producer/src/main/kotlin/io/github/projectmapk/sweep/xn/SwXnWideBase.kt b/integration-test/gradle-integration/src/test/resources/fixtures/sweep-xm-negative/producer/src/main/kotlin/io/github/projectmapk/sweep/xn/SwXnWideBase.kt index 0bc7c36..e47f86e 100644 --- a/integration-test/gradle-integration/src/test/resources/fixtures/sweep-xm-negative/producer/src/main/kotlin/io/github/projectmapk/sweep/xn/SwXnWideBase.kt +++ b/integration-test/gradle-integration/src/test/resources/fixtures/sweep-xm-negative/producer/src/main/kotlin/io/github/projectmapk/sweep/xn/SwXnWideBase.kt @@ -2,6 +2,12 @@ package io.github.projectmapk.sweep.xn import io.github.projectmapk.sealedClassEnumizer.Enumize -// docs/test/ケース05-境界横断.md XMP-17 用: internal 基底(基底より広い末端 SwXnWideLeaf を持つ。docs/エッジケースへの対応方針.md §1.1 #2 で言語上成立) +// docs/test/ケース05-境界横断.md XMP-17 用: internal 基底(基底より広い末端を持つ形。 +// docs/エッジケースへの対応方針.md §1.1 #2 で言語上成立) @Enumize internal sealed interface SwXnWideBase + +// 基底より広い public 末端(public companion → 規則 1 で asEnumish は具体型を返す) +class SwXnWideLeaf(val v: Int) : SwXnWideBase { + companion object +} diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/sweep-xm-negative/producer/src/main/kotlin/io/github/projectmapk/sweep/xn/SwXnWideLeaf.kt b/integration-test/gradle-integration/src/test/resources/fixtures/sweep-xm-negative/producer/src/main/kotlin/io/github/projectmapk/sweep/xn/SwXnWideLeaf.kt deleted file mode 100644 index e2e4a91..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/sweep-xm-negative/producer/src/main/kotlin/io/github/projectmapk/sweep/xn/SwXnWideLeaf.kt +++ /dev/null @@ -1,6 +0,0 @@ -package io.github.projectmapk.sweep.xn - -// docs/test/ケース05-境界横断.md XMP-17 用: 基底より広い public 末端(public companion → 規則 1 で asEnumish は具体型を返す) -class SwXnWideLeaf(val v: Int) : SwXnWideBase { - companion object -} From 2275e65c6567511b7e5b0962c08a7e555ee99f30 Mon Sep 17 00:00:00 2001 From: wrongwrong Date: Sun, 2 Aug 2026 00:51:46 +0900 Subject: [PATCH 5/9] =?UTF-8?q?test:=20diag-fail=20=E3=82=92=E8=A8=BA?= =?UTF-8?q?=E6=96=AD=E3=82=B1=E3=83=BC=E3=82=B9=E5=8D=98=E4=BD=8D=E3=81=AE?= =?UTF-8?q?=E3=83=95=E3=82=A1=E3=82=A4=E3=83=AB=E3=81=B8=E5=86=8D=E7=B7=A8?= =?UTF-8?q?=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1 宣言 1 ファイルだった構成を 1 ファイル = 1 診断ケースへ集約する (148 -> 35 ファイル)。ファイル名は診断名とし、DiagSingleFailTest の file:line 照合は再編後の実測値へ書き換える。 同一ファイルへ複数宣言が同居するケースでは、言語診断も宣言単位の 分解能を保つためファイル内断片照合から行照合へ変更する。 分離を保つのは検証の成立条件となる配置のみとする。 - ScopePriv / ScopePrivUse: private トップレベルはファイルスコープ - Lc4Priv: 参照不能末端であることが別ファイル配置に依る - Mc1Si: ES 非発火をファイル単位で観測する Co-Authored-By: Claude Opus 5 --- .../projectmapk/gradle/DiagSingleFailTest.kt | 358 ++++++++++++------ .../projectmapk/diag/fail/AbstractToString.kt | 16 + .../io/github/projectmapk/diag/fail/Amb2.kt | 11 - .../io/github/projectmapk/diag/fail/Amb2C.kt | 4 - .../io/github/projectmapk/diag/fail/AmbA.kt | 4 - .../io/github/projectmapk/diag/fail/AmbB.kt | 4 - .../io/github/projectmapk/diag/fail/AmbSi.kt | 7 - .../projectmapk/diag/fail/AmbiguousKind.kt | 24 ++ .../io/github/projectmapk/diag/fail/AtAbs.kt | 6 - .../io/github/projectmapk/diag/fail/AtLeaf.kt | 5 - .../io/github/projectmapk/diag/fail/AtSi.kt | 7 - .../github/projectmapk/diag/fail/Clc2Host.kt | 6 - .../io/github/projectmapk/diag/fail/Clc2Si.kt | 7 - .../github/projectmapk/diag/fail/Clc3Host.kt | 6 - .../github/projectmapk/diag/fail/Clc3SiA.kt | 7 - .../github/projectmapk/diag/fail/Clc3SiB.kt | 7 - .../github/projectmapk/diag/fail/ClcHost.kt | 6 - .../io/github/projectmapk/diag/fail/ClcSi.kt | 7 - .../diag/fail/CompanionLeafConflict.kt | 35 ++ .../github/projectmapk/diag/fail/ElseInt.kt | 11 - .../projectmapk/diag/fail/ElseIntUse.kt | 7 - .../github/projectmapk/diag/fail/ElsePub.kt | 11 - .../projectmapk/diag/fail/ElsePubUse.kt | 6 - .../projectmapk/diag/fail/ElseRequired.kt | 31 ++ .../github/projectmapk/diag/fail/ExpLeaf.kt | 4 - .../io/github/projectmapk/diag/fail/Expose.kt | 6 - .../projectmapk/diag/fail/ExposeReturn.kt | 5 - .../fail/{ExpBase.kt => ExposedSuperClass.kt} | 3 + .../io/github/projectmapk/diag/fail/FarSi.kt | 3 +- .../github/projectmapk/diag/fail/FiAsLeaf.kt | 4 - .../github/projectmapk/diag/fail/FiAsOut.kt | 6 - .../io/github/projectmapk/diag/fail/FiCls.kt | 6 - .../io/github/projectmapk/diag/fail/FiLeaf.kt | 4 - .../io/github/projectmapk/diag/fail/FiMid.kt | 4 - .../io/github/projectmapk/diag/fail/FiOut.kt | 6 - .../io/github/projectmapk/diag/fail/FiSc.kt | 8 - .../github/projectmapk/diag/fail/FiScLeaf.kt | 4 - .../io/github/projectmapk/diag/fail/FiSi.kt | 7 - .../github/projectmapk/diag/fail/FiViaMid.kt | 4 - .../diag/fail/FinalMemberInherited.kt | 44 +++ .../diag/fail/{InnerHost.kt => InnerLeaf.kt} | 8 +- .../github/projectmapk/diag/fail/InnerSi.kt | 7 - .../diag/fail/KindTypeNotDenotable.kt | 21 + .../github/projectmapk/diag/fail/KnaxLeaf.kt | 6 - .../io/github/projectmapk/diag/fail/KnaxSi.kt | 7 - .../github/projectmapk/diag/fail/KtdLeaf.kt | 6 - .../io/github/projectmapk/diag/fail/KtdSi.kt | 7 - .../projectmapk/diag/fail/LabelAnnotation.kt | 50 +++ .../projectmapk/diag/fail/LabelClash.kt | 75 ++++ .../diag/fail/LanguageRuleBasis.kt | 22 ++ .../projectmapk/diag/fail/LblAliasClash.kt | 12 - .../github/projectmapk/diag/fail/LblBlank.kt | 10 - .../projectmapk/diag/fail/LblCaseClash.kt | 13 - .../projectmapk/diag/fail/LblTargets.kt | 20 - .../github/projectmapk/diag/fail/Lc2Host.kt | 6 - .../github/projectmapk/diag/fail/Lc2Outer.kt | 6 - .../io/github/projectmapk/diag/fail/Lc2Si.kt | 7 - .../github/projectmapk/diag/fail/Lc3Outer.kt | 6 - .../io/github/projectmapk/diag/fail/Lc3Si.kt | 9 - .../io/github/projectmapk/diag/fail/Lc4A.kt | 6 - .../io/github/projectmapk/diag/fail/Lc4B.kt | 6 - .../github/projectmapk/diag/fail/Lc4Priv.kt | 5 +- .../io/github/projectmapk/diag/fail/Lc4Si.kt | 7 - .../io/github/projectmapk/diag/fail/Lc5A.kt | 6 - .../io/github/projectmapk/diag/fail/Lc5B.kt | 6 - .../io/github/projectmapk/diag/fail/Lc5C.kt | 6 - .../io/github/projectmapk/diag/fail/Lc5Si.kt | 7 - .../github/projectmapk/diag/fail/LcOuter1.kt | 6 - .../github/projectmapk/diag/fail/LcOuter2.kt | 6 - .../io/github/projectmapk/diag/fail/LcSi.kt | 7 - .../diag/fail/ManualImplOutsideHierarchy.kt | 39 ++ .../diag/fail/ManualSupertypeMismatch.kt | 99 +++++ .../io/github/projectmapk/diag/fail/Mc1Si.kt | 6 +- .../io/github/projectmapk/diag/fail/Mc2Si.kt | 19 - .../io/github/projectmapk/diag/fail/Mc3Si.kt | 16 - .../github/projectmapk/diag/fail/Mc4Enum.kt | 16 - .../github/projectmapk/diag/fail/Mc5Leaf.kt | 8 - .../io/github/projectmapk/diag/fail/Mc5Si.kt | 7 - .../io/github/projectmapk/diag/fail/Mc6Si.kt | 13 - .../github/projectmapk/diag/fail/Mc7Leaf.kt | 4 - .../github/projectmapk/diag/fail/Mc7Named.kt | 6 - .../io/github/projectmapk/diag/fail/Mc7Si.kt | 7 - .../github/projectmapk/diag/fail/Mc8Leaf.kt | 6 - .../github/projectmapk/diag/fail/Mc8Manual.kt | 8 - .../io/github/projectmapk/diag/fail/Mc8Si.kt | 9 - .../github/projectmapk/diag/fail/Mc9Leaf.kt | 4 - .../github/projectmapk/diag/fail/Mc9Prov.kt | 8 - .../io/github/projectmapk/diag/fail/Mc9Si.kt | 7 - .../projectmapk/diag/fail/MemberConflict.kt | 107 ++++++ .../io/github/projectmapk/diag/fail/MiMid.kt | 13 - .../github/projectmapk/diag/fail/MiRogue.kt | 11 - .../projectmapk/diag/fail/MiRogueCls.kt | 13 - .../io/github/projectmapk/diag/fail/MiSi.kt | 9 - .../io/github/projectmapk/diag/fail/Ms1Si.kt | 10 - .../github/projectmapk/diag/fail/Ms2MyBase.kt | 6 - .../io/github/projectmapk/diag/fail/Ms2Si.kt | 9 - .../github/projectmapk/diag/fail/Ms3Kind.kt | 6 - .../io/github/projectmapk/diag/fail/Ms3Si.kt | 10 - .../io/github/projectmapk/diag/fail/Ms4K.kt | 6 - .../io/github/projectmapk/diag/fail/Ms4Si.kt | 10 - .../io/github/projectmapk/diag/fail/Ms5K.kt | 6 - .../io/github/projectmapk/diag/fail/Ms5Si.kt | 10 - .../io/github/projectmapk/diag/fail/Ms6K.kt | 6 - .../io/github/projectmapk/diag/fail/Ms6Si.kt | 11 - .../io/github/projectmapk/diag/fail/Ms7K.kt | 6 - .../io/github/projectmapk/diag/fail/Ms7Si.kt | 11 - .../io/github/projectmapk/diag/fail/Ms8K.kt | 8 - .../io/github/projectmapk/diag/fail/Ms8Si.kt | 10 - .../io/github/projectmapk/diag/fail/Ms9K.kt | 5 - .../io/github/projectmapk/diag/fail/Ms9Si.kt | 11 - .../io/github/projectmapk/diag/fail/MsLeaf.kt | 8 - .../github/projectmapk/diag/fail/MsLeafSi.kt | 7 - .../github/projectmapk/diag/fail/MsWrong.kt | 6 - .../io/github/projectmapk/diag/fail/MultA.kt | 9 - .../io/github/projectmapk/diag/fail/MultB.kt | 9 - .../github/projectmapk/diag/fail/MultCross.kt | 4 - .../github/projectmapk/diag/fail/MultMid.kt | 4 - .../projectmapk/diag/fail/MultMidLeaf.kt | 4 - .../projectmapk/diag/fail/MultNested.kt | 10 - .../projectmapk/diag/fail/MultNestedMid.kt | 13 - .../diag/fail/MultipleHierarchies.kt | 25 ++ .../diag/fail/NestedInHierarchy.kt | 22 ++ .../github/projectmapk/diag/fail/NotSealed.kt | 50 +++ .../projectmapk/diag/fail/NsAbstractClass.kt | 7 - .../projectmapk/diag/fail/NsAnnotation.kt | 7 - .../projectmapk/diag/fail/NsDataClass.kt | 7 - .../projectmapk/diag/fail/NsDataObject.kt | 7 - .../io/github/projectmapk/diag/fail/NsEnum.kt | 7 - .../projectmapk/diag/fail/NsFinalClass.kt | 7 - .../projectmapk/diag/fail/NsFunInterface.kt | 9 - .../github/projectmapk/diag/fail/NsInner.kt | 9 - .../projectmapk/diag/fail/NsInterface.kt | 7 - .../github/projectmapk/diag/fail/NsObject.kt | 7 - .../projectmapk/diag/fail/NsOpenClass.kt | 7 - .../projectmapk/diag/fail/NsValueClass.kt | 8 - .../io/github/projectmapk/diag/fail/NulArg.kt | 10 - .../github/projectmapk/diag/fail/OmitHost.kt | 7 - .../io/github/projectmapk/diag/fail/OmitSi.kt | 6 + .../github/projectmapk/diag/fail/PrivHost.kt | 13 - .../projectmapk/diag/fail/PrivHostUse.kt | 4 - .../github/projectmapk/diag/fail/ProtHost.kt | 11 - .../projectmapk/diag/fail/ProtHostUse.kt | 4 - .../diag/fail/ReservedNameClash.kt | 26 ++ .../io/github/projectmapk/diag/fail/Rn1.kt | 9 - .../io/github/projectmapk/diag/fail/Rn2.kt | 9 - .../io/github/projectmapk/diag/fail/Rn3.kt | 9 - .../io/github/projectmapk/diag/fail/Rn4.kt | 9 - .../io/github/projectmapk/diag/fail/Sc.kt | 9 - .../io/github/projectmapk/diag/fail/ScAnn.kt | 4 - .../io/github/projectmapk/diag/fail/ScEnum.kt | 6 - .../github/projectmapk/diag/fail/ScIface.kt | 4 - .../github/projectmapk/diag/fail/ScValue.kt | 5 - .../github/projectmapk/diag/fail/ScopePriv.kt | 3 +- .../projectmapk/diag/fail/ScopePrivUse.kt | 3 +- .../diag/fail/SealedClassLeafKinds.kt | 26 ++ .../io/github/projectmapk/diag/fail/TfA.kt | 9 - .../io/github/projectmapk/diag/fail/TfB.kt | 9 - .../github/projectmapk/diag/fail/TfCross.kt | 14 + .../fail/{Proj.kt => TypeArgumentBounds.kt} | 10 +- .../projectmapk/diag/fail/VisibilityScope.kt | 31 ++ .../github/projectmapk/diag/fail/WeakBase.kt | 6 - .../github/projectmapk/diag/fail/WeakImpl.kt | 7 - 162 files changed, 1038 insertions(+), 1138 deletions(-) create mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/AbstractToString.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Amb2.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Amb2C.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/AmbA.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/AmbB.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/AmbSi.kt create mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/AmbiguousKind.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/AtAbs.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/AtLeaf.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/AtSi.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Clc2Host.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Clc2Si.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Clc3Host.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Clc3SiA.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Clc3SiB.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/ClcHost.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/ClcSi.kt create mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/CompanionLeafConflict.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/ElseInt.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/ElseIntUse.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/ElsePub.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/ElsePubUse.kt create mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/ElseRequired.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/ExpLeaf.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Expose.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/ExposeReturn.kt rename integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/{ExpBase.kt => ExposedSuperClass.kt} (64%) delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/FiAsLeaf.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/FiAsOut.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/FiCls.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/FiLeaf.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/FiMid.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/FiOut.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/FiSc.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/FiScLeaf.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/FiSi.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/FiViaMid.kt create mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/FinalMemberInherited.kt rename integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/{InnerHost.kt => InnerLeaf.kt} (55%) delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/InnerSi.kt create mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/KindTypeNotDenotable.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/KnaxLeaf.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/KnaxSi.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/KtdLeaf.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/KtdSi.kt create mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/LabelAnnotation.kt create mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/LabelClash.kt create mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/LanguageRuleBasis.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/LblAliasClash.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/LblBlank.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/LblCaseClash.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/LblTargets.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Lc2Host.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Lc2Outer.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Lc2Si.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Lc3Outer.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Lc3Si.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Lc4A.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Lc4B.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Lc4Si.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Lc5A.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Lc5B.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Lc5C.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Lc5Si.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/LcOuter1.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/LcOuter2.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/LcSi.kt create mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/ManualImplOutsideHierarchy.kt create mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/ManualSupertypeMismatch.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Mc2Si.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Mc3Si.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Mc4Enum.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Mc5Leaf.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Mc5Si.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Mc6Si.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Mc7Leaf.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Mc7Named.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Mc7Si.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Mc8Leaf.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Mc8Manual.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Mc8Si.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Mc9Leaf.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Mc9Prov.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Mc9Si.kt create mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/MemberConflict.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/MiMid.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/MiRogue.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/MiRogueCls.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/MiSi.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Ms1Si.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Ms2MyBase.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Ms2Si.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Ms3Kind.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Ms3Si.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Ms4K.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Ms4Si.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Ms5K.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Ms5Si.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Ms6K.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Ms6Si.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Ms7K.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Ms7Si.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Ms8K.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Ms8Si.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Ms9K.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Ms9Si.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/MsLeaf.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/MsLeafSi.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/MsWrong.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/MultA.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/MultB.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/MultCross.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/MultMid.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/MultMidLeaf.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/MultNested.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/MultNestedMid.kt create mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/MultipleHierarchies.kt create mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/NestedInHierarchy.kt create mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/NotSealed.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/NsAbstractClass.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/NsAnnotation.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/NsDataClass.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/NsDataObject.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/NsEnum.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/NsFinalClass.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/NsFunInterface.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/NsInner.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/NsInterface.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/NsObject.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/NsOpenClass.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/NsValueClass.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/NulArg.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/OmitHost.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/PrivHost.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/PrivHostUse.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/ProtHost.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/ProtHostUse.kt create mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/ReservedNameClash.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Rn1.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Rn2.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Rn3.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Rn4.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Sc.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/ScAnn.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/ScEnum.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/ScIface.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/ScValue.kt create mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/SealedClassLeafKinds.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/TfA.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/TfB.kt rename integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/{Proj.kt => TypeArgumentBounds.kt} (51%) create mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/VisibilityScope.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/WeakBase.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/WeakImpl.kt diff --git a/integration-test/gradle-integration/src/test/kotlin/io/github/projectmapk/gradle/DiagSingleFailTest.kt b/integration-test/gradle-integration/src/test/kotlin/io/github/projectmapk/gradle/DiagSingleFailTest.kt index 364c41c..de61fc1 100644 --- a/integration-test/gradle-integration/src/test/kotlin/io/github/projectmapk/gradle/DiagSingleFailTest.kt +++ b/integration-test/gradle-integration/src/test/kotlin/io/github/projectmapk/gradle/DiagSingleFailTest.kt @@ -7,7 +7,8 @@ import kotlin.test.Test // 単一モジュールの発火系・言語委譲を diag-fail フィクスチャの 1 buildAndFail で全件検証する // (docs/test/ケース04-診断.md の DIA 発火ケース群・docs/test/フィクスチャ構成.md §3)。 -// プラグイン診断は file:line 照合、言語診断は報告行が言語管轄のためファイル内断片照合で観測する。 +// フィクスチャは 1 ファイル = 1 診断ケースであり、file:line 照合の行はその配置に対する実測値である。 +// 同一ファイルへ複数宣言が同居するケースでは、言語診断も宣言単位の分解能を保つため行照合を用いる。 // DIA-71 のみ diag-test-source フィクスチャの追加ビルド(compileTestKotlin)を使う class DiagSingleFailTest : DiagTestBase() { private fun fail(): String = failOutput("diag-fail", "compileKotlin") @@ -17,23 +18,9 @@ class DiagSingleFailTest : DiagTestBase() { fun notSealedFiresForEveryClassifierKind() { val output = fail() // 非 object 宣言はアノテーション行・object 宣言は object キーワード行に報告される - listOf( - "NsEnum.kt" to 6, - "NsAnnotation.kt" to 6, - "NsObject.kt" to 7, - "NsDataObject.kt" to 7, - "NsOpenClass.kt" to 6, - "NsAbstractClass.kt" to 6, - "NsFinalClass.kt" to 6, - "NsDataClass.kt" to 6, - "NsValueClass.kt" to 6, - "NsInterface.kt" to 6, - "NsFunInterface.kt" to 6, - "NsInner.kt" to 7, - ) - .forEach { (file, line) -> - assertDiagnosticAt(output, file, line, DiagFragments.NOT_SEALED) - } + listOf(8, 11, 15, 18, 20, 23, 27, 30, 34, 38, 41, 48).forEach { line -> + assertDiagnosticAt(output, "NotSealed.kt", line, DiagFragments.NOT_SEALED) + } } // docs/test/ケース04-診断.md DIA-02: 非 sealed 末端への付与は NS と NESTED が併発する @@ -72,8 +59,8 @@ class DiagSingleFailTest : DiagTestBase() { fun siblingHierarchyCrossingIsReported() { assertDiagnosticAt( fail(), - "MultCross.kt", - 4, + "MultipleHierarchies.kt", + 19, DiagFragments.MULTIPLE_HIERARCHIES, "MultA", "MultB", @@ -84,8 +71,8 @@ class DiagSingleFailTest : DiagTestBase() { @Test fun intermediateHierarchyCrossingReportsBothParticipants() { val output = fail() - assertDiagnosticAt(output, "MultMid.kt", 4, DiagFragments.MULTIPLE_HIERARCHIES) - assertDiagnosticAt(output, "MultMidLeaf.kt", 4, DiagFragments.MULTIPLE_HIERARCHIES) + assertDiagnosticAt(output, "MultipleHierarchies.kt", 22, DiagFragments.MULTIPLE_HIERARCHIES) + assertDiagnosticAt(output, "MultipleHierarchies.kt", 25, DiagFragments.MULTIPLE_HIERARCHIES) } // docs/test/ケース04-診断.md DIA-15: 階層メンバー(末端・中間)自身への @Enumize は NESTED。 @@ -95,36 +82,48 @@ class DiagSingleFailTest : DiagTestBase() { val output = fail() assertDiagnosticAt( output, - "MultNested.kt", - 9, + "NestedInHierarchy.kt", + 11, DiagFragments.NESTED_IN_HIERARCHY, "MultNested", ) - assertDiagnosticAt(output, "MultNestedMid.kt", 9, DiagFragments.NESTED_IN_HIERARCHY) - assertDiagnosticAt(output, "MultNested.kt", 9, DiagFragments.MANUAL_SUPERTYPE_MISMATCH) + assertDiagnosticAt(output, "NestedInHierarchy.kt", 18, DiagFragments.NESTED_IN_HIERARCHY) + assertDiagnosticAt( + output, + "NestedInHierarchy.kt", + 11, + DiagFragments.MANUAL_SUPERTYPE_MISMATCH, + ) } // docs/test/ケース04-診断.md DIA-15: @Enumize 付き中間の配下末端には MH(上向き探索は 2 基底へ到達) @Test fun leafBelowAnnotatedIntermediateReportsMultipleHierarchies() { - assertDiagnosticAt(fail(), "MultNestedMid.kt", 11, DiagFragments.MULTIPLE_HIERARCHIES) + assertDiagnosticAt(fail(), "NestedInHierarchy.kt", 20, DiagFragments.MULTIPLE_HIERARCHIES) } // docs/test/ケース04-診断.md DIA-17: 末端サブタイプ + 基底直接実装形・2 末端 interface 実装形の AK @Test fun doubleLeafMembershipIsAmbiguous() { val output = fail() - assertDiagnosticAt(output, "AmbB.kt", 4, DiagFragments.AMBIGUOUS_KIND, "AmbA") - assertDiagnosticAt(output, "Amb2C.kt", 4, DiagFragments.AMBIGUOUS_KIND, "LeafA", "LeafB") + assertDiagnosticAt(output, "AmbiguousKind.kt", 14, DiagFragments.AMBIGUOUS_KIND, "AmbA") + assertDiagnosticAt( + output, + "AmbiguousKind.kt", + 24, + DiagFragments.AMBIGUOUS_KIND, + "LeafA", + "LeafB", + ) } // docs/test/ケース04-診断.md DIA-23: inner 末端は IL 単独(手動メンバー併置でも後続検査スキップ) @Test fun innerLeafIsReportedAlone() { val output = fail() - assertDiagnosticAt(output, "InnerHost.kt", 6, DiagFragments.INNER_LEAF) - assertFragmentAbsentAt(output, "InnerHost.kt", DiagFragments.MEMBER_CONFLICT) - assertFragmentAbsentAt(output, "InnerHost.kt", DiagFragments.KIND_TYPE_NOT_DENOTABLE) + assertDiagnosticAt(output, "InnerLeaf.kt", 12, DiagFragments.INNER_LEAF) + assertFragmentAbsentAt(output, "InnerLeaf.kt", DiagFragments.MEMBER_CONFLICT) + assertFragmentAbsentAt(output, "InnerLeaf.kt", DiagFragments.KIND_TYPE_NOT_DENOTABLE) } // docs/test/ケース04-診断.md DIA-25: 規則 3(広い末端 + internal / private companion)で KTD @@ -133,54 +132,82 @@ class DiagSingleFailTest : DiagTestBase() { val output = fail() assertDiagnosticAt( output, - "KtdLeaf.kt", - 4, + "KindTypeNotDenotable.kt", + 11, DiagFragments.KIND_TYPE_NOT_DENOTABLE, "KtdLeaf", ) - assertDiagnosticAt(output, "KnaxLeaf.kt", 4, DiagFragments.KIND_TYPE_NOT_DENOTABLE) + assertDiagnosticAt( + output, + "KindTypeNotDenotable.kt", + 19, + DiagFragments.KIND_TYPE_NOT_DENOTABLE, + ) } // docs/test/ケース04-診断.md DIA-27: sealed class 階層の広い末端は言語 EXPOSED_SUPER_CLASS・KTD 不在 @Test fun sealedClassWiderLeafFailsWithExposureErrorOnly() { val output = fail() - assertDiagnosticAt(output, "ExpLeaf.kt", 4, DiagFragments.LANG_EXPOSED_SUPER_CLASS) - assertFragmentAbsentAt(output, "ExpLeaf.kt", DiagFragments.KIND_TYPE_NOT_DENOTABLE) + assertDiagnosticAt( + output, + "ExposedSuperClass.kt", + 10, + DiagFragments.LANG_EXPOSED_SUPER_CLASS, + ) + assertFragmentAbsentAt( + output, + "ExposedSuperClass.kt", + DiagFragments.KIND_TYPE_NOT_DENOTABLE, + ) } // docs/test/ケース04-診断.md DIA-28: 可視性スコープ違反と else 必須の位置依存 2 変種は言語エラーのみ @Test fun visibilityScopeViolationsFailWithoutPluginDiagnostics() { val output = fail() - listOf("ScopePrivUse.kt", "PrivHostUse.kt", "ProtHostUse.kt").forEach { file -> - assertDiagnosticInFile(output, file, "e: ") - } - assertDiagnosticInFile(output, "ElseIntUse.kt", DiagFragments.LANG_WHEN_NOT_EXHAUSTIVE) - assertDiagnosticInFile(output, "ElsePubUse.kt", DiagFragments.LANG_WHEN_NOT_EXHAUSTIVE) + assertDiagnosticInFile(output, "ScopePrivUse.kt", "e: ") + // private / protected ネスト基底への外側スコープからの参照(同居 2 宣言を行で分解する) + assertDiagnosticAt(output, "VisibilityScope.kt", 20, "e: ") + assertDiagnosticAt(output, "VisibilityScope.kt", 31, "e: ") + assertDiagnosticAt(output, "ElseRequired.kt", 17, DiagFragments.LANG_WHEN_NOT_EXHAUSTIVE) + assertDiagnosticAt(output, "ElseRequired.kt", 29, DiagFragments.LANG_WHEN_NOT_EXHAUSTIVE) } // docs/test/ケース04-診断.md DIA-63: 生成物 internal 化不成立と規則 2 フォールバックの言語根拠 @Test fun languageFactsBehindVisibilityRules() { val output = fail() - assertDiagnosticInFile(output, "WeakImpl.kt", DiagFragments.LANG_CANNOT_WEAKEN_ACCESS) - assertDiagnosticInFile(output, "ExposeReturn.kt", DiagFragments.LANG_EXPOSED_RETURN_TYPE) + assertDiagnosticInFile( + output, + "LanguageRuleBasis.kt", + DiagFragments.LANG_CANNOT_WEAKEN_ACCESS, + ) + assertDiagnosticInFile( + output, + "LanguageRuleBasis.kt", + DiagFragments.LANG_EXPOSED_RETURN_TYPE, + ) } // docs/test/ケース04-診断.md DIA-29: companion 末端兼務は階層不問で CLC(報告位置 = companion) @Test fun companionAsLeafConflictsRegardlessOfHierarchy() { val output = fail() - assertDiagnosticAt(output, "ClcHost.kt", 5, DiagFragments.COMPANION_LEAF_CONFLICT) - assertDiagnosticAt(output, "Clc2Host.kt", 5, DiagFragments.COMPANION_LEAF_CONFLICT) - assertDiagnosticAt(output, "Clc3Host.kt", 5, DiagFragments.COMPANION_LEAF_CONFLICT) + listOf(13, 21, 34).forEach { line -> + assertDiagnosticAt( + output, + "CompanionLeafConflict.kt", + line, + DiagFragments.COMPANION_LEAF_CONFLICT, + ) + } } // docs/test/ケース04-診断.md DIA-33: 手動 companion の生成対象メンバー省略は生成が充足しエラー無し @Test fun omittedManualMembersAreFilledByGeneration() { - assertFragmentAbsentAt(fail(), "OmitHost.kt", "e: ") + assertFragmentAbsentAt(fail(), "OmitSi.kt", "e: ") } // docs/test/ケース04-診断.md DIA-34: 同一単純名の末端(enum 含む)は両当事者へ LC + 相手 FQN・ @@ -188,12 +215,12 @@ class DiagSingleFailTest : DiagTestBase() { @Test fun sameLabelLeavesClashOnBothParticipants() { val output = fail() - assertDiagnosticAt(output, "LcOuter1.kt", 5, DiagFragments.LABEL_CLASH, "LcOuter2") - assertDiagnosticAt(output, "LcOuter2.kt", 5, DiagFragments.LABEL_CLASH, "LcOuter1") - assertDiagnosticAt(output, "Lc3Si.kt", 8, DiagFragments.LABEL_CLASH, "Lc3Outer") - assertDiagnosticAt(output, "Lc3Outer.kt", 5, DiagFragments.LABEL_CLASH) - assertDiagnosticAt(output, "Lc4A.kt", 5, DiagFragments.LABEL_CLASH, "Lc4B") - assertDiagnosticAt(output, "Lc4B.kt", 5, DiagFragments.LABEL_CLASH, "Lc4A") + assertDiagnosticAt(output, "LabelClash.kt", 15, DiagFragments.LABEL_CLASH, "LcOuter2") + assertDiagnosticAt(output, "LabelClash.kt", 19, DiagFragments.LABEL_CLASH, "LcOuter1") + assertDiagnosticAt(output, "LabelClash.kt", 40, DiagFragments.LABEL_CLASH, "Lc3Outer") + assertDiagnosticAt(output, "LabelClash.kt", 44, DiagFragments.LABEL_CLASH) + assertDiagnosticAt(output, "LabelClash.kt", 53, DiagFragments.LABEL_CLASH, "Lc4B") + assertDiagnosticAt(output, "LabelClash.kt", 57, DiagFragments.LABEL_CLASH, "Lc4A") assertFragmentAbsentAt(output, "Lc4Priv.kt", "e: ") } @@ -201,17 +228,17 @@ class DiagSingleFailTest : DiagTestBase() { @Test fun tripleLabelClashListsAllPeers() { val output = fail() - assertDiagnosticAt(output, "Lc5A.kt", 5, DiagFragments.LABEL_CLASH, "Lc5B", "Lc5C") - assertDiagnosticAt(output, "Lc5B.kt", 5, DiagFragments.LABEL_CLASH, "Lc5A", "Lc5C") - assertDiagnosticAt(output, "Lc5C.kt", 5, DiagFragments.LABEL_CLASH, "Lc5A", "Lc5B") + assertDiagnosticAt(output, "LabelClash.kt", 66, DiagFragments.LABEL_CLASH, "Lc5B", "Lc5C") + assertDiagnosticAt(output, "LabelClash.kt", 70, DiagFragments.LABEL_CLASH, "Lc5A", "Lc5C") + assertDiagnosticAt(output, "LabelClash.kt", 74, DiagFragments.LABEL_CLASH, "Lc5A", "Lc5B") } // docs/test/ケース04-診断.md DIA-35: companion 末端の宣言名 = label が他末端の単純名と衝突する @Test fun companionLeafDeclarationNameClashes() { val output = fail() - assertDiagnosticAt(output, "Lc2Host.kt", 5, DiagFragments.LABEL_CLASH, "Foo2") - assertDiagnosticAt(output, "Lc2Outer.kt", 5, DiagFragments.LABEL_CLASH) + assertDiagnosticAt(output, "LabelClash.kt", 29, DiagFragments.LABEL_CLASH, "Foo2") + assertDiagnosticAt(output, "LabelClash.kt", 33, DiagFragments.LABEL_CLASH) } // docs/test/ケース04-診断.md DIA-40: 末端 object の label / enumizedClass / asEnumish 手動宣言で @@ -219,9 +246,9 @@ class DiagSingleFailTest : DiagTestBase() { @Test fun manualMembersOnLeafObjectConflict() { val output = fail() - assertDiagnosticAt(output, "Mc1Si.kt", 11, DiagFragments.MEMBER_CONFLICT, "label") - assertDiagnosticAt(output, "Mc1Si.kt", 13, DiagFragments.MEMBER_CONFLICT, "enumizedClass") - assertDiagnosticAt(output, "Mc1Si.kt", 15, DiagFragments.MEMBER_CONFLICT, "asEnumish") + assertDiagnosticAt(output, "Mc1Si.kt", 13, DiagFragments.MEMBER_CONFLICT, "label") + assertDiagnosticAt(output, "Mc1Si.kt", 15, DiagFragments.MEMBER_CONFLICT, "enumizedClass") + assertDiagnosticAt(output, "Mc1Si.kt", 17, DiagFragments.MEMBER_CONFLICT, "asEnumish") assertFragmentAbsentAt(output, "Mc1Si.kt", DiagFragments.EXTENSION_SHADOWED) } @@ -230,26 +257,51 @@ class DiagSingleFailTest : DiagTestBase() { @Test fun memberKindCrossDeclarationsAlsoConflict() { val output = fail() - assertDiagnosticAt(output, "Mc2Si.kt", 9, DiagFragments.MEMBER_CONFLICT, "label") - assertDiagnosticAt(output, "Mc2Si.kt", 12, DiagFragments.MEMBER_CONFLICT, "asEnumish") - assertDiagnosticAt(output, "Mc2Si.kt", 17, DiagFragments.MEMBER_CONFLICT, "asEnumish") + assertDiagnosticAt(output, "MemberConflict.kt", 16, DiagFragments.MEMBER_CONFLICT, "label") + assertDiagnosticAt( + output, + "MemberConflict.kt", + 19, + DiagFragments.MEMBER_CONFLICT, + "asEnumish", + ) + assertDiagnosticAt( + output, + "MemberConflict.kt", + 24, + DiagFragments.MEMBER_CONFLICT, + "asEnumish", + ) } // docs/test/ケース04-診断.md DIA-41: 手動 kind companion(既定名・enum companion)の手動宣言で MC @Test fun manualMembersOnKindCompanionConflict() { val output = fail() - assertDiagnosticAt(output, "Mc3Si.kt", 11, DiagFragments.MEMBER_CONFLICT, "label") - assertDiagnosticAt(output, "Mc3Si.kt", 13, DiagFragments.MEMBER_CONFLICT, "enumizedClass") - assertDiagnosticAt(output, "Mc4Enum.kt", 13, DiagFragments.MEMBER_CONFLICT, "label") + assertDiagnosticAt(output, "MemberConflict.kt", 34, DiagFragments.MEMBER_CONFLICT, "label") + assertDiagnosticAt( + output, + "MemberConflict.kt", + 36, + DiagFragments.MEMBER_CONFLICT, + "enumizedClass", + ) + assertDiagnosticAt(output, "MemberConflict.kt", 50, DiagFragments.MEMBER_CONFLICT, "label") } // docs/test/ケース04-診断.md DIA-42: 末端 class / interface の asEnumish 手動宣言で MC @Test fun manualAsEnumishOnLeafClassConflicts() { val output = fail() - assertDiagnosticAt(output, "Mc5Leaf.kt", 7, DiagFragments.MEMBER_CONFLICT, "asEnumish") - assertDiagnosticAt(output, "Mc6Si.kt", 9, DiagFragments.MEMBER_CONFLICT, "asEnumish") + listOf(63, 69).forEach { line -> + assertDiagnosticAt( + output, + "MemberConflict.kt", + line, + DiagFragments.MEMBER_CONFLICT, + "asEnumish", + ) + } } // docs/test/ケース04-診断.md DIA-43: 階層外 interface からの同名具象 default 継承で MC @@ -257,9 +309,21 @@ class DiagSingleFailTest : DiagTestBase() { @Test fun inheritedDefaultMemberConflicts() { val output = fail() - assertDiagnosticAt(output, "Mc7Leaf.kt", 4, DiagFragments.MEMBER_CONFLICT, "label") - assertDiagnosticAt(output, "Mc8Leaf.kt", 4, DiagFragments.MEMBER_CONFLICT, "asEnumish") - assertDiagnosticAt(output, "Mc9Leaf.kt", 4, DiagFragments.MEMBER_CONFLICT, "enumizedClass") + assertDiagnosticAt(output, "MemberConflict.kt", 84, DiagFragments.MEMBER_CONFLICT, "label") + assertDiagnosticAt( + output, + "MemberConflict.kt", + 96, + DiagFragments.MEMBER_CONFLICT, + "asEnumish", + ) + assertDiagnosticAt( + output, + "MemberConflict.kt", + 107, + DiagFragments.MEMBER_CONFLICT, + "enumizedClass", + ) } // docs/test/ケース04-診断.md DIA-70: クラス supertype の final 具象継承で MC — 階層外の直接継承・ @@ -268,11 +332,22 @@ class DiagSingleFailTest : DiagTestBase() { @Test fun inheritedFinalClassMembersConflict() { val output = fail() - assertDiagnosticAt(output, "FiLeaf.kt", 4, DiagFragments.MEMBER_CONFLICT, "label") - assertDiagnosticAt(output, "FiViaMid.kt", 4, DiagFragments.MEMBER_CONFLICT, "label") - assertDiagnosticAt(output, "FiAsLeaf.kt", 4, DiagFragments.MEMBER_CONFLICT, "asEnumish") - assertDiagnosticAt(output, "FiScLeaf.kt", 4, DiagFragments.MEMBER_CONFLICT, "label") - assertDiagnosticAt(output, "FiCls.kt", 5, DiagFragments.MEMBER_CONFLICT, "label") + listOf(21, 24, 44, 28).forEach { line -> + assertDiagnosticAt( + output, + "FinalMemberInherited.kt", + line, + DiagFragments.MEMBER_CONFLICT, + "label", + ) + } + assertDiagnosticAt( + output, + "FinalMemberInherited.kt", + 36, + DiagFragments.MEMBER_CONFLICT, + "asEnumish", + ) } // docs/test/ケース04-診断.md DIA-62: toString 抽象再宣言は言語 abstract 未実装のみ・MC 不在 @@ -281,10 +356,10 @@ class DiagSingleFailTest : DiagTestBase() { val output = fail() assertDiagnosticInFile( output, - "AtLeaf.kt", + "AbstractToString.kt", DiagFragments.LANG_ABSTRACT_MEMBER_NOT_IMPLEMENTED, ) - assertFragmentAbsentAt(output, "AtLeaf.kt", DiagFragments.MEMBER_CONFLICT) + assertFragmentAbsentAt(output, "AbstractToString.kt", DiagFragments.MEMBER_CONFLICT) } // docs/test/ケース04-診断.md DIA-46: 基底の Enumized<別型> 直接継承で MSM(報告位置 = supertype ref) @@ -292,8 +367,8 @@ class DiagSingleFailTest : DiagTestBase() { fun directEnumizedMismatchIsReported() { assertDiagnosticAt( fail(), - "Ms1Si.kt", - 8, + "ManualSupertypeMismatch.kt", + 17, DiagFragments.MANUAL_SUPERTYPE_MISMATCH, "MsWrong", ) @@ -302,13 +377,23 @@ class DiagSingleFailTest : DiagTestBase() { // docs/test/ケース04-診断.md DIA-47: 自作基底 interface 経由(supertypeClosure)の不一致でも MSM @Test fun indirectEnumizedMismatchIsReported() { - assertDiagnosticAt(fail(), "Ms2Si.kt", 6, DiagFragments.MANUAL_SUPERTYPE_MISMATCH) + assertDiagnosticAt( + fail(), + "ManualSupertypeMismatch.kt", + 25, + DiagFragments.MANUAL_SUPERTYPE_MISMATCH, + ) } // docs/test/ケース04-診断.md DIA-48: 階層メンバー(末端)の Enumized<別型> でも MSM @Test fun leafSideEnumizedMismatchIsReported() { - assertDiagnosticAt(fail(), "MsLeaf.kt", 6, DiagFragments.MANUAL_SUPERTYPE_MISMATCH) + assertDiagnosticAt( + fail(), + "ManualSupertypeMismatch.kt", + 35, + DiagFragments.MANUAL_SUPERTYPE_MISMATCH, + ) } // docs/test/ケース04-診断.md DIA-49: E-1 適格 K も非適格 K 6 亜種も v1 は一律 MSM @@ -316,25 +401,22 @@ class DiagSingleFailTest : DiagTestBase() { @Test fun customKindMismatchesInV1() { val output = fail() - listOf( - "Ms3Si.kt" to 8, - "Ms4Si.kt" to 8, - "Ms5Si.kt" to 8, - "Ms6Si.kt" to 9, - "Ms7Si.kt" to 9, - "Ms8Si.kt" to 8, + listOf(45, 53, 61, 70, 78, 88).forEach { line -> + assertDiagnosticAt( + output, + "ManualSupertypeMismatch.kt", + line, + DiagFragments.MANUAL_SUPERTYPE_MISMATCH, ) - .forEach { (file, line) -> - assertDiagnosticAt(output, file, line, DiagFragments.MANUAL_SUPERTYPE_MISMATCH) - } - assertDiagnosticInFile(output, "Ms9Si.kt", "e: ") + } + assertDiagnosticAt(output, "ManualSupertypeMismatch.kt", 97, "e: ") } // docs/test/ケース04-診断.md DIA-50: 他階層 Enumish の Enumized 直接実装は MSM であって MH でない @Test fun crossHierarchyEnumizedIsMismatchNotMultipleHierarchies() { val output = fail() - assertDiagnosticAt(output, "TfCross.kt", 6, DiagFragments.MANUAL_SUPERTYPE_MISMATCH) + assertDiagnosticAt(output, "TfCross.kt", 20, DiagFragments.MANUAL_SUPERTYPE_MISMATCH) assertFragmentAbsentAt(output, "TfCross.kt", DiagFragments.MULTIPLE_HIERARCHIES) } @@ -342,18 +424,34 @@ class DiagSingleFailTest : DiagTestBase() { @Test fun projectionAndNullableArgumentsFailInLanguage() { val output = fail() - assertDiagnosticInFile(output, "Proj.kt", DiagFragments.LANG_PROJECTION_IN_ARGUMENT) - assertDiagnosticInFile(output, "NulArg.kt", DiagFragments.LANG_UPPER_BOUND_VIOLATED) - assertFragmentAbsentAt(output, "Proj.kt", DiagFragments.MANUAL_SUPERTYPE_MISMATCH) - assertFragmentAbsentAt(output, "NulArg.kt", DiagFragments.MANUAL_SUPERTYPE_MISMATCH) + assertDiagnosticInFile( + output, + "TypeArgumentBounds.kt", + DiagFragments.LANG_PROJECTION_IN_ARGUMENT, + ) + assertDiagnosticInFile( + output, + "TypeArgumentBounds.kt", + DiagFragments.LANG_UPPER_BOUND_VIOLATED, + ) + assertFragmentAbsentAt( + output, + "TypeArgumentBounds.kt", + DiagFragments.MANUAL_SUPERTYPE_MISMATCH, + ) } // docs/test/ケース04-診断.md DIA-54: 既存ネスト Enumish(class / object / interface / 末端兼用)で RNC @Test fun existingNestedEnumishClashes() { val output = fail() - listOf("Rn1.kt", "Rn2.kt", "Rn3.kt", "Rn4.kt").forEach { file -> - assertDiagnosticAt(output, file, 8, DiagFragments.RESERVED_NAME_CLASH) + listOf(10, 15, 20, 25).forEach { line -> + assertDiagnosticAt( + output, + "ReservedNameClash.kt", + line, + DiagFragments.RESERVED_NAME_CLASH, + ) } } @@ -364,13 +462,23 @@ class DiagSingleFailTest : DiagTestBase() { val output = fail() assertDiagnosticAt( output, - "MiRogue.kt", - 7, + "ManualImplOutsideHierarchy.kt", + 17, DiagFragments.MANUAL_IMPL_OUTSIDE_HIERARCHY, "MiSi", ) - assertDiagnosticAt(output, "MiRogueCls.kt", 7, DiagFragments.MANUAL_IMPL_OUTSIDE_HIERARCHY) - assertDiagnosticAt(output, "MiMid.kt", 8, DiagFragments.MANUAL_IMPL_OUTSIDE_HIERARCHY) + assertDiagnosticAt( + output, + "ManualImplOutsideHierarchy.kt", + 24, + DiagFragments.MANUAL_IMPL_OUTSIDE_HIERARCHY, + ) + assertDiagnosticAt( + output, + "ManualImplOutsideHierarchy.kt", + 34, + DiagFragments.MANUAL_IMPL_OUTSIDE_HIERARCHY, + ) assertDiagnosticAt(output, "AlienPkg.kt", 7, DiagFragments.MANUAL_IMPL_OUTSIDE_HIERARCHY) assertDiagnosticInFile(output, "AlienPkg.kt", "e: ", "package") } @@ -394,8 +502,9 @@ class DiagSingleFailTest : DiagTestBase() { @Test fun sealedClassBaseRejectsNonClassLeafShapes() { val output = fail() - listOf("ScValue.kt", "ScEnum.kt", "ScIface.kt", "ScAnn.kt").forEach { file -> - assertDiagnosticInFile(output, file, "e: ") + // value / enum / interface / annotation の 4 宣言が同居するため行で分解する + listOf(26, 17, 22, 14).forEach { line -> + assertDiagnosticAt(output, "SealedClassLeafKinds.kt", line, "e: ") } } @@ -422,15 +531,20 @@ class DiagSingleFailTest : DiagTestBase() { @Test fun enumishLabelOnNonLeafIsInvalid() { val output = fail() - listOf(8, 11, 16, 20).forEach { line -> - assertDiagnosticAt(output, "LblTargets.kt", line, DiagFragments.INVALID_LABEL_TARGET) + listOf(12, 15, 20, 24).forEach { line -> + assertDiagnosticAt( + output, + "LabelAnnotation.kt", + line, + DiagFragments.INVALID_LABEL_TARGET, + ) } } // docs/test/ケース04-診断.md DIA-73: 空白のみの明示 label は付与先が正当な末端でも INVALID_LABEL @Test fun blankEnumishLabelIsInvalid() { - assertDiagnosticAt(fail(), "LblBlank.kt", 9, DiagFragments.INVALID_LABEL_BLANK) + assertDiagnosticAt(fail(), "LabelAnnotation.kt", 30, DiagFragments.INVALID_LABEL_BLANK) } // docs/test/ケース04-診断.md DIA-74: ケース変換で初めて衝突する単純名は最終 label で判定され、 @@ -438,15 +552,29 @@ class DiagSingleFailTest : DiagTestBase() { @Test fun conversionInducedLabelClashIsReported() { val output = fail() - assertDiagnosticAt(output, "LblCaseClash.kt", 10, DiagFragments.LABEL_CLASH, "FOO_BAR") - assertDiagnosticAt(output, "LblCaseClash.kt", 12, DiagFragments.LABEL_CLASH, "FOO_BAR") + listOf(38, 40).forEach { line -> + assertDiagnosticAt( + output, + "LabelAnnotation.kt", + line, + DiagFragments.LABEL_CLASH, + "FOO_BAR", + ) + } } // docs/test/ケース04-診断.md DIA-75: 明示 label と他末端の既定 label の衝突も両末端に LABEL_CLASH @Test fun aliasVersusDefaultLabelClashIsReported() { val output = fail() - assertDiagnosticAt(output, "LblAliasClash.kt", 9, DiagFragments.LABEL_CLASH, "First") - assertDiagnosticAt(output, "LblAliasClash.kt", 11, DiagFragments.LABEL_CLASH, "First") + listOf(47, 49).forEach { line -> + assertDiagnosticAt( + output, + "LabelAnnotation.kt", + line, + DiagFragments.LABEL_CLASH, + "First", + ) + } } } diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/AbstractToString.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/AbstractToString.kt new file mode 100644 index 0000000..7e06587 --- /dev/null +++ b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/AbstractToString.kt @@ -0,0 +1,16 @@ +package io.github.projectmapk.diag.fail + +import io.github.projectmapk.sealedClassEnumizer.Enumize + +// docs/test/ケース04-診断.md DIA-62 用の基底 +@Enumize +sealed interface AtSi + +// toString の抽象再宣言(Any の実装では充足されない) +abstract class AtAbs { + abstract override fun toString(): String +} + +// DIA-62: supertype の toString 抽象再宣言 + 手動実装なし +// → 言語 abstract 未実装エラーのみ・MC 不在(生成は充足に使えない) +object AtLeaf : AtAbs(), AtSi diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Amb2.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Amb2.kt deleted file mode 100644 index 0fbcec6..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Amb2.kt +++ /dev/null @@ -1,11 +0,0 @@ -package io.github.projectmapk.diag.fail - -import io.github.projectmapk.sealedClassEnumizer.Enumize - -// docs/test/ケース04-診断.md DIA-17 用の基底(末端 interface 2 つ) -@Enumize -sealed interface Amb2 { - interface LeafA : Amb2 - - interface LeafB : Amb2 -} diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Amb2C.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Amb2C.kt deleted file mode 100644 index 1038fc8..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Amb2C.kt +++ /dev/null @@ -1,4 +0,0 @@ -package io.github.projectmapk.diag.fail - -// docs/test/ケース04-診断.md DIA-17: 2 末端 interface の実装 → ENUMIZE_AMBIGUOUS_KIND + 末端 FQN 2 件 -class Amb2C : Amb2.LeafA, Amb2.LeafB diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/AmbA.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/AmbA.kt deleted file mode 100644 index f966bba..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/AmbA.kt +++ /dev/null @@ -1,4 +0,0 @@ -package io.github.projectmapk.diag.fail - -// docs/test/ケース04-診断.md DIA-17 用の非 final 末端(V10) -abstract class AmbA : AmbSi diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/AmbB.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/AmbB.kt deleted file mode 100644 index a369b11..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/AmbB.kt +++ /dev/null @@ -1,4 +0,0 @@ -package io.github.projectmapk.diag.fail - -// docs/test/ケース04-診断.md DIA-17: 末端 AmbA を継承しつつ基底も直接実装 → ENUMIZE_AMBIGUOUS_KIND -class AmbB : AmbA(), AmbSi diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/AmbSi.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/AmbSi.kt deleted file mode 100644 index 4ee4c6e..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/AmbSi.kt +++ /dev/null @@ -1,7 +0,0 @@ -package io.github.projectmapk.diag.fail - -import io.github.projectmapk.sealedClassEnumizer.Enumize - -// docs/test/ケース04-診断.md DIA-17 用の基底 -@Enumize -sealed interface AmbSi diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/AmbiguousKind.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/AmbiguousKind.kt new file mode 100644 index 0000000..449eeba --- /dev/null +++ b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/AmbiguousKind.kt @@ -0,0 +1,24 @@ +package io.github.projectmapk.diag.fail + +import io.github.projectmapk.sealedClassEnumizer.Enumize + +// docs/test/ケース04-診断.md DIA-17: 1 宣言が 2 つの kind に属する形 → ENUMIZE_AMBIGUOUS_KIND + 末端 FQN + +@Enumize +sealed interface AmbSi + +// 非 final 末端(V10) +abstract class AmbA : AmbSi + +// 末端 AmbA を継承しつつ基底も直接実装 +class AmbB : AmbA(), AmbSi + +@Enumize +sealed interface Amb2 { + interface LeafA : Amb2 + + interface LeafB : Amb2 +} + +// 2 末端 interface の実装 → AK + 末端 FQN 2 件 +class Amb2C : Amb2.LeafA, Amb2.LeafB diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/AtAbs.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/AtAbs.kt deleted file mode 100644 index 365cd4b..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/AtAbs.kt +++ /dev/null @@ -1,6 +0,0 @@ -package io.github.projectmapk.diag.fail - -// docs/test/ケース04-診断.md DIA-62 用: toString の抽象再宣言(Any の実装では充足されない) -abstract class AtAbs { - abstract override fun toString(): String -} diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/AtLeaf.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/AtLeaf.kt deleted file mode 100644 index d220983..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/AtLeaf.kt +++ /dev/null @@ -1,5 +0,0 @@ -package io.github.projectmapk.diag.fail - -// docs/test/ケース04-診断.md DIA-62: supertype の toString 抽象再宣言 + 手動実装なし -// → 言語 abstract 未実装エラーのみ・MC 不在(生成は充足に使えない) -object AtLeaf : AtAbs(), AtSi diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/AtSi.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/AtSi.kt deleted file mode 100644 index 5c1145d..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/AtSi.kt +++ /dev/null @@ -1,7 +0,0 @@ -package io.github.projectmapk.diag.fail - -import io.github.projectmapk.sealedClassEnumizer.Enumize - -// docs/test/ケース04-診断.md DIA-62 用の基底 -@Enumize -sealed interface AtSi diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Clc2Host.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Clc2Host.kt deleted file mode 100644 index c2dc226..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Clc2Host.kt +++ /dev/null @@ -1,6 +0,0 @@ -package io.github.projectmapk.diag.fail - -// docs/test/ケース04-診断.md DIA-29: 名前つき companion が末端でも同様 → COMPANION_LEAF_CONFLICT -class Clc2Host(val v: Int) : Clc2Si { - companion object Named : Clc2Si -} diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Clc2Si.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Clc2Si.kt deleted file mode 100644 index f4dbcec..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Clc2Si.kt +++ /dev/null @@ -1,7 +0,0 @@ -package io.github.projectmapk.diag.fail - -import io.github.projectmapk.sealedClassEnumizer.Enumize - -// docs/test/ケース04-診断.md DIA-29 用の基底(名前つき companion 亜種) -@Enumize -sealed interface Clc2Si diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Clc3Host.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Clc3Host.kt deleted file mode 100644 index 7d4f3f5..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Clc3Host.kt +++ /dev/null @@ -1,6 +0,0 @@ -package io.github.projectmapk.diag.fail - -// docs/test/ケース04-診断.md DIA-29: companion が「別階層の」末端でも発火(判定は階層不問) -class Clc3Host(val v: Int) : Clc3SiA { - companion object : Clc3SiB -} diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Clc3SiA.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Clc3SiA.kt deleted file mode 100644 index 92249f5..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Clc3SiA.kt +++ /dev/null @@ -1,7 +0,0 @@ -package io.github.projectmapk.diag.fail - -import io.github.projectmapk.sealedClassEnumizer.Enumize - -// docs/test/ケース04-診断.md DIA-29 用の階層 A(ホスト側の所属先) -@Enumize -sealed interface Clc3SiA diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Clc3SiB.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Clc3SiB.kt deleted file mode 100644 index 9a06c7e..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Clc3SiB.kt +++ /dev/null @@ -1,7 +0,0 @@ -package io.github.projectmapk.diag.fail - -import io.github.projectmapk.sealedClassEnumizer.Enumize - -// docs/test/ケース04-診断.md DIA-29 用の階層 B(companion の所属先) -@Enumize -sealed interface Clc3SiB diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/ClcHost.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/ClcHost.kt deleted file mode 100644 index a9f7704..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/ClcHost.kt +++ /dev/null @@ -1,6 +0,0 @@ -package io.github.projectmapk.diag.fail - -// docs/test/ケース04-診断.md DIA-29: 末端 class の companion(既定名)自身が末端 → ENUMIZE_COMPANION_LEAF_CONFLICT -class ClcHost(val v: Int) : ClcSi { - companion object : ClcSi -} diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/ClcSi.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/ClcSi.kt deleted file mode 100644 index d349b7f..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/ClcSi.kt +++ /dev/null @@ -1,7 +0,0 @@ -package io.github.projectmapk.diag.fail - -import io.github.projectmapk.sealedClassEnumizer.Enumize - -// docs/test/ケース04-診断.md DIA-29 用の基底 -@Enumize -sealed interface ClcSi diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/CompanionLeafConflict.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/CompanionLeafConflict.kt new file mode 100644 index 0000000..75d8f95 --- /dev/null +++ b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/CompanionLeafConflict.kt @@ -0,0 +1,35 @@ +package io.github.projectmapk.diag.fail + +import io.github.projectmapk.sealedClassEnumizer.Enumize + +// docs/test/ケース04-診断.md DIA-29: 末端 class の companion 自身が末端を兼ねる形 +// → ENUMIZE_COMPANION_LEAF_CONFLICT(報告位置 = companion 宣言。判定は階層不問) + +@Enumize +sealed interface ClcSi + +// 既定名 companion +class ClcHost(val v: Int) : ClcSi { + companion object : ClcSi +} + +@Enumize +sealed interface Clc2Si + +// 名前つき companion でも同様 +class Clc2Host(val v: Int) : Clc2Si { + companion object Named : Clc2Si +} + +// ホスト側の所属先 +@Enumize +sealed interface Clc3SiA + +// companion の所属先 +@Enumize +sealed interface Clc3SiB + +// companion が「別階層の」末端でも発火する +class Clc3Host(val v: Int) : Clc3SiA { + companion object : Clc3SiB +} diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/ElseInt.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/ElseInt.kt deleted file mode 100644 index e729496..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/ElseInt.kt +++ /dev/null @@ -1,11 +0,0 @@ -package io.github.projectmapk.diag.fail - -import io.github.projectmapk.sealedClassEnumizer.Enumize - -// else 必須の位置依存(internal 基底 + 基底内ネスト private 末端。docs/test/ケース04-診断.md §11 の委譲対象) -@Enumize -internal sealed interface ElseInt { - private data class Hidden(val v: Int) : ElseInt - - data object A : ElseInt -} diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/ElseIntUse.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/ElseIntUse.kt deleted file mode 100644 index af0394e..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/ElseIntUse.kt +++ /dev/null @@ -1,7 +0,0 @@ -package io.github.projectmapk.diag.fail - -// else 必須の位置依存 変種 1: 基底本体スコープの外からは private ネスト kind を名指しできず、 -// else 無し kind-when は網羅不成立(言語エラー) -internal fun elseIntUse(si: ElseInt): String = when (si.asEnumish()) { - ElseInt.A -> "a" -} diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/ElsePub.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/ElsePub.kt deleted file mode 100644 index f168902..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/ElsePub.kt +++ /dev/null @@ -1,11 +0,0 @@ -package io.github.projectmapk.diag.fail - -import io.github.projectmapk.sealedClassEnumizer.Enumize - -// else 必須の位置依存 変種 2 用: public 基底 + 基底内ネスト private 末端 -@Enumize -sealed interface ElsePub { - private data object Hidden : ElsePub - - data object Shown : ElsePub -} diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/ElsePubUse.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/ElsePubUse.kt deleted file mode 100644 index 4a78f5d..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/ElsePubUse.kt +++ /dev/null @@ -1,6 +0,0 @@ -package io.github.projectmapk.diag.fail - -// else 必須の位置依存 変種 2: public 基底でも private ネスト kind が不可視の位置では else 必須 -fun elsePubUse(si: ElsePub): String = when (si.asEnumish()) { - ElsePub.Shown -> "shown" -} diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/ElseRequired.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/ElseRequired.kt new file mode 100644 index 0000000..9d419b4 --- /dev/null +++ b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/ElseRequired.kt @@ -0,0 +1,31 @@ +package io.github.projectmapk.diag.fail + +import io.github.projectmapk.sealedClassEnumizer.Enumize + +// docs/test/ケース04-診断.md §11 の委譲対象: else 必須の位置依存 2 変種。 +// 基底内ネストの private 末端はクラススコープであり、同一ファイルでも基底本体の外からは +// 名指しできないため、else 無し kind-when は網羅不成立(言語エラー)になる + +// 変種 1: internal 基底 + 基底内ネスト private 末端 +@Enumize +internal sealed interface ElseInt { + private data class Hidden(val v: Int) : ElseInt + + data object A : ElseInt +} + +internal fun elseIntUse(si: ElseInt): String = when (si.asEnumish()) { + ElseInt.A -> "a" +} + +// 変種 2: public 基底でも private ネスト kind が不可視の位置では else 必須 +@Enumize +sealed interface ElsePub { + private data object Hidden : ElsePub + + data object Shown : ElsePub +} + +fun elsePubUse(si: ElsePub): String = when (si.asEnumish()) { + ElsePub.Shown -> "shown" +} diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/ExpLeaf.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/ExpLeaf.kt deleted file mode 100644 index de2e018..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/ExpLeaf.kt +++ /dev/null @@ -1,4 +0,0 @@ -package io.github.projectmapk.diag.fail - -// docs/test/ケース04-診断.md DIA-27: sealed class 階層の広い末端 → 言語 EXPOSED_SUPER_CLASS・KTD 不在 -class ExpLeaf : ExpBase() diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Expose.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Expose.kt deleted file mode 100644 index 18a75fa..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Expose.kt +++ /dev/null @@ -1,6 +0,0 @@ -package io.github.projectmapk.diag.fail - -// docs/test/ケース04-診断.md DIA-63 用: internal companion を持つ public クラス(手書き模擬) -class Expose { - internal companion object -} diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/ExposeReturn.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/ExposeReturn.kt deleted file mode 100644 index 8ca068e..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/ExposeReturn.kt +++ /dev/null @@ -1,5 +0,0 @@ -package io.github.projectmapk.diag.fail - -// docs/test/ケース04-診断.md DIA-63: public 関数が internal companion 型を返す -// → EXPOSED_FUNCTION_RETURN_TYPE(規則 2 フォールバックの根拠) -fun exposeReturn(): Expose.Companion = Expose diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/ExpBase.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/ExposedSuperClass.kt similarity index 64% rename from integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/ExpBase.kt rename to integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/ExposedSuperClass.kt index a012795..76b2bcc 100644 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/ExpBase.kt +++ b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/ExposedSuperClass.kt @@ -5,3 +5,6 @@ import io.github.projectmapk.sealedClassEnumizer.Enumize // docs/test/ケース04-診断.md DIA-27 用の internal sealed class 基底 @Enumize internal sealed class ExpBase + +// DIA-27: sealed class 階層の広い末端 → 言語 EXPOSED_SUPER_CLASS・KTD 不在 +class ExpLeaf : ExpBase() diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/FarSi.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/FarSi.kt index 7c003ec..fbdaaa8 100644 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/FarSi.kt +++ b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/FarSi.kt @@ -2,7 +2,8 @@ package io.github.projectmapk.diag.fail import io.github.projectmapk.sealedClassEnumizer.Enumize -// docs/test/ケース04-診断.md DIA-65 用の基底(別パッケージ末端の言語委譲) +// docs/test/ケース04-診断.md DIA-65 用の基底。 +// 別パッケージ側の末端宣言は failother/FarLeaf.kt が担う(別パッケージ配置が本ケースの成立条件) @Enumize sealed interface FarSi { data object Near : FarSi diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/FiAsLeaf.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/FiAsLeaf.kt deleted file mode 100644 index bc3f731..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/FiAsLeaf.kt +++ /dev/null @@ -1,4 +0,0 @@ -package io.github.projectmapk.diag.fail - -// docs/test/ケース04-診断.md DIA-70: 階層外クラスの final 具象 asEnumish を継承する末端 object → MC -object FiAsLeaf : FiAsOut(), FiSi diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/FiAsOut.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/FiAsOut.kt deleted file mode 100644 index 890afe7..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/FiAsOut.kt +++ /dev/null @@ -1,6 +0,0 @@ -package io.github.projectmapk.diag.fail - -// docs/test/ケース04-診断.md DIA-70 用: final 具象 asEnumish(引数なし関数)を持つ階層外クラス -open class FiAsOut { - fun asEnumish(): FiSi.Enumish = FiAsLeaf -} diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/FiCls.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/FiCls.kt deleted file mode 100644 index 22353c5..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/FiCls.kt +++ /dev/null @@ -1,6 +0,0 @@ -package io.github.projectmapk.diag.fail - -// docs/test/ケース04-診断.md DIA-70: 手動 kind companion による階層外 final label 継承 → MC(companion 位置) -class FiCls(val v: Int) : FiSi { - companion object : FiOut() -} diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/FiLeaf.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/FiLeaf.kt deleted file mode 100644 index 71d7c33..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/FiLeaf.kt +++ /dev/null @@ -1,4 +0,0 @@ -package io.github.projectmapk.diag.fail - -// docs/test/ケース04-診断.md DIA-70: 階層外クラスの final 具象 label を継承する末端 object → MC -object FiLeaf : FiOut(), FiSi diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/FiMid.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/FiMid.kt deleted file mode 100644 index 3e907bd..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/FiMid.kt +++ /dev/null @@ -1,4 +0,0 @@ -package io.github.projectmapk.diag.fail - -// docs/test/ケース04-診断.md DIA-70 用: final label を FiOut から継承する中間の階層外クラス -open class FiMid : FiOut() diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/FiOut.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/FiOut.kt deleted file mode 100644 index 8f77a78..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/FiOut.kt +++ /dev/null @@ -1,6 +0,0 @@ -package io.github.projectmapk.diag.fail - -// docs/test/ケース04-診断.md DIA-70 用: final 具象 label を持つ階層外クラス(open 修飾なし = final) -open class FiOut { - val label: String get() = "fixed" -} diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/FiSc.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/FiSc.kt deleted file mode 100644 index 073b9e3..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/FiSc.kt +++ /dev/null @@ -1,8 +0,0 @@ -package io.github.projectmapk.diag.fail - -import io.github.projectmapk.sealedClassEnumizer.Enumize - -// docs/test/ケース04-診断.md DIA-70 用: final の ctor プロパティ label を自身が持つ階層内基底 -// (label 宣言位置には ES 警告 = DIA-37 が併発する) -@Enumize -sealed class FiSc(val label: String) diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/FiScLeaf.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/FiScLeaf.kt deleted file mode 100644 index c8906a5..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/FiScLeaf.kt +++ /dev/null @@ -1,4 +0,0 @@ -package io.github.projectmapk.diag.fail - -// docs/test/ケース04-診断.md DIA-70: 階層内 sealed class 基底の final ctor プロパティ label 継承でも MC -object FiScLeaf : FiSc("ctor") diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/FiSi.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/FiSi.kt deleted file mode 100644 index 15332a9..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/FiSi.kt +++ /dev/null @@ -1,7 +0,0 @@ -package io.github.projectmapk.diag.fail - -import io.github.projectmapk.sealedClassEnumizer.Enumize - -// docs/test/ケース04-診断.md DIA-70 用の基底 -@Enumize -sealed interface FiSi diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/FiViaMid.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/FiViaMid.kt deleted file mode 100644 index bd34b43..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/FiViaMid.kt +++ /dev/null @@ -1,4 +0,0 @@ -package io.github.projectmapk.diag.fail - -// docs/test/ケース04-診断.md DIA-70: 中間クラス介在でも supertype 閉包の final label 継承で MC -object FiViaMid : FiMid(), FiSi diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/FinalMemberInherited.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/FinalMemberInherited.kt new file mode 100644 index 0000000..c782ac8 --- /dev/null +++ b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/FinalMemberInherited.kt @@ -0,0 +1,44 @@ +package io.github.projectmapk.diag.fail + +import io.github.projectmapk.sealedClassEnumizer.Enumize + +// docs/test/ケース04-診断.md DIA-70: クラス supertype の final 具象継承で MEMBER_CONFLICT。 +// 階層外の直接継承・中間クラス介在・引数なし関数 asEnumish・手動 kind companion(報告位置 = companion)・ +// 階層内 sealed class 基底の ctor プロパティの各形 + +@Enumize +sealed interface FiSi + +// final 具象 label を持つ階層外クラス(open 修飾なし = final メンバー) +open class FiOut { + val label: String get() = "fixed" +} + +// final label を FiOut から継承する中間の階層外クラス +open class FiMid : FiOut() + +// 階層外クラスの final 具象 label を継承する末端 object +object FiLeaf : FiOut(), FiSi + +// 中間クラス介在でも supertype 閉包の final label 継承で MC +object FiViaMid : FiMid(), FiSi + +// 手動 kind companion による階層外 final label 継承 → MC(報告位置 = companion) +class FiCls(val v: Int) : FiSi { + companion object : FiOut() +} + +// final 具象 asEnumish(引数なし関数)を持つ階層外クラス +open class FiAsOut { + fun asEnumish(): FiSi.Enumish = FiAsLeaf +} + +object FiAsLeaf : FiAsOut(), FiSi + +// final の ctor プロパティ label を自身が持つ階層内基底 +// (label 宣言位置には ES 警告 = DIA-37 が併発する) +@Enumize +sealed class FiSc(val label: String) + +// 階層内 sealed class 基底の final ctor プロパティ label 継承でも MC +object FiScLeaf : FiSc("ctor") diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/InnerHost.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/InnerLeaf.kt similarity index 55% rename from integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/InnerHost.kt rename to integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/InnerLeaf.kt index cedb7f7..5d5cc0a 100644 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/InnerHost.kt +++ b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/InnerLeaf.kt @@ -1,6 +1,12 @@ package io.github.projectmapk.diag.fail -// docs/test/ケース04-診断.md DIA-23: inner class 末端 → ENUMIZE_INNER_LEAF 単独 +import io.github.projectmapk.sealedClassEnumizer.Enumize + +// docs/test/ケース04-診断.md DIA-23 用の基底 +@Enumize +sealed interface InnerSi + +// DIA-23: inner class 末端 → ENUMIZE_INNER_LEAF 単独 // (手動 asEnumish を併置しても以降のメンバー衝突検査はスキップ = MC / KTD 不在の固定) class InnerHost { inner class BadLeaf : InnerSi { diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/InnerSi.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/InnerSi.kt deleted file mode 100644 index 8549bf9..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/InnerSi.kt +++ /dev/null @@ -1,7 +0,0 @@ -package io.github.projectmapk.diag.fail - -import io.github.projectmapk.sealedClassEnumizer.Enumize - -// docs/test/ケース04-診断.md DIA-23 用の基底 -@Enumize -sealed interface InnerSi diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/KindTypeNotDenotable.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/KindTypeNotDenotable.kt new file mode 100644 index 0000000..7e8ece9 --- /dev/null +++ b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/KindTypeNotDenotable.kt @@ -0,0 +1,21 @@ +package io.github.projectmapk.diag.fail + +import io.github.projectmapk.sealedClassEnumizer.Enumize + +// docs/test/ケース04-診断.md DIA-25: 規則 3(基底より広い末端 × 基底より狭い companion) +// → ENUMIZE_KIND_TYPE_NOT_DENOTABLE。internal companion 形と private companion 形の 2 亜種 + +@Enumize +internal sealed interface KtdSi + +class KtdLeaf : KtdSi { + internal companion object +} + +@Enumize +internal sealed interface KnaxSi + +// private companion 亜種(IR-only アクセサ解決後も規則 3 のみ残る) +class KnaxLeaf : KnaxSi { + private companion object +} diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/KnaxLeaf.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/KnaxLeaf.kt deleted file mode 100644 index a8144b4..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/KnaxLeaf.kt +++ /dev/null @@ -1,6 +0,0 @@ -package io.github.projectmapk.diag.fail - -// docs/test/ケース04-診断.md DIA-25: 基底より広い末端 + private companion(アクセサ解決後も規則 3 のみ残る) -class KnaxLeaf : KnaxSi { - private companion object -} diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/KnaxSi.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/KnaxSi.kt deleted file mode 100644 index 701d5bc..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/KnaxSi.kt +++ /dev/null @@ -1,7 +0,0 @@ -package io.github.projectmapk.diag.fail - -import io.github.projectmapk.sealedClassEnumizer.Enumize - -// docs/test/ケース04-診断.md DIA-25 用の internal 基底(private companion 亜種) -@Enumize -internal sealed interface KnaxSi diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/KtdLeaf.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/KtdLeaf.kt deleted file mode 100644 index 6758e7b..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/KtdLeaf.kt +++ /dev/null @@ -1,6 +0,0 @@ -package io.github.projectmapk.diag.fail - -// docs/test/ケース04-診断.md DIA-25: 基底より広い末端 + internal companion → ENUMIZE_KIND_TYPE_NOT_DENOTABLE -class KtdLeaf : KtdSi { - internal companion object -} diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/KtdSi.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/KtdSi.kt deleted file mode 100644 index 87a5112..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/KtdSi.kt +++ /dev/null @@ -1,7 +0,0 @@ -package io.github.projectmapk.diag.fail - -import io.github.projectmapk.sealedClassEnumizer.Enumize - -// docs/test/ケース04-診断.md DIA-25 用の internal 基底 -@Enumize -internal sealed interface KtdSi diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/LabelAnnotation.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/LabelAnnotation.kt new file mode 100644 index 0000000..65bbfdc --- /dev/null +++ b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/LabelAnnotation.kt @@ -0,0 +1,50 @@ +package io.github.projectmapk.diag.fail + +import io.github.projectmapk.sealedClassEnumizer.EnumishLabel +import io.github.projectmapk.sealedClassEnumizer.Enumize +import io.github.projectmapk.sealedClassEnumizer.LabelCase + +// docs/test/ケース04-診断.md DIA-72〜75: @EnumishLabel の付与先・値の不正と、 +// 最終 label で判定される LABEL_CLASH の 2 形(変換由来・明示由来) + +// --- DIA-72: 付与先が末端でない 4 形(基底・中間 sealed・末端 class の companion = kind・階層外クラス) --- + +@EnumishLabel("base") +@Enumize +sealed interface LblT { + @EnumishLabel("mid") sealed interface Mid : LblT + + data object MidLeaf : Mid + + class Leaf(val v: Int) : LblT { + @EnumishLabel("companion") companion object + } +} + +@EnumishLabel("outside") class LblOutside + +// --- DIA-73: 空白のみの明示 label → INVALID_LABEL(付与先は正当な末端) --- + +@Enumize +sealed interface LblBlank { + @EnumishLabel(" ") data object Spaced : LblBlank +} + +// --- DIA-74: ケース変換で初めて衝突する単純名(FooBar / FOO_BAR → FOO_BAR) +// → 衝突判定は最終 label で行われ、両末端に LABEL_CLASH --- + +@Enumize(labelCase = LabelCase.UPPER_SNAKE_CASE) +sealed interface LblCase { + data class FooBar(val v: Int) : LblCase + + data object FOO_BAR : LblCase +} + +// --- DIA-75: 明示 label が他末端の既定 label と衝突 → 両末端に LABEL_CLASH --- + +@Enumize +sealed interface LblAlias { + data object First : LblAlias + + @EnumishLabel("First") data object Second : LblAlias +} diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/LabelClash.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/LabelClash.kt new file mode 100644 index 0000000..c4929a6 --- /dev/null +++ b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/LabelClash.kt @@ -0,0 +1,75 @@ +package io.github.projectmapk.diag.fail + +import io.github.projectmapk.sealedClassEnumizer.Enumize + +// docs/test/ケース04-診断.md DIA-34/35: 同一階層内で最終 label が衝突する末端対 +// → 両当事者へ ENUMIZE_LABEL_CLASH + 相手 FQN。 +// 参照不能末端の同居(抑止も誘発もしないこと)は Lc4Priv.kt が担う + +// --- 同一単純名の末端対(DIA-34) --- + +@Enumize +sealed interface LcSi + +class LcOuter1 { + object Foo : LcSi +} + +class LcOuter2 { + object Foo : LcSi +} + +// --- companion 末端の宣言名 = label が他末端の単純名と衝突(DIA-35) --- + +@Enumize +sealed interface Lc2Si + +// companion 末端の宣言名(Foo2)が label になる側 +class Lc2Host { + companion object Foo2 : Lc2Si +} + +class Lc2Outer { + object Foo2 : Lc2Si +} + +// --- enum 末端の label は enum 全体の単純名(定数名は非関与。DIA-34) --- + +@Enumize +sealed interface Lc3Si { + enum class Dup : Lc3Si { A, B } +} + +class Lc3Outer { + object Dup : Lc3Si +} + +// --- 相互非抑止(DIA-34。参照不能末端 Lc4Priv が同居しても双方に発火する) --- + +@Enumize +sealed interface Lc4Si + +class Lc4A { + object Same : Lc4Si +} + +class Lc4B { + object Same : Lc4Si +} + +// --- 3 末端同名(相手 FQN が列挙される引数形。DIA-34) --- + +@Enumize +sealed interface Lc5Si + +class Lc5A { + object Trip : Lc5Si +} + +class Lc5B { + object Trip : Lc5Si +} + +class Lc5C { + object Trip : Lc5Si +} diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/LanguageRuleBasis.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/LanguageRuleBasis.kt new file mode 100644 index 0000000..fd2ed7a --- /dev/null +++ b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/LanguageRuleBasis.kt @@ -0,0 +1,22 @@ +package io.github.projectmapk.diag.fail + +// docs/test/ケース04-診断.md DIA-63: 可視性規則の言語根拠 2 件を手書き模擬で固定する +// (生成メンバーを internal 化できないこと・規則 2 フォールバックが必要であること) + +// internal companion を持つ public クラス +class Expose { + internal companion object +} + +// public 関数が internal companion 型を返す → EXPOSED_FUNCTION_RETURN_TYPE(規則 2 フォールバックの根拠) +fun exposeReturn(): Expose.Companion = Expose + +// public メンバーを持つ継承元 +interface WeakBase { + val v: Int +} + +// override 可視性の縮小 → CANNOT_WEAKEN_ACCESS_PRIVILEGE(生成メンバーの internal 化が不成立である言語根拠) +class WeakImpl : WeakBase { + internal override val v: Int = 1 +} diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/LblAliasClash.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/LblAliasClash.kt deleted file mode 100644 index 76f8460..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/LblAliasClash.kt +++ /dev/null @@ -1,12 +0,0 @@ -package io.github.projectmapk.diag.fail - -import io.github.projectmapk.sealedClassEnumizer.EnumishLabel -import io.github.projectmapk.sealedClassEnumizer.Enumize - -// docs/test/ケース04-診断.md DIA-75: 明示 label が他末端の既定 label と衝突 → 両末端に LABEL_CLASH -@Enumize -sealed interface LblAlias { - data object First : LblAlias - - @EnumishLabel("First") data object Second : LblAlias -} diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/LblBlank.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/LblBlank.kt deleted file mode 100644 index 0afd60c..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/LblBlank.kt +++ /dev/null @@ -1,10 +0,0 @@ -package io.github.projectmapk.diag.fail - -import io.github.projectmapk.sealedClassEnumizer.EnumishLabel -import io.github.projectmapk.sealedClassEnumizer.Enumize - -// docs/test/ケース04-診断.md DIA-73: 空白のみの明示 label → INVALID_LABEL(付与先は正当な末端) -@Enumize -sealed interface LblBlank { - @EnumishLabel(" ") data object Spaced : LblBlank -} diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/LblCaseClash.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/LblCaseClash.kt deleted file mode 100644 index c9b492d..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/LblCaseClash.kt +++ /dev/null @@ -1,13 +0,0 @@ -package io.github.projectmapk.diag.fail - -import io.github.projectmapk.sealedClassEnumizer.Enumize -import io.github.projectmapk.sealedClassEnumizer.LabelCase - -// docs/test/ケース04-診断.md DIA-74: ケース変換で初めて衝突する単純名(FooBar / FOO_BAR → FOO_BAR) -// → 衝突判定は最終 label で行われ、両末端に LABEL_CLASH -@Enumize(labelCase = LabelCase.UPPER_SNAKE_CASE) -sealed interface LblCase { - data class FooBar(val v: Int) : LblCase - - data object FOO_BAR : LblCase -} diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/LblTargets.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/LblTargets.kt deleted file mode 100644 index 1678c09..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/LblTargets.kt +++ /dev/null @@ -1,20 +0,0 @@ -package io.github.projectmapk.diag.fail - -import io.github.projectmapk.sealedClassEnumizer.EnumishLabel -import io.github.projectmapk.sealedClassEnumizer.Enumize - -// docs/test/ケース04-診断.md DIA-72: @EnumishLabel の付与先が末端でない 4 形 -// (基底・中間 sealed・末端 class の companion = kind・階層外クラス)→ INVALID_LABEL -@EnumishLabel("base") -@Enumize -sealed interface LblT { - @EnumishLabel("mid") sealed interface Mid : LblT - - data object MidLeaf : Mid - - class Leaf(val v: Int) : LblT { - @EnumishLabel("companion") companion object - } -} - -@EnumishLabel("outside") class LblOutside diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Lc2Host.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Lc2Host.kt deleted file mode 100644 index af4a079..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Lc2Host.kt +++ /dev/null @@ -1,6 +0,0 @@ -package io.github.projectmapk.diag.fail - -// docs/test/ケース04-診断.md DIA-35: companion 末端の宣言名(Foo2)が label になる側 -class Lc2Host { - companion object Foo2 : Lc2Si -} diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Lc2Outer.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Lc2Outer.kt deleted file mode 100644 index 0ae3a6d..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Lc2Outer.kt +++ /dev/null @@ -1,6 +0,0 @@ -package io.github.projectmapk.diag.fail - -// docs/test/ケース04-診断.md DIA-35: companion 末端の宣言名と衝突する別末端 → LABEL_CLASH -class Lc2Outer { - object Foo2 : Lc2Si -} diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Lc2Si.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Lc2Si.kt deleted file mode 100644 index c3c7fb1..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Lc2Si.kt +++ /dev/null @@ -1,7 +0,0 @@ -package io.github.projectmapk.diag.fail - -import io.github.projectmapk.sealedClassEnumizer.Enumize - -// docs/test/ケース04-診断.md DIA-35 用の基底 -@Enumize -sealed interface Lc2Si diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Lc3Outer.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Lc3Outer.kt deleted file mode 100644 index 592b1b8..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Lc3Outer.kt +++ /dev/null @@ -1,6 +0,0 @@ -package io.github.projectmapk.diag.fail - -// docs/test/ケース04-診断.md DIA-34: enum 末端の単純名と衝突する別末端 → LABEL_CLASH -class Lc3Outer { - object Dup : Lc3Si -} diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Lc3Si.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Lc3Si.kt deleted file mode 100644 index 5225cf1..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Lc3Si.kt +++ /dev/null @@ -1,9 +0,0 @@ -package io.github.projectmapk.diag.fail - -import io.github.projectmapk.sealedClassEnumizer.Enumize - -// docs/test/ケース04-診断.md DIA-34: enum 末端の label は enum 全体の単純名(定数名は非関与) -@Enumize -sealed interface Lc3Si { - enum class Dup : Lc3Si { A, B } -} diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Lc4A.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Lc4A.kt deleted file mode 100644 index e85c89c..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Lc4A.kt +++ /dev/null @@ -1,6 +0,0 @@ -package io.github.projectmapk.diag.fail - -// docs/test/ケース04-診断.md DIA-34: 相互非抑止の当事者側 -class Lc4A { - object Same : Lc4Si -} diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Lc4B.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Lc4B.kt deleted file mode 100644 index 4376d66..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Lc4B.kt +++ /dev/null @@ -1,6 +0,0 @@ -package io.github.projectmapk.diag.fail - -// docs/test/ケース04-診断.md DIA-34: 相互非抑止の衝突相手側 -class Lc4B { - object Same : Lc4Si -} diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Lc4Priv.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Lc4Priv.kt index ab134e1..aa8f476 100644 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Lc4Priv.kt +++ b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Lc4Priv.kt @@ -1,5 +1,6 @@ package io.github.projectmapk.diag.fail -// docs/test/ケース04-診断.md DIA-34: 同一階層の参照不能末端(別ファイル private TL)。 -// IR-only アクセサで load し、LABEL_CLASH を抑止も誘発もしない +// docs/test/ケース04-診断.md DIA-34: Lc4Si 階層の参照不能末端(別ファイルの private トップレベル)。 +// IR-only アクセサで load し、LABEL_CLASH を抑止も誘発もしない。 +// private トップレベルはファイルスコープであり、基底と別ファイルであること自体が参照不能の条件である private class Lc4Priv : Lc4Si diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Lc4Si.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Lc4Si.kt deleted file mode 100644 index 417fa9a..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Lc4Si.kt +++ /dev/null @@ -1,7 +0,0 @@ -package io.github.projectmapk.diag.fail - -import io.github.projectmapk.sealedClassEnumizer.Enumize - -// docs/test/ケース04-診断.md DIA-34 用の基底(相互非抑止・参照不能末端の同居観測) -@Enumize -sealed interface Lc4Si diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Lc5A.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Lc5A.kt deleted file mode 100644 index 7976cd2..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Lc5A.kt +++ /dev/null @@ -1,6 +0,0 @@ -package io.github.projectmapk.diag.fail - -// docs/test/ケース04-診断.md DIA-34: 3 末端同名(当事者 A。相手 FQN が列挙される引数形) -class Lc5A { - object Trip : Lc5Si -} diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Lc5B.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Lc5B.kt deleted file mode 100644 index e773a96..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Lc5B.kt +++ /dev/null @@ -1,6 +0,0 @@ -package io.github.projectmapk.diag.fail - -// docs/test/ケース04-診断.md DIA-34: 3 末端同名(当事者 B) -class Lc5B { - object Trip : Lc5Si -} diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Lc5C.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Lc5C.kt deleted file mode 100644 index 89bee79..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Lc5C.kt +++ /dev/null @@ -1,6 +0,0 @@ -package io.github.projectmapk.diag.fail - -// docs/test/ケース04-診断.md DIA-34: 3 末端同名(当事者 C) -class Lc5C { - object Trip : Lc5Si -} diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Lc5Si.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Lc5Si.kt deleted file mode 100644 index 01d2811..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Lc5Si.kt +++ /dev/null @@ -1,7 +0,0 @@ -package io.github.projectmapk.diag.fail - -import io.github.projectmapk.sealedClassEnumizer.Enumize - -// docs/test/ケース04-診断.md DIA-34 用の基底(3 末端同名の引数形) -@Enumize -sealed interface Lc5Si diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/LcOuter1.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/LcOuter1.kt deleted file mode 100644 index 05c7175..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/LcOuter1.kt +++ /dev/null @@ -1,6 +0,0 @@ -package io.github.projectmapk.diag.fail - -// docs/test/ケース04-診断.md DIA-34: 同一単純名の末端対(当事者 1)→ ENUMIZE_LABEL_CLASH + 相手 FQN -class LcOuter1 { - object Foo : LcSi -} diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/LcOuter2.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/LcOuter2.kt deleted file mode 100644 index a6620c5..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/LcOuter2.kt +++ /dev/null @@ -1,6 +0,0 @@ -package io.github.projectmapk.diag.fail - -// docs/test/ケース04-診断.md DIA-34: 同一単純名の末端対(当事者 2) -class LcOuter2 { - object Foo : LcSi -} diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/LcSi.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/LcSi.kt deleted file mode 100644 index 6044ee9..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/LcSi.kt +++ /dev/null @@ -1,7 +0,0 @@ -package io.github.projectmapk.diag.fail - -import io.github.projectmapk.sealedClassEnumizer.Enumize - -// docs/test/ケース04-診断.md DIA-34 用の基底 -@Enumize -sealed interface LcSi diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/ManualImplOutsideHierarchy.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/ManualImplOutsideHierarchy.kt new file mode 100644 index 0000000..849afda --- /dev/null +++ b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/ManualImplOutsideHierarchy.kt @@ -0,0 +1,39 @@ +package io.github.projectmapk.diag.fail + +import io.github.projectmapk.sealedClassEnumizer.Enumize +import io.github.projectmapk.sealedClassEnumizer.Enumized +import kotlin.reflect.KClass + +// docs/test/ケース04-診断.md DIA-56: 階層外からの生成 Enumish 直接実装 +// → ENUMIZE_MANUAL_IMPL_OUTSIDE_HIERARCHY + 基底 FQN(報告位置 = supertype ref)。 +// 同一 module 別 pkg 形は failother/AlienPkg.kt が担う + +@Enumize +sealed interface MiSi { + data object Ok : MiSi +} + +// 階層外 object の直接実装 +object MiRogue : MiSi.Enumish { + override val label: String get() = "rogue" + + override val enumizedClass: KClass get() = MiSi::class +} + +// class 形 + Enumized 併記でも MIOH +class MiRogueCls : MiSi.Enumish, Enumized { + override val label: String get() = "roguecls" + + override val enumizedClass: KClass get() = MiSi::class + + override fun asEnumish(): MiSi.Enumish = this +} + +// 中間 sealed の companion による実装 → kind companion 免除の不成立側(MIOH 発火) +sealed interface MiMid : MiSi { + companion object : MiSi.Enumish { + override val label: String get() = "mid" + + override val enumizedClass: KClass get() = MiMid::class + } +} diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/ManualSupertypeMismatch.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/ManualSupertypeMismatch.kt new file mode 100644 index 0000000..0ebb734 --- /dev/null +++ b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/ManualSupertypeMismatch.kt @@ -0,0 +1,99 @@ +package io.github.projectmapk.diag.fail + +import io.github.projectmapk.sealedClassEnumizer.Enumish +import io.github.projectmapk.sealedClassEnumizer.Enumize +import io.github.projectmapk.sealedClassEnumizer.Enumized + +// docs/test/ケース04-診断.md DIA-46〜49: Enumized の T が自階層の生成 Enumish と一致しない形 +// → ENUMIZE_MANUAL_SUPERTYPE_MISMATCH(報告位置 = supertype ref)。 +// 直接継承・自作 interface 経由の間接継承・末端側・E-1 適格/非適格 K の各亜種を同居させる + +// DIA-46/47/48 用の「別の Enumish 型」 +interface MsWrong : Enumish + +// --- DIA-46: 基底の Enumized<別型> 直接継承 --- + +@Enumize +sealed interface Ms1Si : Enumized { + data object L1 : Ms1Si +} + +// --- DIA-47: 自作 interface 経由(supertypeClosure)の不一致 --- + +interface Ms2MyBase : Enumized + +@Enumize +sealed interface Ms2Si : Ms2MyBase { + data object L2 : Ms2Si +} + +// --- DIA-48: 階層メンバー(末端)の Enumized<別型> --- + +@Enumize +sealed interface MsLeafSi + +data class MsLeaf(val v: Int) : MsLeafSi, Enumized { + companion object +} + +// --- DIA-49: E-1 適格 K でも非適格 K 6 亜種でも v1 は一律 MSM --- + +// 適格 K(非 sealed interface・基底 Enumish サブタイプ・具象なし) +interface Ms3Kind : Enumish + +@Enumize +sealed interface Ms3Si : Enumized { + data object L3 : Ms3Si +} + +// 非適格 K(class 亜種) +abstract class Ms4K : Enumish + +@Enumize +sealed interface Ms4Si : Enumized { + data object L4 : Ms4Si +} + +// 非適格 K(sealed 亜種) +sealed interface Ms5K : Enumish + +@Enumize +sealed interface Ms5Si : Enumized { + data object L5 : Ms5Si +} + +// 非適格 K(supertype 経路内に自階層型 LeafI を含む)。 +// K は interface 末端経由で構成し MIOH 非併発 = 1 宣言 1 診断を維持する +interface Ms6K : Enumish, Ms6Si.LeafI + +@Enumize +sealed interface Ms6Si : Enumized { + interface LeafI : Ms6Si +} + +// 非適格 K(基底より狭い可視性。interface supertype は露出検査の対象外のため言語エラーには掛からない) +internal interface Ms7K : Enumish + +@Enumize +sealed interface Ms7Si : Enumized { + data object L7 : Ms7Si +} + +// 非適格 K(経路内具象実装 = 具象メンバーを持つ) +interface Ms8K : Enumish { + override val label: String get() = "k8" +} + +@Enumize +sealed interface Ms8Si : Enumized { + data object L8 : Ms8Si +} + +// 非適格 K(非 Enumish サブタイプ。Enumized の上限境界にも反するため言語エラーが併発する形。 +// 発火の事実のみ固定する) +interface Ms9K + +@Enumize +sealed interface Ms9Si : Enumized { + data object L9 : Ms9Si +} diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Mc1Si.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Mc1Si.kt index 7313c19..53a147e 100644 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Mc1Si.kt +++ b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Mc1Si.kt @@ -1,10 +1,12 @@ package io.github.projectmapk.diag.fail -import kotlin.reflect.KClass import io.github.projectmapk.sealedClassEnumizer.Enumize +import kotlin.reflect.KClass // docs/test/ケース04-診断.md DIA-40: 末端 object の label / enumizedClass / asEnumish 手動宣言 -// → 各 ENUMIZE_MEMBER_CONFLICT + メンバー名(末端 object は kind 自身のため ES 警告は不発) +// → 各 ENUMIZE_MEMBER_CONFLICT + メンバー名。 +// 末端 object は kind 自身のため ES 警告は不発であり、その非発火をファイル単位で観測するため +// 他の MC ケース(MemberConflict.kt)とは分離する @Enumize sealed interface Mc1Si { data object Bad : Mc1Si { diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Mc2Si.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Mc2Si.kt deleted file mode 100644 index 990947d..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Mc2Si.kt +++ /dev/null @@ -1,19 +0,0 @@ -package io.github.projectmapk.diag.fail - -import io.github.projectmapk.sealedClassEnumizer.Enumize - -// docs/test/ケース04-診断.md DIA-40: 判定は callable 名単位(宣言種別交差・引数付き過負荷でも MC) -@Enumize -sealed interface Mc2Si { - data object Fn : Mc2Si { - fun label(): String = "fn" - } - - data class Ctor(val asEnumish: Int) : Mc2Si { - companion object - } - - data object Over : Mc2Si { - fun asEnumish(tag: String): String = tag - } -} diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Mc3Si.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Mc3Si.kt deleted file mode 100644 index 8f43002..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Mc3Si.kt +++ /dev/null @@ -1,16 +0,0 @@ -package io.github.projectmapk.diag.fail - -import kotlin.reflect.KClass -import io.github.projectmapk.sealedClassEnumizer.Enumize - -// docs/test/ケース04-診断.md DIA-41: 手動 kind companion(既定名)の label / enumizedClass 手動宣言 → MC -@Enumize -sealed interface Mc3Si { - class Leaf(val v: Int) : Mc3Si { - companion object { - override val label: String get() = "manual" - - override val enumizedClass: KClass get() = Leaf::class - } - } -} diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Mc4Enum.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Mc4Enum.kt deleted file mode 100644 index 62ca0bd..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Mc4Enum.kt +++ /dev/null @@ -1,16 +0,0 @@ -package io.github.projectmapk.diag.fail - -import io.github.projectmapk.sealedClassEnumizer.Enumize - -// docs/test/ケース04-診断.md DIA-41: enum 末端の kind companion の label 手動宣言 → MC -@Enumize -sealed interface Mc4Enum { - enum class Builtin : Mc4Enum { - HELP, - ; - - companion object { - override val label: String get() = "custom" - } - } -} diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Mc5Leaf.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Mc5Leaf.kt deleted file mode 100644 index 5262ad4..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Mc5Leaf.kt +++ /dev/null @@ -1,8 +0,0 @@ -package io.github.projectmapk.diag.fail - -// docs/test/ケース04-診断.md DIA-42: 末端 class の asEnumish 手動宣言 → MC -class Mc5Leaf : Mc5Si { - companion object - - override fun asEnumish(): Mc5Si.Enumish = throw UnsupportedOperationException() -} diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Mc5Si.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Mc5Si.kt deleted file mode 100644 index a8bde2d..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Mc5Si.kt +++ /dev/null @@ -1,7 +0,0 @@ -package io.github.projectmapk.diag.fail - -import io.github.projectmapk.sealedClassEnumizer.Enumize - -// docs/test/ケース04-診断.md DIA-42 用の基底 -@Enumize -sealed interface Mc5Si diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Mc6Si.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Mc6Si.kt deleted file mode 100644 index e0d7e4d..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Mc6Si.kt +++ /dev/null @@ -1,13 +0,0 @@ -package io.github.projectmapk.diag.fail - -import io.github.projectmapk.sealedClassEnumizer.Enumize - -// docs/test/ケース04-診断.md DIA-42: 末端 interface の asEnumish 手動宣言 → MC -@Enumize -sealed interface Mc6Si { - interface Custom : Mc6Si { - override fun asEnumish(): Mc6Si.Enumish = Companion - - companion object - } -} diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Mc7Leaf.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Mc7Leaf.kt deleted file mode 100644 index 07383f5..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Mc7Leaf.kt +++ /dev/null @@ -1,4 +0,0 @@ -package io.github.projectmapk.diag.fail - -// docs/test/ケース04-診断.md DIA-43: 階層外 interface の label default を末端 object が継承 → MC -object Mc7Leaf : Mc7Si, Mc7Named diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Mc7Named.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Mc7Named.kt deleted file mode 100644 index 759f5ea..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Mc7Named.kt +++ /dev/null @@ -1,6 +0,0 @@ -package io.github.projectmapk.diag.fail - -// docs/test/ケース04-診断.md DIA-43 用: label の default 実装を持つ階層外 interface -interface Mc7Named { - val label: String get() = "named" -} diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Mc7Si.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Mc7Si.kt deleted file mode 100644 index ed311d7..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Mc7Si.kt +++ /dev/null @@ -1,7 +0,0 @@ -package io.github.projectmapk.diag.fail - -import io.github.projectmapk.sealedClassEnumizer.Enumize - -// docs/test/ケース04-診断.md DIA-43 用の基底 -@Enumize -sealed interface Mc7Si diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Mc8Leaf.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Mc8Leaf.kt deleted file mode 100644 index 92ad578..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Mc8Leaf.kt +++ /dev/null @@ -1,6 +0,0 @@ -package io.github.projectmapk.diag.fail - -// docs/test/ケース04-診断.md DIA-43: 階層外 interface からの asEnumish default 継承 → MC -data class Mc8Leaf(val v: Int) : Mc8Si, Mc8Manual { - companion object -} diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Mc8Manual.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Mc8Manual.kt deleted file mode 100644 index 6d78d3e..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Mc8Manual.kt +++ /dev/null @@ -1,8 +0,0 @@ -package io.github.projectmapk.diag.fail - -import io.github.projectmapk.sealedClassEnumizer.Enumized - -// docs/test/ケース04-診断.md DIA-43 用: asEnumish の default 実装を持つ階層外 interface -interface Mc8Manual : Enumized { - override fun asEnumish(): Mc8Si.Enumish = Mc8Si.Real -} diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Mc8Si.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Mc8Si.kt deleted file mode 100644 index c6a8169..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Mc8Si.kt +++ /dev/null @@ -1,9 +0,0 @@ -package io.github.projectmapk.diag.fail - -import io.github.projectmapk.sealedClassEnumizer.Enumize - -// docs/test/ケース04-診断.md DIA-43 用の基底(末端 object Real は default 実装の返り値を兼ねる) -@Enumize -sealed interface Mc8Si { - data object Real : Mc8Si -} diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Mc9Leaf.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Mc9Leaf.kt deleted file mode 100644 index 8fc8633..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Mc9Leaf.kt +++ /dev/null @@ -1,4 +0,0 @@ -package io.github.projectmapk.diag.fail - -// docs/test/ケース04-診断.md DIA-43: enumizedClass の継承具象(変種)→ MC -object Mc9Leaf : Mc9Si, Mc9Prov diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Mc9Prov.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Mc9Prov.kt deleted file mode 100644 index 3772677..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Mc9Prov.kt +++ /dev/null @@ -1,8 +0,0 @@ -package io.github.projectmapk.diag.fail - -import kotlin.reflect.KClass - -// docs/test/ケース04-診断.md DIA-43 用: enumizedClass の具象 default を持つ階層外 interface -interface Mc9Prov { - val enumizedClass: KClass get() = Mc9Si::class -} diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Mc9Si.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Mc9Si.kt deleted file mode 100644 index ac6ab82..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Mc9Si.kt +++ /dev/null @@ -1,7 +0,0 @@ -package io.github.projectmapk.diag.fail - -import io.github.projectmapk.sealedClassEnumizer.Enumize - -// docs/test/ケース04-診断.md DIA-43 用の基底(enumizedClass 継承具象の変種) -@Enumize -sealed interface Mc9Si diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/MemberConflict.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/MemberConflict.kt new file mode 100644 index 0000000..3e8e462 --- /dev/null +++ b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/MemberConflict.kt @@ -0,0 +1,107 @@ +package io.github.projectmapk.diag.fail + +import io.github.projectmapk.sealedClassEnumizer.Enumize +import io.github.projectmapk.sealedClassEnumizer.Enumized +import kotlin.reflect.KClass + +// docs/test/ケース04-診断.md DIA-40〜43: 生成対象メンバー(label / enumizedClass / asEnumish)と +// 衝突する手動宣言・継承具象 → ENUMIZE_MEMBER_CONFLICT + メンバー名。 +// 末端 object の手動宣言形は ES 非発火の観測を伴うため Mc1Si.kt が担う + +// --- DIA-40: 判定は callable 名単位(宣言種別交差・引数付き過負荷でも MC) --- + +@Enumize +sealed interface Mc2Si { + data object Fn : Mc2Si { + fun label(): String = "fn" + } + + data class Ctor(val asEnumish: Int) : Mc2Si { + companion object + } + + data object Over : Mc2Si { + fun asEnumish(tag: String): String = tag + } +} + +// --- DIA-41: 手動 kind companion(既定名)の手動宣言 --- + +@Enumize +sealed interface Mc3Si { + class Leaf(val v: Int) : Mc3Si { + companion object { + override val label: String get() = "manual" + + override val enumizedClass: KClass get() = Leaf::class + } + } +} + +// --- DIA-41: enum 末端の kind companion の label 手動宣言 --- + +@Enumize +sealed interface Mc4Enum { + enum class Builtin : Mc4Enum { + HELP, + ; + + companion object { + override val label: String get() = "custom" + } + } +} + +// --- DIA-42: 末端 class / interface の asEnumish 手動宣言 --- + +@Enumize +sealed interface Mc5Si + +class Mc5Leaf : Mc5Si { + companion object + + override fun asEnumish(): Mc5Si.Enumish = throw UnsupportedOperationException() +} + +@Enumize +sealed interface Mc6Si { + interface Custom : Mc6Si { + override fun asEnumish(): Mc6Si.Enumish = Companion + + companion object + } +} + +// --- DIA-43: 階層外 interface からの同名具象 default 継承(label / asEnumish / enumizedClass の 3 変種) --- + +@Enumize +sealed interface Mc7Si + +interface Mc7Named { + val label: String get() = "named" +} + +object Mc7Leaf : Mc7Si, Mc7Named + +@Enumize +sealed interface Mc8Si { + // default 実装の返り値を兼ねる末端 + data object Real : Mc8Si +} + +interface Mc8Manual : Enumized { + override fun asEnumish(): Mc8Si.Enumish = Mc8Si.Real +} + +data class Mc8Leaf(val v: Int) : Mc8Si, Mc8Manual { + companion object +} + +@Enumize +sealed interface Mc9Si + +interface Mc9Prov { + val enumizedClass: KClass get() = Mc9Si::class +} + +object Mc9Leaf : Mc9Si, Mc9Prov diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/MiMid.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/MiMid.kt deleted file mode 100644 index 095609f..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/MiMid.kt +++ /dev/null @@ -1,13 +0,0 @@ -package io.github.projectmapk.diag.fail - -import kotlin.reflect.KClass - -// docs/test/ケース04-診断.md DIA-56: 中間 sealed の companion による実装 -// → kind companion 免除の不成立側(MIOH 発火) -sealed interface MiMid : MiSi { - companion object : MiSi.Enumish { - override val label: String get() = "mid" - - override val enumizedClass: KClass get() = MiMid::class - } -} diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/MiRogue.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/MiRogue.kt deleted file mode 100644 index a749285..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/MiRogue.kt +++ /dev/null @@ -1,11 +0,0 @@ -package io.github.projectmapk.diag.fail - -import kotlin.reflect.KClass - -// docs/test/ケース04-診断.md DIA-56: 階層外 object の生成 Enumish 直接実装 -// → ENUMIZE_MANUAL_IMPL_OUTSIDE_HIERARCHY + 基底 FQN(報告位置 = supertype ref) -object MiRogue : MiSi.Enumish { - override val label: String get() = "rogue" - - override val enumizedClass: KClass get() = MiSi::class -} diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/MiRogueCls.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/MiRogueCls.kt deleted file mode 100644 index 98c0d7a..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/MiRogueCls.kt +++ /dev/null @@ -1,13 +0,0 @@ -package io.github.projectmapk.diag.fail - -import kotlin.reflect.KClass -import io.github.projectmapk.sealedClassEnumizer.Enumized - -// docs/test/ケース04-診断.md DIA-56: class 形 + Enumized 併記でも MIOH -class MiRogueCls : MiSi.Enumish, Enumized { - override val label: String get() = "roguecls" - - override val enumizedClass: KClass get() = MiSi::class - - override fun asEnumish(): MiSi.Enumish = this -} diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/MiSi.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/MiSi.kt deleted file mode 100644 index 736f254..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/MiSi.kt +++ /dev/null @@ -1,9 +0,0 @@ -package io.github.projectmapk.diag.fail - -import io.github.projectmapk.sealedClassEnumizer.Enumize - -// docs/test/ケース04-診断.md DIA-56 用の基底 -@Enumize -sealed interface MiSi { - data object Ok : MiSi -} diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Ms1Si.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Ms1Si.kt deleted file mode 100644 index 38952bc..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Ms1Si.kt +++ /dev/null @@ -1,10 +0,0 @@ -package io.github.projectmapk.diag.fail - -import io.github.projectmapk.sealedClassEnumizer.Enumize -import io.github.projectmapk.sealedClassEnumizer.Enumized - -// docs/test/ケース04-診断.md DIA-46: 基底の Enumized<別型> 直接継承 → ENUMIZE_MANUAL_SUPERTYPE_MISMATCH -@Enumize -sealed interface Ms1Si : Enumized { - data object L1 : Ms1Si -} diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Ms2MyBase.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Ms2MyBase.kt deleted file mode 100644 index 22b9679..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Ms2MyBase.kt +++ /dev/null @@ -1,6 +0,0 @@ -package io.github.projectmapk.diag.fail - -import io.github.projectmapk.sealedClassEnumizer.Enumized - -// docs/test/ケース04-診断.md DIA-47 用の間接継承元 -interface Ms2MyBase : Enumized diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Ms2Si.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Ms2Si.kt deleted file mode 100644 index 7809000..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Ms2Si.kt +++ /dev/null @@ -1,9 +0,0 @@ -package io.github.projectmapk.diag.fail - -import io.github.projectmapk.sealedClassEnumizer.Enumize - -// docs/test/ケース04-診断.md DIA-47: 自作 interface 経由(supertypeClosure)の不一致でも MSM -@Enumize -sealed interface Ms2Si : Ms2MyBase { - data object L2 : Ms2Si -} diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Ms3Kind.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Ms3Kind.kt deleted file mode 100644 index 5db5235..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Ms3Kind.kt +++ /dev/null @@ -1,6 +0,0 @@ -package io.github.projectmapk.diag.fail - -import io.github.projectmapk.sealedClassEnumizer.Enumish - -// docs/test/ケース04-診断.md DIA-49 用の E-1 適格 K(非 sealed interface・基底 Enumish サブタイプ・具象なし) -interface Ms3Kind : Enumish diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Ms3Si.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Ms3Si.kt deleted file mode 100644 index 73d179f..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Ms3Si.kt +++ /dev/null @@ -1,10 +0,0 @@ -package io.github.projectmapk.diag.fail - -import io.github.projectmapk.sealedClassEnumizer.Enumize -import io.github.projectmapk.sealedClassEnumizer.Enumized - -// docs/test/ケース04-診断.md DIA-49: E-1 適格 K でも v1 は一律 MSM -@Enumize -sealed interface Ms3Si : Enumized { - data object L3 : Ms3Si -} diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Ms4K.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Ms4K.kt deleted file mode 100644 index 0f1d7c2..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Ms4K.kt +++ /dev/null @@ -1,6 +0,0 @@ -package io.github.projectmapk.diag.fail - -import io.github.projectmapk.sealedClassEnumizer.Enumish - -// docs/test/ケース04-診断.md DIA-49 用の非適格 K(class 亜種) -abstract class Ms4K : Enumish diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Ms4Si.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Ms4Si.kt deleted file mode 100644 index e5e2c26..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Ms4Si.kt +++ /dev/null @@ -1,10 +0,0 @@ -package io.github.projectmapk.diag.fail - -import io.github.projectmapk.sealedClassEnumizer.Enumize -import io.github.projectmapk.sealedClassEnumizer.Enumized - -// docs/test/ケース04-診断.md DIA-49: 非適格 K(class)でも v1 は一律 MSM -@Enumize -sealed interface Ms4Si : Enumized { - data object L4 : Ms4Si -} diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Ms5K.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Ms5K.kt deleted file mode 100644 index 3c48df6..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Ms5K.kt +++ /dev/null @@ -1,6 +0,0 @@ -package io.github.projectmapk.diag.fail - -import io.github.projectmapk.sealedClassEnumizer.Enumish - -// docs/test/ケース04-診断.md DIA-49 用の非適格 K(sealed 亜種) -sealed interface Ms5K : Enumish diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Ms5Si.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Ms5Si.kt deleted file mode 100644 index 771ee88..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Ms5Si.kt +++ /dev/null @@ -1,10 +0,0 @@ -package io.github.projectmapk.diag.fail - -import io.github.projectmapk.sealedClassEnumizer.Enumize -import io.github.projectmapk.sealedClassEnumizer.Enumized - -// docs/test/ケース04-診断.md DIA-49: 非適格 K(sealed)でも v1 は一律 MSM -@Enumize -sealed interface Ms5Si : Enumized { - data object L5 : Ms5Si -} diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Ms6K.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Ms6K.kt deleted file mode 100644 index 39eee3c..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Ms6K.kt +++ /dev/null @@ -1,6 +0,0 @@ -package io.github.projectmapk.diag.fail - -import io.github.projectmapk.sealedClassEnumizer.Enumish - -// docs/test/ケース04-診断.md DIA-49 用の非適格 K(supertype 経路内に自階層型 LeafI を含む) -interface Ms6K : Enumish, Ms6Si.LeafI diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Ms6Si.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Ms6Si.kt deleted file mode 100644 index 00cf35d..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Ms6Si.kt +++ /dev/null @@ -1,11 +0,0 @@ -package io.github.projectmapk.diag.fail - -import io.github.projectmapk.sealedClassEnumizer.Enumize -import io.github.projectmapk.sealedClassEnumizer.Enumized - -// docs/test/ケース04-診断.md DIA-49: 非適格 K(経路内自階層型)でも v1 は一律 MSM -// (K は interface 末端経由で構成し MIOH 非併発 = 1 宣言 1 診断の維持) -@Enumize -sealed interface Ms6Si : Enumized { - interface LeafI : Ms6Si -} diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Ms7K.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Ms7K.kt deleted file mode 100644 index 922569a..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Ms7K.kt +++ /dev/null @@ -1,6 +0,0 @@ -package io.github.projectmapk.diag.fail - -import io.github.projectmapk.sealedClassEnumizer.Enumish - -// docs/test/ケース04-診断.md DIA-49 用の非適格 K(基底より狭い可視性) -internal interface Ms7K : Enumish diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Ms7Si.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Ms7Si.kt deleted file mode 100644 index abafdfd..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Ms7Si.kt +++ /dev/null @@ -1,11 +0,0 @@ -package io.github.projectmapk.diag.fail - -import io.github.projectmapk.sealedClassEnumizer.Enumize -import io.github.projectmapk.sealedClassEnumizer.Enumized - -// docs/test/ケース04-診断.md DIA-49: 非適格 K(狭い可視性)でも v1 は一律 MSM -// (interface supertype は露出検査の対象外のため言語エラーには掛からない) -@Enumize -sealed interface Ms7Si : Enumized { - data object L7 : Ms7Si -} diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Ms8K.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Ms8K.kt deleted file mode 100644 index 89887c6..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Ms8K.kt +++ /dev/null @@ -1,8 +0,0 @@ -package io.github.projectmapk.diag.fail - -import io.github.projectmapk.sealedClassEnumizer.Enumish - -// docs/test/ケース04-診断.md DIA-49 用の非適格 K(経路内具象実装 = 具象メンバーを持つ) -interface Ms8K : Enumish { - override val label: String get() = "k8" -} diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Ms8Si.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Ms8Si.kt deleted file mode 100644 index d21ac62..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Ms8Si.kt +++ /dev/null @@ -1,10 +0,0 @@ -package io.github.projectmapk.diag.fail - -import io.github.projectmapk.sealedClassEnumizer.Enumize -import io.github.projectmapk.sealedClassEnumizer.Enumized - -// docs/test/ケース04-診断.md DIA-49: 非適格 K(経路内具象実装)でも v1 は一律 MSM -@Enumize -sealed interface Ms8Si : Enumized { - data object L8 : Ms8Si -} diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Ms9K.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Ms9K.kt deleted file mode 100644 index 686c92a..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Ms9K.kt +++ /dev/null @@ -1,5 +0,0 @@ -package io.github.projectmapk.diag.fail - -// docs/test/ケース04-診断.md DIA-49 用の非適格 K(非 Enumish サブタイプ。 -// Enumized の上限境界にも反するため言語エラーが併発しうる) -interface Ms9K diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Ms9Si.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Ms9Si.kt deleted file mode 100644 index 1697571..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Ms9Si.kt +++ /dev/null @@ -1,11 +0,0 @@ -package io.github.projectmapk.diag.fail - -import io.github.projectmapk.sealedClassEnumizer.Enumize -import io.github.projectmapk.sealedClassEnumizer.Enumized - -// docs/test/ケース04-診断.md DIA-49: 非適格 K(非 Enumish サブタイプ)。v1 は MSM -// (言語の upper bound violated が併発する形。発火の事実のみ固定する) -@Enumize -sealed interface Ms9Si : Enumized { - data object L9 : Ms9Si -} diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/MsLeaf.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/MsLeaf.kt deleted file mode 100644 index ac1b505..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/MsLeaf.kt +++ /dev/null @@ -1,8 +0,0 @@ -package io.github.projectmapk.diag.fail - -import io.github.projectmapk.sealedClassEnumizer.Enumized - -// docs/test/ケース04-診断.md DIA-48: 階層メンバー(末端)の Enumized<別型> でも MSM -data class MsLeaf(val v: Int) : MsLeafSi, Enumized { - companion object -} diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/MsLeafSi.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/MsLeafSi.kt deleted file mode 100644 index 49c710d..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/MsLeafSi.kt +++ /dev/null @@ -1,7 +0,0 @@ -package io.github.projectmapk.diag.fail - -import io.github.projectmapk.sealedClassEnumizer.Enumize - -// docs/test/ケース04-診断.md DIA-48 用の基底 -@Enumize -sealed interface MsLeafSi diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/MsWrong.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/MsWrong.kt deleted file mode 100644 index 778106c..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/MsWrong.kt +++ /dev/null @@ -1,6 +0,0 @@ -package io.github.projectmapk.diag.fail - -import io.github.projectmapk.sealedClassEnumizer.Enumish - -// docs/test/ケース04-診断.md DIA-46/47/48 用の「別の Enumish 型」 -interface MsWrong : Enumish diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/MultA.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/MultA.kt deleted file mode 100644 index aadbe07..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/MultA.kt +++ /dev/null @@ -1,9 +0,0 @@ -package io.github.projectmapk.diag.fail - -import io.github.projectmapk.sealedClassEnumizer.Enumize - -// docs/test/ケース04-診断.md DIA-13/14 用の階層 A -@Enumize -sealed interface MultA { - data object AL : MultA -} diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/MultB.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/MultB.kt deleted file mode 100644 index 568ce41..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/MultB.kt +++ /dev/null @@ -1,9 +0,0 @@ -package io.github.projectmapk.diag.fail - -import io.github.projectmapk.sealedClassEnumizer.Enumize - -// docs/test/ケース04-診断.md DIA-13/14 用の階層 B -@Enumize -sealed interface MultB { - data object BL : MultB -} diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/MultCross.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/MultCross.kt deleted file mode 100644 index 9a94ac9..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/MultCross.kt +++ /dev/null @@ -1,4 +0,0 @@ -package io.github.projectmapk.diag.fail - -// docs/test/ケース04-診断.md DIA-13: 兄弟 2 基底の sealed 連鎖交差 → ENUMIZE_MULTIPLE_HIERARCHIES + 基底 FQN 2 件 -data object MultCross : MultA, MultB diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/MultMid.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/MultMid.kt deleted file mode 100644 index 44c9cc4..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/MultMid.kt +++ /dev/null @@ -1,4 +0,0 @@ -package io.github.projectmapk.diag.fail - -// docs/test/ケース04-診断.md DIA-14: 中間 sealed の 2 基底交差 → MULTIPLE_HIERARCHIES(中間自身へ報告) -sealed interface MultMid : MultA, MultB diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/MultMidLeaf.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/MultMidLeaf.kt deleted file mode 100644 index 2fb1d89..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/MultMidLeaf.kt +++ /dev/null @@ -1,4 +0,0 @@ -package io.github.projectmapk.diag.fail - -// docs/test/ケース04-診断.md DIA-14: 交差した中間 sealed の末端側にも報告 -data object MultMidLeaf : MultMid diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/MultNested.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/MultNested.kt deleted file mode 100644 index f56993d..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/MultNested.kt +++ /dev/null @@ -1,10 +0,0 @@ -package io.github.projectmapk.diag.fail - -import io.github.projectmapk.sealedClassEnumizer.Enumize - -// docs/test/ケース04-診断.md DIA-15: 末端自身への @Enumize → NESTED + 基底 FQN・自己生成 supertype の食い違いで MSM 併発 -@Enumize -sealed interface MultNested { - @Enumize - data object Leaf : MultNested -} diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/MultNestedMid.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/MultNestedMid.kt deleted file mode 100644 index 8e751b1..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/MultNestedMid.kt +++ /dev/null @@ -1,13 +0,0 @@ -package io.github.projectmapk.diag.fail - -import io.github.projectmapk.sealedClassEnumizer.Enumize - -// docs/test/ケース04-診断.md DIA-15: @Enumize 付き中間は NESTED・その配下末端には MULTIPLE_HIERARCHIES -// (上向き探索は最初の基底で停止せず 2 基底へ到達する) -@Enumize -sealed interface MultNestedMid { - @Enumize - sealed interface Mid : MultNestedMid { - data object MLeaf : Mid - } -} diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/MultipleHierarchies.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/MultipleHierarchies.kt new file mode 100644 index 0000000..daebed2 --- /dev/null +++ b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/MultipleHierarchies.kt @@ -0,0 +1,25 @@ +package io.github.projectmapk.diag.fail + +import io.github.projectmapk.sealedClassEnumizer.Enumize + +// docs/test/ケース04-診断.md DIA-13/14: 兄弟 2 基底の sealed 連鎖交差 → ENUMIZE_MULTIPLE_HIERARCHIES。 +// 末端が直接交差する形(MultCross)と中間 sealed が交差する形(MultMid + MultMidLeaf)を同居させる + +@Enumize +sealed interface MultA { + data object AL : MultA +} + +@Enumize +sealed interface MultB { + data object BL : MultB +} + +// DIA-13: 末端の交差 → MH + 基底 FQN 2 件 +data object MultCross : MultA, MultB + +// DIA-14: 中間 sealed の交差 → MH(中間自身へ報告) +sealed interface MultMid : MultA, MultB + +// DIA-14: 交差した中間 sealed の末端側にも報告 +data object MultMidLeaf : MultMid diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/NestedInHierarchy.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/NestedInHierarchy.kt new file mode 100644 index 0000000..5496c6e --- /dev/null +++ b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/NestedInHierarchy.kt @@ -0,0 +1,22 @@ +package io.github.projectmapk.diag.fail + +import io.github.projectmapk.sealedClassEnumizer.Enumize + +// docs/test/ケース04-診断.md DIA-15: 階層メンバー(末端・中間)自身への @Enumize は NESTED_IN_HIERARCHY + +// 末端自身への付与 → NESTED + 基底 FQN・自己生成 supertype の食い違いで MSM 併発 +@Enumize +sealed interface MultNested { + @Enumize + data object Leaf : MultNested +} + +// @Enumize 付き中間は NESTED・その配下末端には MULTIPLE_HIERARCHIES +// (上向き探索は最初の基底で停止せず 2 基底へ到達する) +@Enumize +sealed interface MultNestedMid { + @Enumize + sealed interface Mid : MultNestedMid { + data object MLeaf : Mid + } +} diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/NotSealed.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/NotSealed.kt new file mode 100644 index 0000000..0e7e795 --- /dev/null +++ b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/NotSealed.kt @@ -0,0 +1,50 @@ +package io.github.projectmapk.diag.fail + +import io.github.projectmapk.sealedClassEnumizer.Enumize + +// docs/test/ケース04-診断.md DIA-01: K1 の負値(非 sealed 分類子)全種別への付与 → ENUMIZE_NOT_SEALED。 +// 非 object 宣言はアノテーション行・object 宣言は object キーワード行に報告される + +@Enumize +enum class NsEnum { HELP, VERSION } + +@Enumize +annotation class NsAnnotation + +@Enumize +object NsObject + +@Enumize +data object NsDataObject + +@Enumize +open class NsOpenClass + +@Enumize +abstract class NsAbstractClass + +// (修飾なし)final class +@Enumize +class NsFinalClass + +@Enumize +data class NsDataClass(val v: Int) + +// value class は sealed 不能 +@Enumize +@JvmInline +value class NsValueClass(val v: Int) + +@Enumize +interface NsInterface + +@Enumize +fun interface NsFunInterface { + fun handle(x: Int): Int +} + +// inner は sealed 不能の帰結 +class NsInnerHost { + @Enumize + inner class NsInner +} diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/NsAbstractClass.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/NsAbstractClass.kt deleted file mode 100644 index bc34a77..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/NsAbstractClass.kt +++ /dev/null @@ -1,7 +0,0 @@ -package io.github.projectmapk.diag.fail - -import io.github.projectmapk.sealedClassEnumizer.Enumize - -// docs/test/ケース04-診断.md DIA-01: abstract class への付与 → ENUMIZE_NOT_SEALED -@Enumize -abstract class NsAbstractClass diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/NsAnnotation.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/NsAnnotation.kt deleted file mode 100644 index fdfd6d6..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/NsAnnotation.kt +++ /dev/null @@ -1,7 +0,0 @@ -package io.github.projectmapk.diag.fail - -import io.github.projectmapk.sealedClassEnumizer.Enumize - -// docs/test/ケース04-診断.md DIA-01: annotation class への付与 → ENUMIZE_NOT_SEALED -@Enumize -annotation class NsAnnotation diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/NsDataClass.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/NsDataClass.kt deleted file mode 100644 index c2e33e1..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/NsDataClass.kt +++ /dev/null @@ -1,7 +0,0 @@ -package io.github.projectmapk.diag.fail - -import io.github.projectmapk.sealedClassEnumizer.Enumize - -// docs/test/ケース04-診断.md DIA-01: data class への付与 → ENUMIZE_NOT_SEALED -@Enumize -data class NsDataClass(val v: Int) diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/NsDataObject.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/NsDataObject.kt deleted file mode 100644 index 8e86059..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/NsDataObject.kt +++ /dev/null @@ -1,7 +0,0 @@ -package io.github.projectmapk.diag.fail - -import io.github.projectmapk.sealedClassEnumizer.Enumize - -// docs/test/ケース04-診断.md DIA-01: data object への付与 → ENUMIZE_NOT_SEALED -@Enumize -data object NsDataObject diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/NsEnum.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/NsEnum.kt deleted file mode 100644 index 0686a55..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/NsEnum.kt +++ /dev/null @@ -1,7 +0,0 @@ -package io.github.projectmapk.diag.fail - -import io.github.projectmapk.sealedClassEnumizer.Enumize - -// docs/test/ケース04-診断.md DIA-01: enum class への付与 → ENUMIZE_NOT_SEALED -@Enumize -enum class NsEnum { HELP, VERSION } diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/NsFinalClass.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/NsFinalClass.kt deleted file mode 100644 index fa6925d..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/NsFinalClass.kt +++ /dev/null @@ -1,7 +0,0 @@ -package io.github.projectmapk.diag.fail - -import io.github.projectmapk.sealedClassEnumizer.Enumize - -// docs/test/ケース04-診断.md DIA-01: (修飾なし)final class への付与 → ENUMIZE_NOT_SEALED -@Enumize -class NsFinalClass diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/NsFunInterface.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/NsFunInterface.kt deleted file mode 100644 index 0fdf525..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/NsFunInterface.kt +++ /dev/null @@ -1,9 +0,0 @@ -package io.github.projectmapk.diag.fail - -import io.github.projectmapk.sealedClassEnumizer.Enumize - -// docs/test/ケース04-診断.md DIA-01: fun interface(非 sealed)への付与 → ENUMIZE_NOT_SEALED -@Enumize -fun interface NsFunInterface { - fun handle(x: Int): Int -} diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/NsInner.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/NsInner.kt deleted file mode 100644 index 9958dfc..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/NsInner.kt +++ /dev/null @@ -1,9 +0,0 @@ -package io.github.projectmapk.diag.fail - -import io.github.projectmapk.sealedClassEnumizer.Enumize - -// docs/test/ケース04-診断.md DIA-01: inner class への付与(inner は sealed 不能の帰結)→ ENUMIZE_NOT_SEALED -class NsInnerHost { - @Enumize - inner class NsInner -} diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/NsInterface.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/NsInterface.kt deleted file mode 100644 index 263670f..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/NsInterface.kt +++ /dev/null @@ -1,7 +0,0 @@ -package io.github.projectmapk.diag.fail - -import io.github.projectmapk.sealedClassEnumizer.Enumize - -// docs/test/ケース04-診断.md DIA-01: 非 sealed interface への付与 → ENUMIZE_NOT_SEALED -@Enumize -interface NsInterface diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/NsObject.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/NsObject.kt deleted file mode 100644 index 2873966..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/NsObject.kt +++ /dev/null @@ -1,7 +0,0 @@ -package io.github.projectmapk.diag.fail - -import io.github.projectmapk.sealedClassEnumizer.Enumize - -// docs/test/ケース04-診断.md DIA-01: object への付与 → ENUMIZE_NOT_SEALED(object 宣言は object キーワード行に報告) -@Enumize -object NsObject diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/NsOpenClass.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/NsOpenClass.kt deleted file mode 100644 index 2f289df..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/NsOpenClass.kt +++ /dev/null @@ -1,7 +0,0 @@ -package io.github.projectmapk.diag.fail - -import io.github.projectmapk.sealedClassEnumizer.Enumize - -// docs/test/ケース04-診断.md DIA-01: open class への付与 → ENUMIZE_NOT_SEALED -@Enumize -open class NsOpenClass diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/NsValueClass.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/NsValueClass.kt deleted file mode 100644 index d0855d3..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/NsValueClass.kt +++ /dev/null @@ -1,8 +0,0 @@ -package io.github.projectmapk.diag.fail - -import io.github.projectmapk.sealedClassEnumizer.Enumize - -// docs/test/ケース04-診断.md DIA-01: value class への付与 → ENUMIZE_NOT_SEALED(value class は sealed 不能) -@Enumize -@JvmInline -value class NsValueClass(val v: Int) diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/NulArg.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/NulArg.kt deleted file mode 100644 index d56ebce..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/NulArg.kt +++ /dev/null @@ -1,10 +0,0 @@ -package io.github.projectmapk.diag.fail - -import io.github.projectmapk.sealedClassEnumizer.Enumize -import io.github.projectmapk.sealedClassEnumizer.Enumized - -// docs/test/ケース04-診断.md DIA-53: nullable 型引数は Enumized の境界違反(言語エラー) -@Enumize -sealed interface NulArg : Enumized { - data object L : NulArg -} diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/OmitHost.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/OmitHost.kt deleted file mode 100644 index 1d325fb..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/OmitHost.kt +++ /dev/null @@ -1,7 +0,0 @@ -package io.github.projectmapk.diag.fail - -// docs/test/ケース04-診断.md DIA-33: 手動 companion(`: Enumish` 明示宣言)の生成対象メンバー省略 -// → 生成がメンバーを充足しエラー無し(COMPANION_REQUIRED 診断も abstract 未実装エラーも出ない) -class OmitHost : OmitSi { - companion object : OmitSi.Enumish -} diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/OmitSi.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/OmitSi.kt index b044f40..6520d8d 100644 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/OmitSi.kt +++ b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/OmitSi.kt @@ -5,3 +5,9 @@ import io.github.projectmapk.sealedClassEnumizer.Enumize // docs/test/ケース04-診断.md DIA-33 用の基底 @Enumize sealed interface OmitSi + +// DIA-33: 手動 companion(`: Enumish` 明示宣言)の生成対象メンバー省略 +// → 生成がメンバーを充足しエラー無し(COMPANION_REQUIRED 診断も abstract 未実装エラーも出ない) +class OmitHost : OmitSi { + companion object : OmitSi.Enumish +} diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/PrivHost.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/PrivHost.kt deleted file mode 100644 index 127557e..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/PrivHost.kt +++ /dev/null @@ -1,13 +0,0 @@ -package io.github.projectmapk.diag.fail - -import io.github.projectmapk.sealedClassEnumizer.Enumize - -// docs/test/ケース04-診断.md DIA-28 用: private ネスト基底(外側クラス本体内では全 API 成立) -class PrivHost { - @Enumize - private sealed interface N { - data object L : N - } - - fun insideCount(): Int = N.Enumish.entries.size -} diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/PrivHostUse.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/PrivHostUse.kt deleted file mode 100644 index 0a8ddcb..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/PrivHostUse.kt +++ /dev/null @@ -1,4 +0,0 @@ -package io.github.projectmapk.diag.fail - -// docs/test/ケース04-診断.md DIA-28: private ネスト基底を外側クラスの外から参照 → 言語可視性エラーのみ -fun privHostUse(x: PrivHost.N): String = x.toString() diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/ProtHost.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/ProtHost.kt deleted file mode 100644 index 17a1858..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/ProtHost.kt +++ /dev/null @@ -1,11 +0,0 @@ -package io.github.projectmapk.diag.fail - -import io.github.projectmapk.sealedClassEnumizer.Enumize - -// docs/test/ケース04-診断.md DIA-28 用: protected ネスト基底(サブクラス文脈の成立側は XMP-50) -open class ProtHost { - @Enumize - protected sealed interface P { - data object L : P - } -} diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/ProtHostUse.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/ProtHostUse.kt deleted file mode 100644 index 4536d51..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/ProtHostUse.kt +++ /dev/null @@ -1,4 +0,0 @@ -package io.github.projectmapk.diag.fail - -// docs/test/ケース04-診断.md DIA-28: protected ネスト基底を非サブクラス位置から参照 → 言語可視性エラーのみ -fun protHostUse(x: ProtHost.P): String = x.toString() diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/ReservedNameClash.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/ReservedNameClash.kt new file mode 100644 index 0000000..e25de5b --- /dev/null +++ b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/ReservedNameClash.kt @@ -0,0 +1,26 @@ +package io.github.projectmapk.diag.fail + +import io.github.projectmapk.sealedClassEnumizer.Enumize + +// docs/test/ケース04-診断.md DIA-54: 既存ネスト宣言 Enumish → ENUMIZE_RESERVED_NAME_CLASH。 +// class / object / interface の各亜種と、末端兼務でも予約名が優先されることを固定する + +@Enumize +sealed interface Rn1 { + class Enumish +} + +@Enumize +sealed interface Rn2 { + object Enumish +} + +@Enumize +sealed interface Rn3 { + interface Enumish +} + +@Enumize +sealed interface Rn4 { + object Enumish : Rn4 +} diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Rn1.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Rn1.kt deleted file mode 100644 index f1a2a03..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Rn1.kt +++ /dev/null @@ -1,9 +0,0 @@ -package io.github.projectmapk.diag.fail - -import io.github.projectmapk.sealedClassEnumizer.Enumize - -// docs/test/ケース04-診断.md DIA-54: 既存ネスト宣言 Enumish(class 亜種)→ ENUMIZE_RESERVED_NAME_CLASH -@Enumize -sealed interface Rn1 { - class Enumish -} diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Rn2.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Rn2.kt deleted file mode 100644 index 4c3242d..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Rn2.kt +++ /dev/null @@ -1,9 +0,0 @@ -package io.github.projectmapk.diag.fail - -import io.github.projectmapk.sealedClassEnumizer.Enumize - -// docs/test/ケース04-診断.md DIA-54: 既存ネスト宣言 Enumish(object 亜種)→ RESERVED_NAME_CLASH -@Enumize -sealed interface Rn2 { - object Enumish -} diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Rn3.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Rn3.kt deleted file mode 100644 index 8500972..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Rn3.kt +++ /dev/null @@ -1,9 +0,0 @@ -package io.github.projectmapk.diag.fail - -import io.github.projectmapk.sealedClassEnumizer.Enumize - -// docs/test/ケース04-診断.md DIA-54: 既存ネスト宣言 Enumish(interface 亜種)→ RESERVED_NAME_CLASH -@Enumize -sealed interface Rn3 { - interface Enumish -} diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Rn4.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Rn4.kt deleted file mode 100644 index ae9e57e..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Rn4.kt +++ /dev/null @@ -1,9 +0,0 @@ -package io.github.projectmapk.diag.fail - -import io.github.projectmapk.sealedClassEnumizer.Enumize - -// docs/test/ケース04-診断.md DIA-54: 予約名 Enumish の object が末端兼務でも予約名優先 → RESERVED_NAME_CLASH -@Enumize -sealed interface Rn4 { - object Enumish : Rn4 -} diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Sc.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Sc.kt deleted file mode 100644 index f02f3ac..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Sc.kt +++ /dev/null @@ -1,9 +0,0 @@ -package io.github.projectmapk.diag.fail - -import io.github.projectmapk.sealedClassEnumizer.Enumize - -// docs/test/ケース04-診断.md DIA-64 用の sealed class 基底(末端種別境界の確認) -@Enumize -sealed class Sc { - data object Ok : Sc() -} diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/ScAnn.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/ScAnn.kt deleted file mode 100644 index 0547c34..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/ScAnn.kt +++ /dev/null @@ -1,4 +0,0 @@ -package io.github.projectmapk.diag.fail - -// docs/test/ケース04-診断.md DIA-64: annotation class は supertype を持てない → 言語エラー -annotation class ScAnn : Sc() diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/ScEnum.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/ScEnum.kt deleted file mode 100644 index 5cacf22..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/ScEnum.kt +++ /dev/null @@ -1,6 +0,0 @@ -package io.github.projectmapk.diag.fail - -// docs/test/ケース04-診断.md DIA-64: enum class は class を継承できない → 言語エラー -enum class ScEnum : Sc() { - ONE, -} diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/ScIface.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/ScIface.kt deleted file mode 100644 index 2fff0c4..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/ScIface.kt +++ /dev/null @@ -1,4 +0,0 @@ -package io.github.projectmapk.diag.fail - -// docs/test/ケース04-診断.md DIA-64: interface は class を継承できない → 言語エラー -interface ScIface : Sc diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/ScValue.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/ScValue.kt deleted file mode 100644 index 2ae2c1d..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/ScValue.kt +++ /dev/null @@ -1,5 +0,0 @@ -package io.github.projectmapk.diag.fail - -// docs/test/ケース04-診断.md DIA-64: value class は class を継承できない → 言語エラー -@JvmInline -value class ScValue(val v: Int) : Sc() diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/ScopePriv.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/ScopePriv.kt index d4f6a2f..b91a29e 100644 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/ScopePriv.kt +++ b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/ScopePriv.kt @@ -2,7 +2,8 @@ package io.github.projectmapk.diag.fail import io.github.projectmapk.sealedClassEnumizer.Enumize -// docs/test/ケース04-診断.md DIA-28 用: private トップレベル基底(同一ファイル内では成立する側) +// docs/test/ケース04-診断.md DIA-28 用: private トップレベル基底(同一ファイル内では成立する側)。 +// private トップレベルはファイルスコープのため、参照側は ScopePrivUse.kt へ分離する @Enumize private sealed interface ScopePriv { data object L : ScopePriv diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/ScopePrivUse.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/ScopePrivUse.kt index 6cba672..4604396 100644 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/ScopePrivUse.kt +++ b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/ScopePrivUse.kt @@ -1,4 +1,5 @@ package io.github.projectmapk.diag.fail -// docs/test/ケース04-診断.md DIA-28: private トップレベル基底を別ファイルから参照 → 言語可視性エラーのみ +// docs/test/ケース04-診断.md DIA-28: private トップレベル基底を別ファイルから参照 → 言語可視性エラーのみ。 +// 参照が基底と別ファイルであること自体が本ケースの成立条件である fun scopePrivUse(): Int = ScopePriv.Enumish.entries.size diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/SealedClassLeafKinds.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/SealedClassLeafKinds.kt new file mode 100644 index 0000000..a1eea3b --- /dev/null +++ b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/SealedClassLeafKinds.kt @@ -0,0 +1,26 @@ +package io.github.projectmapk.diag.fail + +import io.github.projectmapk.sealedClassEnumizer.Enumize + +// docs/test/ケース04-診断.md DIA-64: sealed class 基底の末端種別境界。 +// class を継承できない種別は言語エラーへ委譲され、プラグイン診断は出さない + +@Enumize +sealed class Sc { + data object Ok : Sc() +} + +// annotation class は supertype を持てない +annotation class ScAnn : Sc() + +// enum class は class を継承できない +enum class ScEnum : Sc() { + ONE, +} + +// interface は class を継承できない +interface ScIface : Sc + +// value class は class を継承できない +@JvmInline +value class ScValue(val v: Int) : Sc() diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/TfA.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/TfA.kt deleted file mode 100644 index d09565f..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/TfA.kt +++ /dev/null @@ -1,9 +0,0 @@ -package io.github.projectmapk.diag.fail - -import io.github.projectmapk.sealedClassEnumizer.Enumize - -// docs/test/ケース04-診断.md DIA-50 用の階層 A(末端 TfCross が属する側) -@Enumize -sealed interface TfA { - data object La : TfA -} diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/TfB.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/TfB.kt deleted file mode 100644 index 5e3f9f7..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/TfB.kt +++ /dev/null @@ -1,9 +0,0 @@ -package io.github.projectmapk.diag.fail - -import io.github.projectmapk.sealedClassEnumizer.Enumize - -// docs/test/ケース04-診断.md DIA-50 用の階層 B(生成 Enumish を型引数として持ち込まれる側) -@Enumize -sealed interface TfB { - data object Lb : TfB -} diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/TfCross.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/TfCross.kt index f69d81e..a3aa291 100644 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/TfCross.kt +++ b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/TfCross.kt @@ -1,6 +1,20 @@ package io.github.projectmapk.diag.fail +import io.github.projectmapk.sealedClassEnumizer.Enumize import io.github.projectmapk.sealedClassEnumizer.Enumized // docs/test/ケース04-診断.md DIA-50: Enumized<他階層 Enumish> の直接実装は MSM であって MH ではない + +// 末端 TfCross が属する側 +@Enumize +sealed interface TfA { + data object La : TfA +} + +// 生成 Enumish を型引数として持ち込まれる側 +@Enumize +sealed interface TfB { + data object Lb : TfB +} + data object TfCross : TfA, Enumized diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Proj.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/TypeArgumentBounds.kt similarity index 51% rename from integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Proj.kt rename to integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/TypeArgumentBounds.kt index bf5c830..118ae94 100644 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Proj.kt +++ b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/TypeArgumentBounds.kt @@ -3,8 +3,16 @@ package io.github.projectmapk.diag.fail import io.github.projectmapk.sealedClassEnumizer.Enumize import io.github.projectmapk.sealedClassEnumizer.Enumized -// docs/test/ケース04-診断.md DIA-53: supertype 直接型引数の射影は言語が先回りし MSM 不到達 +// docs/test/ケース04-診断.md DIA-53: supertype 直接型引数の射影・nullable は言語が先回りし MSM 不到達 + +// 射影 → 言語 PROJECTION_IN_IMMEDIATE_ARGUMENT_TO_SUPERTYPE @Enumize sealed interface Proj : Enumized { data object L : Proj } + +// nullable 型引数は Enumized の境界違反 +@Enumize +sealed interface NulArg : Enumized { + data object L : NulArg +} diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/VisibilityScope.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/VisibilityScope.kt new file mode 100644 index 0000000..6a09d5f --- /dev/null +++ b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/VisibilityScope.kt @@ -0,0 +1,31 @@ +package io.github.projectmapk.diag.fail + +import io.github.projectmapk.sealedClassEnumizer.Enumize + +// docs/test/ケース04-診断.md DIA-28: 可視性スコープ違反は言語エラーのみ(プラグイン診断は不在)。 +// private / protected はクラススコープであり、同一ファイルでも外側クラスの外からは参照できない。 +// private トップレベル基底はファイルスコープのため ScopePriv.kt / ScopePrivUse.kt が別に担う + +// private ネスト基底(外側クラス本体内では全 API 成立) +class PrivHost { + @Enumize + private sealed interface N { + data object L : N + } + + fun insideCount(): Int = N.Enumish.entries.size +} + +// 外側クラスの外からの参照 → 言語可視性エラーのみ +fun privHostUse(x: PrivHost.N): String = x.toString() + +// protected ネスト基底(サブクラス文脈の成立側は XMP-50) +open class ProtHost { + @Enumize + protected sealed interface P { + data object L : P + } +} + +// 非サブクラス位置からの参照 → 言語可視性エラーのみ +fun protHostUse(x: ProtHost.P): String = x.toString() diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/WeakBase.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/WeakBase.kt deleted file mode 100644 index f1aafb8..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/WeakBase.kt +++ /dev/null @@ -1,6 +0,0 @@ -package io.github.projectmapk.diag.fail - -// docs/test/ケース04-診断.md DIA-63 用: public メンバーを持つ継承元(手書き模擬) -interface WeakBase { - val v: Int -} diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/WeakImpl.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/WeakImpl.kt deleted file mode 100644 index 0fa66f4..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/WeakImpl.kt +++ /dev/null @@ -1,7 +0,0 @@ -package io.github.projectmapk.diag.fail - -// docs/test/ケース04-診断.md DIA-63: override 可視性の縮小 → CANNOT_WEAKEN_ACCESS_PRIVILEGE -// (生成メンバーの internal 化が不成立である言語根拠) -class WeakImpl : WeakBase { - internal override val v: Int = 1 -} From ae17c8567b56f6d1558c26fa6a029a3a677f5cfb Mon Sep 17 00:00:00 2001 From: wrongwrong Date: Sun, 2 Aug 2026 00:51:57 +0900 Subject: [PATCH 6/9] =?UTF-8?q?test:=20diag-ok=20=E3=82=92=E8=A8=BA?= =?UTF-8?q?=E6=96=AD=E3=82=B1=E3=83=BC=E3=82=B9=E5=8D=98=E4=BD=8D=E3=81=AE?= =?UTF-8?q?=E3=83=95=E3=82=A1=E3=82=A4=E3=83=AB=E3=81=B8=E5=86=8D=E7=B7=A8?= =?UTF-8?q?=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1 宣言 1 ファイルだった構成を 1 ファイル = 1 診断ケースへ集約する (86 -> 25 ファイル)。DiagSingleOkTest の参照ファイル名と ES 警告の 行照合は再編後の実測値へ書き換える。 生成型への頭別名(NmThSi : NmThAlias)は別名が基底より先に解決される 配置が成立条件であり、その順序はファイル名順である。別名ファイルは TypealiasAliases として基底の TypealiasMatch より前へ置く。 分離を保つのは検証の成立条件となる配置のみとする。 - NmVis3Mid: private トップレベル中間は基底と別ファイル - NmAlImported / NmStarNoc / NmFarNoc: import 集合が解決文脈 - NmTlSame: 同一ファイル別名の raw 追跡 Co-Authored-By: Claude Opus 5 --- .../projectmapk/gradle/DiagSingleOkTest.kt | 79 +++++++++---------- .../projectmapk/diag/ok/AbsorptionNearMiss.kt | 36 +++++++++ .../projectmapk/diag/ok/ClassInheritance.kt | 40 ++++++++++ .../projectmapk/diag/ok/CompanionNearMiss.kt | 19 +++++ .../projectmapk/diag/ok/ExtensionShadowed.kt | 54 +++++++++++++ .../projectmapk/diag/ok/HierarchyNearMiss.kt | 22 ++++++ .../projectmapk/diag/ok/LabelNearMiss.kt | 52 ++++++++++++ .../projectmapk/diag/ok/ManualImplAllowed.kt | 41 ++++++++++ .../diag/ok/ManualSupertypeMatch.kt | 34 ++++++++ .../io/github/projectmapk/diag/ok/NmAbs.kt | 11 --- .../io/github/projectmapk/diag/ok/NmAbsSub.kt | 4 - .../io/github/projectmapk/diag/ok/NmAl.kt | 33 +++++++- .../io/github/projectmapk/diag/ok/NmAlFoo.kt | 6 -- .../projectmapk/diag/ok/NmAlImported.kt | 17 ++++ .../io/github/projectmapk/diag/ok/NmAlNoc.kt | 4 - .../io/github/projectmapk/diag/ok/NmBase.kt | 10 --- .../io/github/projectmapk/diag/ok/NmCross.kt | 11 --- .../io/github/projectmapk/diag/ok/NmDia.kt | 11 --- .../io/github/projectmapk/diag/ok/NmDirNoc.kt | 4 - .../io/github/projectmapk/diag/ok/NmDup.kt | 9 --- .../io/github/projectmapk/diag/ok/NmEc.kt | 13 --- .../github/projectmapk/diag/ok/NmEnumLeaf.kt | 6 -- .../io/github/projectmapk/diag/ok/NmFac.kt | 15 ---- .../io/github/projectmapk/diag/ok/NmFqFoo.kt | 4 - .../io/github/projectmapk/diag/ok/NmHost.kt | 6 -- .../github/projectmapk/diag/ok/NmHostBase.kt | 7 -- .../io/github/projectmapk/diag/ok/NmImBar.kt | 6 -- .../io/github/projectmapk/diag/ok/NmImFoo.kt | 8 -- .../io/github/projectmapk/diag/ok/NmImNoc.kt | 6 -- .../io/github/projectmapk/diag/ok/NmIn.kt | 11 --- .../io/github/projectmapk/diag/ok/NmInHost.kt | 6 -- .../io/github/projectmapk/diag/ok/NmMid.kt | 9 --- .../github/projectmapk/diag/ok/NmMidOuter.kt | 6 -- .../github/projectmapk/diag/ok/NmNestHost.kt | 6 -- .../io/github/projectmapk/diag/ok/NmNestSi.kt | 7 -- .../github/projectmapk/diag/ok/NmOutHost.kt | 11 --- .../io/github/projectmapk/diag/ok/NmPlain.kt | 6 -- .../io/github/projectmapk/diag/ok/NmRnc.kt | 6 -- .../io/github/projectmapk/diag/ok/NmRt.kt | 15 ---- .../io/github/projectmapk/diag/ok/NmSelf.kt | 10 --- .../github/projectmapk/diag/ok/NmSubBase.kt | 13 --- .../github/projectmapk/diag/ok/NmSubHost.kt | 6 -- .../github/projectmapk/diag/ok/NmTaAlias.kt | 4 - .../io/github/projectmapk/diag/ok/NmTaSi.kt | 10 --- .../github/projectmapk/diag/ok/NmThAlias.kt | 6 -- .../io/github/projectmapk/diag/ok/NmThSi.kt | 9 --- .../github/projectmapk/diag/ok/NmTlAlias.kt | 4 - .../io/github/projectmapk/diag/ok/NmTlSame.kt | 3 +- .../io/github/projectmapk/diag/ok/NmTlSi.kt | 9 --- .../io/github/projectmapk/diag/ok/NmTs.kt | 7 -- .../io/github/projectmapk/diag/ok/NmTsBase.kt | 6 -- .../io/github/projectmapk/diag/ok/NmTsLeaf.kt | 4 - .../io/github/projectmapk/diag/ok/NmTsMan.kt | 8 -- .../io/github/projectmapk/diag/ok/NmVis1.kt | 11 --- .../io/github/projectmapk/diag/ok/NmVis2.kt | 10 --- .../io/github/projectmapk/diag/ok/NmVis3.kt | 7 -- .../github/projectmapk/diag/ok/NmVis3Mid.kt | 4 +- .../io/github/projectmapk/diag/ok/NmVis4.kt | 11 --- .../io/github/projectmapk/diag/ok/NmVis5.kt | 7 -- .../github/projectmapk/diag/ok/NmVis5Wide.kt | 4 - .../io/github/projectmapk/diag/ok/NmVis6.kt | 12 --- .../io/github/projectmapk/diag/ok/NmVis7.kt | 11 --- .../diag/ok/NonGeneratedTargets.kt | 32 ++++++++ .../io/github/projectmapk/diag/ok/OkC.kt | 11 --- .../io/github/projectmapk/diag/ok/OkCi.kt | 7 -- .../io/github/projectmapk/diag/ok/OkCiBase.kt | 6 -- .../io/github/projectmapk/diag/ok/OkCiFn.kt | 4 - .../github/projectmapk/diag/ok/OkCiFnBase.kt | 6 -- .../io/github/projectmapk/diag/ok/OkCiOpen.kt | 4 - .../io/github/projectmapk/diag/ok/OkCiPv.kt | 4 - .../github/projectmapk/diag/ok/OkCiPvBase.kt | 8 -- .../io/github/projectmapk/diag/ok/OkCiSi.kt | 7 -- .../io/github/projectmapk/diag/ok/OkEmpty.kt | 7 -- .../io/github/projectmapk/diag/ok/OkGen.kt | 11 --- .../github/projectmapk/diag/ok/OkIndBase.kt | 6 -- .../io/github/projectmapk/diag/ok/OkIndSi.kt | 9 --- .../io/github/projectmapk/diag/ok/OkKca.kt | 13 --- .../io/github/projectmapk/diag/ok/OkKex.kt | 12 --- .../io/github/projectmapk/diag/ok/OkM.kt | 12 --- .../github/projectmapk/diag/ok/OkManLeaf.kt | 11 --- .../io/github/projectmapk/diag/ok/OkManSi.kt | 9 --- .../io/github/projectmapk/diag/ok/OkR.kt | 13 --- .../io/github/projectmapk/diag/ok/OkRn.kt | 11 --- .../io/github/projectmapk/diag/ok/OkSc.kt | 9 --- .../io/github/projectmapk/diag/ok/OkSi.kt | 11 --- .../diag/ok/ReservedNameNearMiss.kt | 29 +++++++ .../projectmapk/diag/ok/ToStringExempt.kt | 23 ++++++ .../projectmapk/diag/ok/TypealiasAliases.kt | 17 ++++ .../projectmapk/diag/ok/TypealiasMatch.kt | 26 ++++++ .../projectmapk/diag/ok/VisibilityNearMiss.kt | 55 +++++++++++++ .../github/projectmapk/diag/ok/WellFormed.kt | 33 ++++++++ .../io/github/projectmapk/diag/ok/Wl2Si.kt | 13 --- .../io/github/projectmapk/diag/ok/Wl3Leaf.kt | 4 - .../io/github/projectmapk/diag/ok/Wl3Named.kt | 6 -- .../io/github/projectmapk/diag/ok/Wl3Si.kt | 7 -- .../io/github/projectmapk/diag/ok/WlPriv.kt | 13 --- .../io/github/projectmapk/diag/ok/WlSi.kt | 17 ---- 97 files changed, 604 insertions(+), 689 deletions(-) create mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/AbsorptionNearMiss.kt create mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/ClassInheritance.kt create mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/CompanionNearMiss.kt create mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/ExtensionShadowed.kt create mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/HierarchyNearMiss.kt create mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/LabelNearMiss.kt create mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/ManualImplAllowed.kt create mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/ManualSupertypeMatch.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmAbs.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmAbsSub.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmAlFoo.kt create mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmAlImported.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmAlNoc.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmBase.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmCross.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmDia.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmDirNoc.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmDup.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmEc.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmEnumLeaf.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmFac.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmFqFoo.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmHost.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmHostBase.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmImBar.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmImFoo.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmImNoc.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmIn.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmInHost.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmMid.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmMidOuter.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmNestHost.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmNestSi.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmOutHost.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmPlain.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmRnc.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmRt.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmSelf.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmSubBase.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmSubHost.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmTaAlias.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmTaSi.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmThAlias.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmThSi.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmTlAlias.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmTlSi.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmTs.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmTsBase.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmTsLeaf.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmTsMan.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmVis1.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmVis2.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmVis3.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmVis4.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmVis5.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmVis5Wide.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmVis6.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmVis7.kt create mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NonGeneratedTargets.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/OkC.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/OkCi.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/OkCiBase.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/OkCiFn.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/OkCiFnBase.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/OkCiOpen.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/OkCiPv.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/OkCiPvBase.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/OkCiSi.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/OkEmpty.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/OkGen.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/OkIndBase.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/OkIndSi.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/OkKca.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/OkKex.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/OkM.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/OkManLeaf.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/OkManSi.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/OkR.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/OkRn.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/OkSc.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/OkSi.kt create mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/ReservedNameNearMiss.kt create mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/ToStringExempt.kt create mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/TypealiasAliases.kt create mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/TypealiasMatch.kt create mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/VisibilityNearMiss.kt create mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/WellFormed.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/Wl2Si.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/Wl3Leaf.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/Wl3Named.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/Wl3Si.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/WlPriv.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/WlSi.kt diff --git a/integration-test/gradle-integration/src/test/kotlin/io/github/projectmapk/gradle/DiagSingleOkTest.kt b/integration-test/gradle-integration/src/test/kotlin/io/github/projectmapk/gradle/DiagSingleOkTest.kt index 60baa87..0d85e49 100644 --- a/integration-test/gradle-integration/src/test/kotlin/io/github/projectmapk/gradle/DiagSingleOkTest.kt +++ b/integration-test/gradle-integration/src/test/kotlin/io/github/projectmapk/gradle/DiagSingleOkTest.kt @@ -9,7 +9,8 @@ import kotlin.test.Test // 単一モジュールの near-miss 非発火・EXTENSION_SHADOWED 警告・raw 追跡表記を diag-ok フィクスチャの // 1 回の成功ビルドで全件検証する(docs/test/ケース04-診断.md の DIA near-miss 群・ // docs/test/フィクスチャ構成.md §3)。成功ビルド自体がエラー系診断の総体的な非発火を含意し、 -// 各メソッドは当該断片の不在(またはファイル毎の無診断)で境界を固定する +// 各メソッドは当該断片の不在(またはファイル毎の無診断)で境界を固定する。 +// フィクスチャは 1 ファイル = 1 診断ケースであり、ES 警告の行照合はその配置に対する実測値である class DiagSingleOkTest : DiagTestBase() { private fun ok(): String = successOutput("diag-ok", "compileKotlin") @@ -18,10 +19,8 @@ class DiagSingleOkTest : DiagTestBase() { @Test fun wellFormedAndBoundaryHierarchiesReportNothing() { val output = ok() - listOf("OkSi.kt", "OkSc.kt", "OkEmpty.kt", "OkGen.kt").forEach { file -> - assertFragmentAbsentAt(output, file, "e: ") - assertFragmentAbsentAt(output, file, "w: ") - } + assertFragmentAbsentAt(output, "WellFormed.kt", "e: ") + assertFragmentAbsentAt(output, "WellFormed.kt", "w: ") } // docs/test/ケース04-診断.md DIA-05: @Enumize 付き local class は全入口で除外され無診断素通り @@ -53,8 +52,8 @@ class DiagSingleOkTest : DiagTestBase() { @Test fun nonInnerNestedLeafDoesNotReport() { val output = ok() - assertFragmentAbsentAt(output, "NmNestHost.kt", "e: ") - assertFragmentAbsentAt(output, "NmNestHost.kt", "w: ") + assertFragmentAbsentAt(output, "AbsorptionNearMiss.kt", "e: ") + assertFragmentAbsentAt(output, "AbsorptionNearMiss.kt", "w: ") } // docs/test/ケース04-診断.md DIA-26: 3 段規則の成立形(規則 1 / 2・広い末端 object・private 基底・ @@ -77,15 +76,9 @@ class DiagSingleOkTest : DiagTestBase() { fun everyRawSupertypeNotationYieldsAKind() { val output = ok() assertFragmentAbsent(output, DiagFragments.LANG_ABSTRACT_MEMBER_NOT_IMPLEMENTED) - listOf( - "NmDirNoc.kt", - "NmImNoc.kt", - "NmImBar.kt", - "NmFqFoo.kt", - "NmEnumLeaf.kt", - "NmOutHost.kt", - ) - .forEach { file -> assertFragmentAbsentAt(output, file, "e: ") } + listOf("NmAl.kt", "NmAlImported.kt").forEach { file -> + assertFragmentAbsentAt(output, file, "e: ") + } } // docs/test/ケース04-診断.md DIA-32: typealias 表記(同一 pkg・別 pkg 明示 / star import)と @@ -93,8 +86,7 @@ class DiagSingleOkTest : DiagTestBase() { @Test fun typealiasNotationsYieldAKind() { val output = ok() - listOf("NmAlNoc.kt", "NmAlFoo.kt", "NmImFoo.kt", "NmFarNoc.kt", "NmStarNoc.kt").forEach { - file -> + listOf("NmAl.kt", "NmAlImported.kt", "NmFarNoc.kt", "NmStarNoc.kt").forEach { file -> assertFragmentAbsentAt(output, file, "e: ") } } @@ -111,18 +103,30 @@ class DiagSingleOkTest : DiagTestBase() { @Test fun declaredLabelMemberWarns() { val output = ok() - assertDiagnosticAt(output, "WlSi.kt", 8, DiagFragments.EXTENSION_SHADOWED) - assertDiagnosticAt(output, "Wl2Si.kt", 8, DiagFragments.EXTENSION_SHADOWED) - assertDiagnosticAt(output, "WlSi.kt", 13, DiagFragments.EXTENSION_SHADOWED) - assertDiagnosticAt(output, "OkManLeaf.kt", 8, DiagFragments.EXTENSION_SHADOWED) + assertDiagnosticAt(output, "ExtensionShadowed.kt", 13, DiagFragments.EXTENSION_SHADOWED) + assertDiagnosticAt(output, "ExtensionShadowed.kt", 18, DiagFragments.EXTENSION_SHADOWED) + assertDiagnosticAt(output, "ExtensionShadowed.kt", 29, DiagFragments.EXTENSION_SHADOWED) + assertDiagnosticAt(output, "ManualImplAllowed.kt", 20, DiagFragments.EXTENSION_SHADOWED) } // docs/test/ケース04-診断.md DIA-38: 継承のみの label はクラス位置 + 宣言元 FQN で ES 警告 @Test fun inheritedLabelWarnsWithDeclarationSite() { val output = ok() - assertDiagnosticAt(output, "Wl3Leaf.kt", 4, DiagFragments.EXTENSION_SHADOWED, "Wl3Named") - assertDiagnosticAt(output, "Wl2Si.kt", 12, DiagFragments.EXTENSION_SHADOWED, "Wl2Si") + assertDiagnosticAt( + output, + "ExtensionShadowed.kt", + 44, + DiagFragments.EXTENSION_SHADOWED, + "Wl3Named", + ) + assertDiagnosticAt( + output, + "ExtensionShadowed.kt", + 33, + DiagFragments.EXTENSION_SHADOWED, + "Wl2Si", + ) } // docs/test/ケース04-診断.md DIA-39: 非発火 3 形(label 以外・末端 object の継承・private label。 @@ -130,17 +134,15 @@ class DiagSingleOkTest : DiagTestBase() { @Test fun shadowingExclusionsDoNotWarn() { val output = ok() - assertNoDiagnosticAt(output, "WlSi.kt", 10) - assertNoDiagnosticAt(output, "Wl2Si.kt", 10) - assertNoDiagnosticAt(output, "WlPriv.kt", 9) + listOf(15, 31, 50).forEach { line -> + assertNoDiagnosticAt(output, "ExtensionShadowed.kt", line) + } } // docs/test/ケース04-診断.md DIA-44: toString は手動宣言・継承具象とも MC 対象外 @Test fun toStringIsExemptFromMemberConflict() { - val output = ok() - assertFragmentAbsentAt(output, "NmTsLeaf.kt", DiagFragments.MEMBER_CONFLICT) - assertFragmentAbsentAt(output, "NmTsMan.kt", DiagFragments.MEMBER_CONFLICT) + assertFragmentAbsentAt(ok(), "ToStringExempt.kt", DiagFragments.MEMBER_CONFLICT) } // docs/test/ケース04-診断.md DIA-70: クラス継承の非発火側 — open 具象(companion 経由・末端 object @@ -148,20 +150,15 @@ class DiagSingleOkTest : DiagTestBase() { @Test fun classInheritanceNearMissesDoNotConflict() { val output = ok() - listOf("OkCi.kt", "OkCiOpen.kt", "OkCiFn.kt", "OkCiPv.kt").forEach { file -> - assertFragmentAbsentAt(output, file, "e: ") - assertFragmentAbsentAt(output, file, "w: ") - } + assertFragmentAbsentAt(output, "ClassInheritance.kt", "e: ") + assertFragmentAbsentAt(output, "ClassInheritance.kt", "w: ") } // docs/test/ケース04-診断.md DIA-45: 生成先違い(末端本体 enumizedClass・kind companion の // 手動 asEnumish・enumishCompanion override)は非発火 @Test fun nonGeneratedTargetsDoNotConflict() { - val output = ok() - listOf("OkM.kt", "OkC.kt", "OkKca.kt").forEach { file -> - assertFragmentAbsentAt(output, file, DiagFragments.MEMBER_CONFLICT) - } + assertFragmentAbsentAt(ok(), "NonGeneratedTargets.kt", DiagFragments.MEMBER_CONFLICT) } // docs/test/ケース04-診断.md DIA-51: 型引数一致の手動宣言(直接・間接・末端冗長宣言)は注入スキップ @@ -177,7 +174,7 @@ class DiagSingleOkTest : DiagTestBase() { @Test fun typealiasedSupertypesMatchAfterExpansion() { val output = ok() - listOf("NmTaSi.kt", "NmThSi.kt", "NmTlSi.kt", "NmTlSame.kt").forEach { file -> + listOf("TypealiasMatch.kt", "NmTlSame.kt").forEach { file -> assertFragmentAbsentAt(output, file, "e: ") } assertFragmentAbsent(output, DiagFragments.LANG_PLATFORM_DECLARATION_CLASH) @@ -196,9 +193,7 @@ class DiagSingleOkTest : DiagTestBase() { fun hierarchyInternalAndBaseEnumishImplsAreAllowed() { val output = ok() assertFragmentAbsent(output, DiagFragments.MANUAL_IMPL_OUTSIDE_HIERARCHY) - listOf("OkManLeaf.kt", "OkKex.kt", "NmRt.kt").forEach { file -> - assertFragmentAbsentAt(output, file, "e: ") - } + assertFragmentAbsentAt(output, "ManualImplAllowed.kt", "e: ") } // docs/test/ケース04-診断.md DIA-76: 中間 sealed への任意のユーザーアノテーションは基底判定を diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/AbsorptionNearMiss.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/AbsorptionNearMiss.kt new file mode 100644 index 0000000..0d9538b --- /dev/null +++ b/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/AbsorptionNearMiss.kt @@ -0,0 +1,36 @@ +package io.github.projectmapk.diag.ok + +import io.github.projectmapk.sealedClassEnumizer.Enumize + +// docs/test/ケース04-診断.md DIA-19/DIA-24: 単一末端サブタイプ(inner 含む)は吸収され +// AMBIGUOUS_KIND / INNER_LEAF 非発火。非 inner のネスト末端も非発火 + +// 非 final 末端 + その単一サブタイプ +@Enumize +sealed interface NmAbs { + abstract class Poly2 : NmAbs { + companion object + } +} + +class NmAbsSub : NmAbs.Poly2() + +// 非 final 末端 + inner class のサブタイプ +@Enumize +sealed interface NmIn { + abstract class Poly : NmIn { + companion object + } +} + +class NmInHost { + inner class Tri : NmIn.Poly() +} + +// 非 inner のネスト末端(DIA-24) +@Enumize +sealed interface NmNestSi + +class NmNestHost { + object L : NmNestSi +} diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/ClassInheritance.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/ClassInheritance.kt new file mode 100644 index 0000000..e83062f --- /dev/null +++ b/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/ClassInheritance.kt @@ -0,0 +1,40 @@ +package io.github.projectmapk.diag.ok + +import io.github.projectmapk.sealedClassEnumizer.Enumize + +// docs/test/ケース04-診断.md DIA-70 の非発火側: クラス supertype の検査対象は final のみ。 +// open 具象は生成 override が勝ち、宣言種別交差(final 関数 label)と private は衝突しない + +@Enumize +sealed interface OkCiSi + +// open 具象 label を持つ階層外クラス +open class OkCiBase { + open val label: String get() = "cls" +} + +// companion 経由の open 具象継承 +class OkCi(val v: Int) : OkCiSi { + companion object : OkCiBase() +} + +// 末端 object による open 具象の直接継承 +object OkCiOpen : OkCiBase(), OkCiSi + +// 同名でも宣言種別が交差する final 関数 label を持つ階層外クラス +open class OkCiFnBase { + fun label(): String = "fn" +} + +// 関数形 label は生成プロパティと JVM シグネチャが衝突しない +object OkCiFn : OkCiFnBase(), OkCiSi + +// private の final label を持つ階層外クラス +open class OkCiPvBase { + private val label: String = "pv" + + fun reveal(): String = label +} + +// private の label は override 解決に参加しない +object OkCiPv : OkCiPvBase(), OkCiSi diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/CompanionNearMiss.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/CompanionNearMiss.kt new file mode 100644 index 0000000..3f91ac1 --- /dev/null +++ b/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/CompanionNearMiss.kt @@ -0,0 +1,19 @@ +package io.github.projectmapk.diag.ok + +import io.github.projectmapk.sealedClassEnumizer.Enumize + +// docs/test/ケース04-診断.md DIA-30: 階層外クラスの companion 単独末端・SI 非実装の通常 companion は +// COMPANION_LEAF_CONFLICT 非発火 + +@Enumize +sealed interface NmHostBase + +// 階層外クラスの companion が単独で末端(外側 = 末端ではないため非発火) +class NmHost { + companion object : NmHostBase +} + +// SI 非実装の通常 companion は判定対象外 +class NmPlain { + companion object +} diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/ExtensionShadowed.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/ExtensionShadowed.kt new file mode 100644 index 0000000..6412bef --- /dev/null +++ b/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/ExtensionShadowed.kt @@ -0,0 +1,54 @@ +package io.github.projectmapk.diag.ok + +import io.github.projectmapk.sealedClassEnumizer.Enumize + +// docs/test/ケース04-診断.md DIA-37/38/39: 可視 label メンバーの宣言・継承で +// ENUMIZE_EXTENSION_SHADOWED 警告が出る形と、除外される 3 形を同居させる。 +// 階層内手動実装 leaf の Enumish 由来 label(発火側)は ManualImplAllowed.kt が担う + +// DIA-37: 末端 class 本体の label 宣言(Tagged = ctor プロパティ・Fn = 関数形)で ES。 +// DIA-39: label 以外の名前(Named)は非対象 +@Enumize +sealed interface WlSi { + data class Tagged(val label: String) : WlSi + + data class Named(val name: String) : WlSi + + class Fn : WlSi { + fun label(): String = "fn" + + companion object + } +} + +// DIA-37: 基底自身の label 宣言で ES。 +// DIA-38: 継承末端 class(C)はクラス位置 + 宣言元 FQN で ES。 +// DIA-39: 末端 object(L)の継承は除外 +@Enumize +sealed interface Wl2Si { + val label: String get() = "base" + + data object L : Wl2Si + + data class C(val v: Int) : Wl2Si +} + +// DIA-38: 階層外 interface からの default 継承(クラス位置 + 宣言元 FQN) +@Enumize +sealed interface Wl3Si + +interface Wl3Named { + val label: String get() = "named" +} + +class Wl3Leaf : Wl3Si, Wl3Named + +// DIA-39: private の label 宣言(可視条件の偽側)は非発火 +@Enumize +sealed interface WlPriv { + class Q : WlPriv { + private val label: String = "q" + + companion object + } +} diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/HierarchyNearMiss.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/HierarchyNearMiss.kt new file mode 100644 index 0000000..6a55c6e --- /dev/null +++ b/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/HierarchyNearMiss.kt @@ -0,0 +1,22 @@ +package io.github.projectmapk.diag.ok + +import io.github.projectmapk.sealedClassEnumizer.Enumize + +// docs/test/ケース04-診断.md DIA-16: 併用・ダイヤモンドは MULTIPLE_HIERARCHIES / NESTED 非発火。 +// 独立 2 階層の対照は WellFormed.kt の OkSi / OkSc が兼ねる + +// 非 @Enumize interface の併用 +@Enumize +sealed interface NmCross { + interface Marker + + data object X : NmCross, Marker +} + +// 単一階層内ダイヤモンド(基底直接 + 中間経由) +@Enumize +sealed interface NmDia { + sealed interface Mid : NmDia + + data object X : NmDia, Mid +} diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/LabelNearMiss.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/LabelNearMiss.kt new file mode 100644 index 0000000..41179f0 --- /dev/null +++ b/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/LabelNearMiss.kt @@ -0,0 +1,52 @@ +package io.github.projectmapk.diag.ok + +import io.github.projectmapk.sealedClassEnumizer.Enumize + +// docs/test/ケース04-診断.md DIA-36: kind companion 名・中間名・enum 定数名・階層外サブタイプ名は +// label 判定に関与せず LABEL_CLASH は発火しない + +// enum 定数名(Solo)は判定非関与 → 末端 Solo と衝突しない +@Enumize +sealed interface NmEc { + enum class Pack : NmEc { + Solo, + } + + data object Solo : NmEc +} + +// kind を担うだけの named companion の同名(Factory)→ 非発火 +@Enumize +sealed interface NmFac { + class FooL(val v: Int) : NmFac { + companion object Factory + } + + class BarL(val v: Int) : NmFac { + companion object Factory + } +} + +// 末端の単純名が中間 sealed の名前と一致 → 非発火(中間は label を持たない) +@Enumize +sealed interface NmMid { + sealed interface Same : NmMid +} + +class NmMidOuter { + data object Same : NmMid +} + +// 階層外サブタイプの単純名(DupN)は判定非関与 → 非発火 +@Enumize +sealed interface NmSubBase { + abstract class PolyN : NmSubBase { + companion object + } + + data object DupN : NmSubBase +} + +class NmSubHost { + class DupN : NmSubBase.PolyN() +} diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/ManualImplAllowed.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/ManualImplAllowed.kt new file mode 100644 index 0000000..9d17254 --- /dev/null +++ b/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/ManualImplAllowed.kt @@ -0,0 +1,41 @@ +package io.github.projectmapk.diag.ok + +import io.github.projectmapk.sealedClassEnumizer.Enumish +import io.github.projectmapk.sealedClassEnumizer.EnumishCompanion +import io.github.projectmapk.sealedClassEnumizer.Enumize +import io.github.projectmapk.sealedClassEnumizer.Enumized +import kotlin.reflect.KClass + +// docs/test/ケース04-診断.md DIA-58: 階層内手動実装・基底 Enumish 実装・kind companion 免除の +// 成立側は許容され MANUAL_IMPL_OUTSIDE_HIERARCHY / MSM / MC は発火しない + +@Enumize +sealed interface OkManSi { + data object R : OkManSi +} + +// 階層内手動実装(末端 class の両実装)。 +// Enumish 由来でも可視な label 手動宣言には ES 警告が出る(DIA-37) +class OkManLeaf(val v: Int) : OkManSi, OkManSi.Enumish { + override val label: String get() = "OkManLeaf" + + override val enumizedClass: KClass get() = OkManLeaf::class +} + +// 末端 class の companion による `: Enumish` 明示宣言 +// (kind companion 免除の成立側・メンバーは生成が充足) +@Enumize +sealed interface OkKex { + class Leaf(val v: Int) : OkKex { + companion object : OkKex.Enumish + } +} + +// 基底 Enumish(runtime-api・非 sealed public)の自由実装は無制約 +class NmRt : Enumish { + override val label: String get() = "free" + + override val enumishCompanion: EnumishCompanion get() = error("unused") + + override val enumizedClass: KClass> get() = error("unused") +} diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/ManualSupertypeMatch.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/ManualSupertypeMatch.kt new file mode 100644 index 0000000..f006e45 --- /dev/null +++ b/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/ManualSupertypeMatch.kt @@ -0,0 +1,34 @@ +package io.github.projectmapk.diag.ok + +import io.github.projectmapk.sealedClassEnumizer.Enumish +import io.github.projectmapk.sealedClassEnumizer.Enumize +import io.github.projectmapk.sealedClassEnumizer.Enumized + +// docs/test/ケース04-診断.md DIA-51: 型引数一致の手動宣言(直接・間接・末端冗長宣言)は注入スキップで +// MANUAL_SUPERTYPE_MISMATCH / SUPERTYPE_APPEARS_TWICE とも非発火 + +// 基底が runtime-api の基底 Enumish を手動継承 +@Enumize +sealed interface NmBase : Enumish { + data object L : NmBase +} + +// 手動 Enumized<自身の Enumish>(型引数一致) +@Enumize +sealed interface NmSelf : Enumized { + data object L : NmSelf +} + +// 型引数一致の生成 Enumish supertype 手動重複宣言(末端側) +@Enumize +sealed interface NmDup { + data object L : NmDup, NmDup.Enumish +} + +// 自作 interface 経由の間接一致(スキップ推移化の回帰) +interface OkIndBase : Enumized + +@Enumize +sealed interface OkIndSi : OkIndBase { + data object L : OkIndSi +} diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmAbs.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmAbs.kt deleted file mode 100644 index 714e423..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmAbs.kt +++ /dev/null @@ -1,11 +0,0 @@ -package io.github.projectmapk.diag.ok - -import io.github.projectmapk.sealedClassEnumizer.Enumize - -// docs/test/ケース04-診断.md DIA-19 用の非 final 末端(単一サブタイプ吸収の対象) -@Enumize -sealed interface NmAbs { - abstract class Poly2 : NmAbs { - companion object - } -} diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmAbsSub.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmAbsSub.kt deleted file mode 100644 index a60cafd..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmAbsSub.kt +++ /dev/null @@ -1,4 +0,0 @@ -package io.github.projectmapk.diag.ok - -// docs/test/ケース04-診断.md DIA-19: 単一末端サブタイプは吸収され AMBIGUOUS_KIND 非発火 -class NmAbsSub : NmAbs.Poly2() diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmAl.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmAl.kt index 25c0b24..9e33c98 100644 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmAl.kt +++ b/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmAl.kt @@ -2,6 +2,37 @@ package io.github.projectmapk.diag.ok import io.github.projectmapk.sealedClassEnumizer.Enumize -// docs/test/ケース04-診断.md DIA-31/32 用の基底(raw 追跡表記の対象) +// docs/test/ケース04-診断.md DIA-31/32: raw 追跡表記の各形で候補判定が成立する(= kind が作られる)。 +// 表記が file 単位の import に依存する形は別ファイルへ分ける: +// import 別名 = NmAlImported.kt・別 pkg typealias 明示 import = NmFarNoc.kt・star import = NmStarNoc.kt。 +// 同一 pkg typealias の宣言は NmAlAlias.kt(別名の解決順を基底と分ける配置) + @Enumize sealed interface NmAl + +// 同一 pkg 直接名の末端 class(companion 無し)→ 自動生成成立 +class NmDirNoc(val v: Int) : NmAl + +// enum 末端も候補判定の対象(companion 自動生成で成立) +enum class NmEnumLeaf : NmAl { + E1, +} + +// FQN 表記の supertype でも候補判定が働き自動生成される +class NmFqFoo(val v: Int) : io.github.projectmapk.diag.ok.NmAl + +// typealias 経由 supertype の末端 class(companion 無し)→ 成立 +class NmAlNoc(val v: Int) : NmAlT + +// typealias 経由 + 明示 companion の併用形 → 成立 +class NmAlFoo(val v: Int) : NmAlT { + companion object +} + +// 外側スコープのネスト解決(supertype 名が外側宣言のスコープで解決される) +object NmOutHost { + @Enumize + sealed interface NBase + + class NLeaf(val v: Int) : NBase +} diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmAlFoo.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmAlFoo.kt deleted file mode 100644 index ad6736d..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmAlFoo.kt +++ /dev/null @@ -1,6 +0,0 @@ -package io.github.projectmapk.diag.ok - -// docs/test/ケース04-診断.md DIA-32: typealias 経由 + 明示 companion の併用形 → 成立 -class NmAlFoo(val v: Int) : NmAlT { - companion object -} diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmAlImported.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmAlImported.kt new file mode 100644 index 0000000..821dd55 --- /dev/null +++ b/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmAlImported.kt @@ -0,0 +1,17 @@ +package io.github.projectmapk.diag.ok + +import io.github.projectmapk.diag.ok.NmAl as NmAlI + +// docs/test/ケース04-診断.md DIA-31/32: import 別名表記の各末端形。 +// import 別名は file 単位の解決文脈であり、本ファイルにまとめること自体がその表記の適用範囲となる + +// 末端 object は companion 概念が無く自身が kind +object NmImBar : NmAlI + +// 末端 class(companion 無し)→ 自動生成成立 +class NmImNoc(val v: Int) : NmAlI + +// 明示 companion の併用形 → 成立 +class NmImFoo(val v: Int) : NmAlI { + companion object +} diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmAlNoc.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmAlNoc.kt deleted file mode 100644 index 8a5e28a..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmAlNoc.kt +++ /dev/null @@ -1,4 +0,0 @@ -package io.github.projectmapk.diag.ok - -// docs/test/ケース04-診断.md DIA-32: typealias 経由 supertype の末端 class(companion 無し)→ 成立 -class NmAlNoc(val v: Int) : NmAlT diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmBase.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmBase.kt deleted file mode 100644 index 5f201a3..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmBase.kt +++ /dev/null @@ -1,10 +0,0 @@ -package io.github.projectmapk.diag.ok - -import io.github.projectmapk.sealedClassEnumizer.Enumish -import io.github.projectmapk.sealedClassEnumizer.Enumize - -// docs/test/ケース04-診断.md DIA-51: 基底が runtime-api の基底 Enumish を手動継承 → MSM 非発火 -@Enumize -sealed interface NmBase : Enumish { - data object L : NmBase -} diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmCross.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmCross.kt deleted file mode 100644 index 82777e8..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmCross.kt +++ /dev/null @@ -1,11 +0,0 @@ -package io.github.projectmapk.diag.ok - -import io.github.projectmapk.sealedClassEnumizer.Enumize - -// docs/test/ケース04-診断.md DIA-16: 非 @Enumize interface の併用 → MULTIPLE_HIERARCHIES 非発火 -@Enumize -sealed interface NmCross { - interface Marker - - data object X : NmCross, Marker -} diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmDia.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmDia.kt deleted file mode 100644 index 8d87434..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmDia.kt +++ /dev/null @@ -1,11 +0,0 @@ -package io.github.projectmapk.diag.ok - -import io.github.projectmapk.sealedClassEnumizer.Enumize - -// docs/test/ケース04-診断.md DIA-16: 単一階層内ダイヤモンド(基底直接 + 中間経由)→ 非発火 -@Enumize -sealed interface NmDia { - sealed interface Mid : NmDia - - data object X : NmDia, Mid -} diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmDirNoc.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmDirNoc.kt deleted file mode 100644 index 6725f67..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmDirNoc.kt +++ /dev/null @@ -1,4 +0,0 @@ -package io.github.projectmapk.diag.ok - -// docs/test/ケース04-診断.md DIA-31: 同一 pkg 直接名の末端 class(companion 無し)→ 自動生成成立 -class NmDirNoc(val v: Int) : NmAl diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmDup.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmDup.kt deleted file mode 100644 index 1371193..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmDup.kt +++ /dev/null @@ -1,9 +0,0 @@ -package io.github.projectmapk.diag.ok - -import io.github.projectmapk.sealedClassEnumizer.Enumize - -// docs/test/ケース04-診断.md DIA-51: 型引数一致の生成 Enumish supertype 手動重複宣言 → 注入スキップ -@Enumize -sealed interface NmDup { - data object L : NmDup, NmDup.Enumish -} diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmEc.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmEc.kt deleted file mode 100644 index bf793c0..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmEc.kt +++ /dev/null @@ -1,13 +0,0 @@ -package io.github.projectmapk.diag.ok - -import io.github.projectmapk.sealedClassEnumizer.Enumize - -// docs/test/ケース04-診断.md DIA-36: enum 定数名(Solo)は判定非関与 → 末端 Solo と衝突しない -@Enumize -sealed interface NmEc { - enum class Pack : NmEc { - Solo, - } - - data object Solo : NmEc -} diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmEnumLeaf.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmEnumLeaf.kt deleted file mode 100644 index 2ca7c9d..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmEnumLeaf.kt +++ /dev/null @@ -1,6 +0,0 @@ -package io.github.projectmapk.diag.ok - -// docs/test/ケース04-診断.md DIA-31: enum 末端も候補判定の対象(companion 自動生成で成立) -enum class NmEnumLeaf : NmAl { - E1, -} diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmFac.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmFac.kt deleted file mode 100644 index 9bf95d2..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmFac.kt +++ /dev/null @@ -1,15 +0,0 @@ -package io.github.projectmapk.diag.ok - -import io.github.projectmapk.sealedClassEnumizer.Enumize - -// docs/test/ケース04-診断.md DIA-36: kind を担うだけの named companion の同名(Factory)→ LABEL_CLASH 非発火 -@Enumize -sealed interface NmFac { - class FooL(val v: Int) : NmFac { - companion object Factory - } - - class BarL(val v: Int) : NmFac { - companion object Factory - } -} diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmFqFoo.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmFqFoo.kt deleted file mode 100644 index bec4f8c..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmFqFoo.kt +++ /dev/null @@ -1,4 +0,0 @@ -package io.github.projectmapk.diag.ok - -// docs/test/ケース04-診断.md DIA-31: FQN 表記の supertype でも候補判定が働き自動生成される -class NmFqFoo(val v: Int) : io.github.projectmapk.diag.ok.NmAl diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmHost.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmHost.kt deleted file mode 100644 index d6b0ac5..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmHost.kt +++ /dev/null @@ -1,6 +0,0 @@ -package io.github.projectmapk.diag.ok - -// docs/test/ケース04-診断.md DIA-30: 階層外クラスの companion 単独末端 → COMPANION_LEAF_CONFLICT 非発火 -class NmHost { - companion object : NmHostBase -} diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmHostBase.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmHostBase.kt deleted file mode 100644 index 8a805d0..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmHostBase.kt +++ /dev/null @@ -1,7 +0,0 @@ -package io.github.projectmapk.diag.ok - -import io.github.projectmapk.sealedClassEnumizer.Enumize - -// docs/test/ケース04-診断.md DIA-30 用の基底 -@Enumize -sealed interface NmHostBase diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmImBar.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmImBar.kt deleted file mode 100644 index 295ed6a..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmImBar.kt +++ /dev/null @@ -1,6 +0,0 @@ -package io.github.projectmapk.diag.ok - -import io.github.projectmapk.diag.ok.NmAl as NmAlI - -// docs/test/ケース04-診断.md DIA-31: import 別名経由の末端 object は companion 概念が無く自身が kind -object NmImBar : NmAlI diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmImFoo.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmImFoo.kt deleted file mode 100644 index f3eea72..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmImFoo.kt +++ /dev/null @@ -1,8 +0,0 @@ -package io.github.projectmapk.diag.ok - -import io.github.projectmapk.diag.ok.NmAl as NmAlI - -// docs/test/ケース04-診断.md DIA-32: import 別名経由 + 明示 companion の併用形 → 成立 -class NmImFoo(val v: Int) : NmAlI { - companion object -} diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmImNoc.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmImNoc.kt deleted file mode 100644 index 1697aed..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmImNoc.kt +++ /dev/null @@ -1,6 +0,0 @@ -package io.github.projectmapk.diag.ok - -import io.github.projectmapk.diag.ok.NmAl as NmAlI - -// docs/test/ケース04-診断.md DIA-31: import 別名経由の末端 class(companion 無し)→ 自動生成成立 -class NmImNoc(val v: Int) : NmAlI diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmIn.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmIn.kt deleted file mode 100644 index fc77ece..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmIn.kt +++ /dev/null @@ -1,11 +0,0 @@ -package io.github.projectmapk.diag.ok - -import io.github.projectmapk.sealedClassEnumizer.Enumize - -// docs/test/ケース04-診断.md DIA-19 用の非 final 末端を持つ基底 -@Enumize -sealed interface NmIn { - abstract class Poly : NmIn { - companion object - } -} diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmInHost.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmInHost.kt deleted file mode 100644 index 97c728d..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmInHost.kt +++ /dev/null @@ -1,6 +0,0 @@ -package io.github.projectmapk.diag.ok - -// docs/test/ケース04-診断.md DIA-19: inner class が非 final 末端のサブタイプ → 吸収され AK / IL 非発火 -class NmInHost { - inner class Tri : NmIn.Poly() -} diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmMid.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmMid.kt deleted file mode 100644 index df45bcb..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmMid.kt +++ /dev/null @@ -1,9 +0,0 @@ -package io.github.projectmapk.diag.ok - -import io.github.projectmapk.sealedClassEnumizer.Enumize - -// docs/test/ケース04-診断.md DIA-36 用: 中間 sealed(kind でなく label を持たない) -@Enumize -sealed interface NmMid { - sealed interface Same : NmMid -} diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmMidOuter.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmMidOuter.kt deleted file mode 100644 index 723fb3c..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmMidOuter.kt +++ /dev/null @@ -1,6 +0,0 @@ -package io.github.projectmapk.diag.ok - -// docs/test/ケース04-診断.md DIA-36: 末端の単純名が中間 sealed の名前と一致 → LABEL_CLASH 非発火 -class NmMidOuter { - data object Same : NmMid -} diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmNestHost.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmNestHost.kt deleted file mode 100644 index 0935ecc..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmNestHost.kt +++ /dev/null @@ -1,6 +0,0 @@ -package io.github.projectmapk.diag.ok - -// docs/test/ケース04-診断.md DIA-24: 非 inner のネスト末端は非発火 -class NmNestHost { - object L : NmNestSi -} diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmNestSi.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmNestSi.kt deleted file mode 100644 index dc1b4b4..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmNestSi.kt +++ /dev/null @@ -1,7 +0,0 @@ -package io.github.projectmapk.diag.ok - -import io.github.projectmapk.sealedClassEnumizer.Enumize - -// docs/test/ケース04-診断.md DIA-24 用の基底 -@Enumize -sealed interface NmNestSi diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmOutHost.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmOutHost.kt deleted file mode 100644 index e491ab9..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmOutHost.kt +++ /dev/null @@ -1,11 +0,0 @@ -package io.github.projectmapk.diag.ok - -import io.github.projectmapk.sealedClassEnumizer.Enumize - -// docs/test/ケース04-診断.md DIA-31: 外側スコープのネスト解決(supertype 名が外側宣言のスコープで解決される) -object NmOutHost { - @Enumize - sealed interface NBase - - class NLeaf(val v: Int) : NBase -} diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmPlain.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmPlain.kt deleted file mode 100644 index 875ad51..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmPlain.kt +++ /dev/null @@ -1,6 +0,0 @@ -package io.github.projectmapk.diag.ok - -// docs/test/ケース04-診断.md DIA-30: SI 非実装の通常 companion は非発火(判定対象外) -class NmPlain { - companion object -} diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmRnc.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmRnc.kt deleted file mode 100644 index d6d1f0f..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmRnc.kt +++ /dev/null @@ -1,6 +0,0 @@ -package io.github.projectmapk.diag.ok - -// docs/test/ケース04-診断.md DIA-55: 非 @Enumize クラスのネスト Enumish → RESERVED_NAME_CLASH 非発火 -class NmRnc { - class Enumish -} diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmRt.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmRt.kt deleted file mode 100644 index 1854e8b..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmRt.kt +++ /dev/null @@ -1,15 +0,0 @@ -package io.github.projectmapk.diag.ok - -import kotlin.reflect.KClass -import io.github.projectmapk.sealedClassEnumizer.Enumish -import io.github.projectmapk.sealedClassEnumizer.EnumishCompanion -import io.github.projectmapk.sealedClassEnumizer.Enumized - -// docs/test/ケース04-診断.md DIA-58: 基底 Enumish(runtime-api・非 sealed public)の自由実装は無制約 -class NmRt : Enumish { - override val label: String get() = "free" - - override val enumishCompanion: EnumishCompanion get() = error("unused") - - override val enumizedClass: KClass> get() = error("unused") -} diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmSelf.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmSelf.kt deleted file mode 100644 index feb14b4..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmSelf.kt +++ /dev/null @@ -1,10 +0,0 @@ -package io.github.projectmapk.diag.ok - -import io.github.projectmapk.sealedClassEnumizer.Enumize -import io.github.projectmapk.sealedClassEnumizer.Enumized - -// docs/test/ケース04-診断.md DIA-51: 手動 Enumized<自身の Enumish>(型引数一致)→ 注入スキップ・非発火 -@Enumize -sealed interface NmSelf : Enumized { - data object L : NmSelf -} diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmSubBase.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmSubBase.kt deleted file mode 100644 index ac1044e..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmSubBase.kt +++ /dev/null @@ -1,13 +0,0 @@ -package io.github.projectmapk.diag.ok - -import io.github.projectmapk.sealedClassEnumizer.Enumize - -// docs/test/ケース04-診断.md DIA-36 用の基底(非 final 末端 PolyN + 末端 DupN) -@Enumize -sealed interface NmSubBase { - abstract class PolyN : NmSubBase { - companion object - } - - data object DupN : NmSubBase -} diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmSubHost.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmSubHost.kt deleted file mode 100644 index 47d94d7..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmSubHost.kt +++ /dev/null @@ -1,6 +0,0 @@ -package io.github.projectmapk.diag.ok - -// docs/test/ケース04-診断.md DIA-36: 階層外サブタイプの単純名(DupN)は判定非関与 → 非発火 -class NmSubHost { - class DupN : NmSubBase.PolyN() -} diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmTaAlias.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmTaAlias.kt deleted file mode 100644 index 3d73894..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmTaAlias.kt +++ /dev/null @@ -1,4 +0,0 @@ -package io.github.projectmapk.diag.ok - -// docs/test/ケース04-診断.md DIA-52 用: 生成 Enumish への typealias(型引数別名・別ファイル配置) -typealias NmTaAlias = NmTaSi.Enumish diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmTaSi.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmTaSi.kt deleted file mode 100644 index 8411351..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmTaSi.kt +++ /dev/null @@ -1,10 +0,0 @@ -package io.github.projectmapk.diag.ok - -import io.github.projectmapk.sealedClassEnumizer.Enumize -import io.github.projectmapk.sealedClassEnumizer.Enumized - -// docs/test/ケース04-診断.md DIA-52: 型引数別名の手動 Enumized(展開後は厳密一致)→ 注入スキップ -@Enumize -sealed interface NmTaSi : Enumized { - data object L : NmTaSi -} diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmThAlias.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmThAlias.kt deleted file mode 100644 index 0ae6f51..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmThAlias.kt +++ /dev/null @@ -1,6 +0,0 @@ -package io.github.projectmapk.diag.ok - -import io.github.projectmapk.sealedClassEnumizer.Enumized - -// docs/test/ケース04-診断.md DIA-52 用: 手動 supertype の頭(Enumized 自体)への typealias(先解決配置) -typealias NmThAlias = Enumized diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmThSi.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmThSi.kt deleted file mode 100644 index 4195cb1..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmThSi.kt +++ /dev/null @@ -1,9 +0,0 @@ -package io.github.projectmapk.diag.ok - -import io.github.projectmapk.sealedClassEnumizer.Enumize - -// docs/test/ケース04-診断.md DIA-52: 頭別名(エイリアスが先に解決される別ファイル配置)→ 注入スキップ -@Enumize -sealed interface NmThSi : NmThAlias { - data object L : NmThSi -} diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmTlAlias.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmTlAlias.kt deleted file mode 100644 index da1b4b6..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmTlAlias.kt +++ /dev/null @@ -1,4 +0,0 @@ -package io.github.projectmapk.diag.ok - -// docs/test/ケース04-診断.md DIA-52 用: 生成 Enumish への typealias(末端側の冗長宣言に使う) -typealias NmTlAlias = NmTlSi.Enumish diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmTlSame.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmTlSame.kt index cb6c31a..4d8a83f 100644 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmTlSame.kt +++ b/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmTlSame.kt @@ -3,7 +3,8 @@ package io.github.projectmapk.diag.ok import io.github.projectmapk.sealedClassEnumizer.Enumize // docs/test/ケース04-診断.md DIA-52: 同一ファイル別名(エイリアスが先に解決されない配置は raw 追跡で照合)。 -// 別名と階層の同居がテストの本質のため 1 ファイル 1 クラス規約は適用外 +// 別名と階層を同一ファイルへ置くことそのものが本ケースの成立条件である +// (先に解決される別ファイル配置は TypealiasAliases.kt / TypealiasMatch.kt が担う) typealias NmTlSameAlias = NmTlSameSi.Enumish @Enumize diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmTlSi.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmTlSi.kt deleted file mode 100644 index b77ad15..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmTlSi.kt +++ /dev/null @@ -1,9 +0,0 @@ -package io.github.projectmapk.diag.ok - -import io.github.projectmapk.sealedClassEnumizer.Enumize - -// docs/test/ケース04-診断.md DIA-52: 末端 Enumish 冗長宣言の別名形(別ファイル別名)→ 注入スキップ -@Enumize -sealed interface NmTlSi { - data object L : NmTlSi, NmTlAlias -} diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmTs.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmTs.kt deleted file mode 100644 index 934b974..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmTs.kt +++ /dev/null @@ -1,7 +0,0 @@ -package io.github.projectmapk.diag.ok - -import io.github.projectmapk.sealedClassEnumizer.Enumize - -// docs/test/ケース04-診断.md DIA-44 用の基底 -@Enumize -sealed interface NmTs diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmTsBase.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmTsBase.kt deleted file mode 100644 index f7507aa..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmTsBase.kt +++ /dev/null @@ -1,6 +0,0 @@ -package io.github.projectmapk.diag.ok - -// docs/test/ケース04-診断.md DIA-44 用: Any 以外の具象 toString を持つ継承元 -abstract class NmTsBase { - override fun toString(): String = "custom-inherited" -} diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmTsLeaf.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmTsLeaf.kt deleted file mode 100644 index 10b90e2..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmTsLeaf.kt +++ /dev/null @@ -1,4 +0,0 @@ -package io.github.projectmapk.diag.ok - -// docs/test/ケース04-診断.md DIA-44: kind が継承経路上の具象 toString を持つ → MC 非発火(toString は対象外) -object NmTsLeaf : NmTsBase(), NmTs diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmTsMan.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmTsMan.kt deleted file mode 100644 index ab216a7..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmTsMan.kt +++ /dev/null @@ -1,8 +0,0 @@ -package io.github.projectmapk.diag.ok - -// docs/test/ケース04-診断.md DIA-44: kind companion の手動 toString 宣言も MC 非発火(toString は対象外) -class NmTsMan(val v: Int) : NmTs { - companion object { - override fun toString(): String = "manual!" - } -} diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmVis1.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmVis1.kt deleted file mode 100644 index 2fd9a4f..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmVis1.kt +++ /dev/null @@ -1,11 +0,0 @@ -package io.github.projectmapk.diag.ok - -import io.github.projectmapk.sealedClassEnumizer.Enumize - -// docs/test/ケース04-診断.md DIA-26: 基底内ネストの private 末端 → 非発火 -@Enumize -sealed interface NmVis1 { - private data object Hidden : NmVis1 - - data object Shown : NmVis1 -} diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmVis2.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmVis2.kt deleted file mode 100644 index 061dac6..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmVis2.kt +++ /dev/null @@ -1,10 +0,0 @@ -package io.github.projectmapk.diag.ok - -import io.github.projectmapk.sealedClassEnumizer.Enumize - -// docs/test/ケース04-診断.md DIA-26: private 基底同士(同一ファイル並置そのものが検証対象のため -// トップレベル 2 宣言を同居させる = 1 ファイル 1 クラス規約の適用外) -@Enumize -private sealed interface NmVis2 - -private data object NmVis2Leaf : NmVis2 diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmVis3.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmVis3.kt deleted file mode 100644 index e7188e3..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmVis3.kt +++ /dev/null @@ -1,7 +0,0 @@ -package io.github.projectmapk.diag.ok - -import io.github.projectmapk.sealedClassEnumizer.Enumize - -// docs/test/ケース04-診断.md DIA-26 用の基底 -@Enumize -sealed interface NmVis3 diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmVis3Mid.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmVis3Mid.kt index 8cfbc64..07460ab 100644 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmVis3Mid.kt +++ b/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmVis3Mid.kt @@ -1,6 +1,8 @@ package io.github.projectmapk.diag.ok -// docs/test/ケース04-診断.md DIA-26: 別ファイルの private トップレベル中間 sealed → 非発火 +// docs/test/ケース04-診断.md DIA-26: 別ファイルの private トップレベル中間 sealed → 非発火。 +// private トップレベルはファイルスコープであり、基底(VisibilityNearMiss.kt の NmVis3)と +// 別ファイルであること自体が本ケースの成立条件である private sealed interface NmVis3Mid : NmVis3 { data object MLeaf : NmVis3Mid } diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmVis4.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmVis4.kt deleted file mode 100644 index d7200e6..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmVis4.kt +++ /dev/null @@ -1,11 +0,0 @@ -package io.github.projectmapk.diag.ok - -import io.github.projectmapk.sealedClassEnumizer.Enumize - -// docs/test/ケース04-診断.md DIA-26: private 基底 + internal companion(実効可視性で規則 1)→ 非発火 -@Enumize -private sealed interface NmVis4 { - class L(val v: Int) : NmVis4 { - internal companion object - } -} diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmVis5.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmVis5.kt deleted file mode 100644 index 356e5f5..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmVis5.kt +++ /dev/null @@ -1,7 +0,0 @@ -package io.github.projectmapk.diag.ok - -import io.github.projectmapk.sealedClassEnumizer.Enumize - -// docs/test/ケース04-診断.md DIA-26 用の internal 基底 -@Enumize -internal sealed interface NmVis5 diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmVis5Wide.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmVis5Wide.kt deleted file mode 100644 index d291a32..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmVis5Wide.kt +++ /dev/null @@ -1,4 +0,0 @@ -package io.github.projectmapk.diag.ok - -// docs/test/ケース04-診断.md DIA-26: 基底より広い末端 object → 非発火(kind は自身のため規則対象外) -object NmVis5Wide : NmVis5 diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmVis6.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmVis6.kt deleted file mode 100644 index 03c1990..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmVis6.kt +++ /dev/null @@ -1,12 +0,0 @@ -package io.github.projectmapk.diag.ok - -import io.github.projectmapk.sealedClassEnumizer.Enumize - -// docs/test/ケース04-診断.md DIA-26: internal 基底 + 広い末端 + public companion(規則 1 成立) -// → KTD 非発火。基底と末端の同居がテストの本質のため 1 ファイル 1 クラス規約は適用外 -@Enumize -internal sealed interface NmVis6 - -class NmVis6Wide : NmVis6 { - companion object -} diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmVis7.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmVis7.kt deleted file mode 100644 index 91e8c62..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmVis7.kt +++ /dev/null @@ -1,11 +0,0 @@ -package io.github.projectmapk.diag.ok - -import io.github.projectmapk.sealedClassEnumizer.Enumize - -// docs/test/ケース04-診断.md DIA-26: public 基底 + internal companion → 規則 2 フォールバックで非発火 -@Enumize -sealed interface NmVis7 { - class Half(val v: Int) : NmVis7 { - internal companion object - } -} diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NonGeneratedTargets.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NonGeneratedTargets.kt new file mode 100644 index 0000000..4157502 --- /dev/null +++ b/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NonGeneratedTargets.kt @@ -0,0 +1,32 @@ +package io.github.projectmapk.diag.ok + +import io.github.projectmapk.sealedClassEnumizer.Enumize +import kotlin.reflect.KClass + +// docs/test/ケース04-診断.md DIA-45: 生成先と異なる位置・検査名集合外の宣言は MEMBER_CONFLICT 非発火 + +// 末端 class 本体の enumizedClass 宣言(生成先は companion) +@Enumize +sealed interface OkM { + data class Foo(val v: Int) : OkM { + val enumizedClass: KClass get() = Foo::class + } +} + +// kind の enumishCompanion override は許容 +@Enumize +sealed interface OkC { + data object Bar : OkC { + override val enumishCompanion: OkC.Enumish.Companion get() = OkC.Enumish + } +} + +// kind companion の手動 asEnumish(検査名集合外の過負荷) +@Enumize +sealed interface OkKca { + class Leaf(val v: Int) : OkKca { + companion object { + fun asEnumish(tag: String): String = tag + } + } +} diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/OkC.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/OkC.kt deleted file mode 100644 index 1c26bd5..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/OkC.kt +++ /dev/null @@ -1,11 +0,0 @@ -package io.github.projectmapk.diag.ok - -import io.github.projectmapk.sealedClassEnumizer.Enumize - -// docs/test/ケース04-診断.md DIA-45: kind の enumishCompanion override は許容 -@Enumize -sealed interface OkC { - data object Bar : OkC { - override val enumishCompanion: OkC.Enumish.Companion get() = OkC.Enumish - } -} diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/OkCi.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/OkCi.kt deleted file mode 100644 index 2b25294..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/OkCi.kt +++ /dev/null @@ -1,7 +0,0 @@ -package io.github.projectmapk.diag.ok - -// docs/test/ケース04-診断.md DIA-70: 階層外クラスからの open 具象継承(companion object : OkCiBase()) -// → MC 非発火(クラス supertype の検査対象は final のみ・open は生成 override が勝つ) -class OkCi(val v: Int) : OkCiSi { - companion object : OkCiBase() -} diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/OkCiBase.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/OkCiBase.kt deleted file mode 100644 index 1546082..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/OkCiBase.kt +++ /dev/null @@ -1,6 +0,0 @@ -package io.github.projectmapk.diag.ok - -// docs/test/ケース04-診断.md DIA-70 用: open 具象 label を持つ階層外クラス -open class OkCiBase { - open val label: String get() = "cls" -} diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/OkCiFn.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/OkCiFn.kt deleted file mode 100644 index 2aa3b33..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/OkCiFn.kt +++ /dev/null @@ -1,4 +0,0 @@ -package io.github.projectmapk.diag.ok - -// docs/test/ケース04-診断.md DIA-70: 関数形 label は生成プロパティと JVM シグネチャが衝突せず非発火 -object OkCiFn : OkCiFnBase(), OkCiSi diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/OkCiFnBase.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/OkCiFnBase.kt deleted file mode 100644 index 108d63c..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/OkCiFnBase.kt +++ /dev/null @@ -1,6 +0,0 @@ -package io.github.projectmapk.diag.ok - -// docs/test/ケース04-診断.md DIA-70 用: 同名でも宣言種別が交差する final 関数 label を持つ階層外クラス -open class OkCiFnBase { - fun label(): String = "fn" -} diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/OkCiOpen.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/OkCiOpen.kt deleted file mode 100644 index 2454d13..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/OkCiOpen.kt +++ /dev/null @@ -1,4 +0,0 @@ -package io.github.projectmapk.diag.ok - -// docs/test/ケース04-診断.md DIA-70: open 具象 label の直接継承末端 object は非発火(生成 override が勝つ) -object OkCiOpen : OkCiBase(), OkCiSi diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/OkCiPv.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/OkCiPv.kt deleted file mode 100644 index 5b37070..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/OkCiPv.kt +++ /dev/null @@ -1,4 +0,0 @@ -package io.github.projectmapk.diag.ok - -// docs/test/ケース04-診断.md DIA-70: private の label は override 解決に参加せず非発火 -object OkCiPv : OkCiPvBase(), OkCiSi diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/OkCiPvBase.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/OkCiPvBase.kt deleted file mode 100644 index d66cbc3..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/OkCiPvBase.kt +++ /dev/null @@ -1,8 +0,0 @@ -package io.github.projectmapk.diag.ok - -// docs/test/ケース04-診断.md DIA-70 用: private の final label を持つ階層外クラス -open class OkCiPvBase { - private val label: String = "pv" - - fun reveal(): String = label -} diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/OkCiSi.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/OkCiSi.kt deleted file mode 100644 index 3b4ea52..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/OkCiSi.kt +++ /dev/null @@ -1,7 +0,0 @@ -package io.github.projectmapk.diag.ok - -import io.github.projectmapk.sealedClassEnumizer.Enumize - -// docs/test/ケース04-診断.md DIA-70 用の基底 -@Enumize -sealed interface OkCiSi diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/OkEmpty.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/OkEmpty.kt deleted file mode 100644 index 8feacad..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/OkEmpty.kt +++ /dev/null @@ -1,7 +0,0 @@ -package io.github.projectmapk.diag.ok - -import io.github.projectmapk.sealedClassEnumizer.Enumize - -// docs/test/ケース04-診断.md DIA-05: 継承者ゼロの空階層(完全非発火の下限境界) -@Enumize -sealed interface OkEmpty diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/OkGen.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/OkGen.kt deleted file mode 100644 index c4fdad0..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/OkGen.kt +++ /dev/null @@ -1,11 +0,0 @@ -package io.github.projectmapk.diag.ok - -import io.github.projectmapk.sealedClassEnumizer.Enumize - -// docs/test/ケース04-診断.md DIA-05: 型パラメータ付き基底 / 末端(非発火・生成成立) -@Enumize -sealed class OkGen { - class BoxG(val t: T) : OkGen() - - class FixedG : OkGen() -} diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/OkIndBase.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/OkIndBase.kt deleted file mode 100644 index 830b169..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/OkIndBase.kt +++ /dev/null @@ -1,6 +0,0 @@ -package io.github.projectmapk.diag.ok - -import io.github.projectmapk.sealedClassEnumizer.Enumized - -// docs/test/ケース04-診断.md DIA-51 用: 間接一致の経由 interface(スキップ推移化の回帰) -interface OkIndBase : Enumized diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/OkIndSi.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/OkIndSi.kt deleted file mode 100644 index fca36b4..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/OkIndSi.kt +++ /dev/null @@ -1,9 +0,0 @@ -package io.github.projectmapk.diag.ok - -import io.github.projectmapk.sealedClassEnumizer.Enumize - -// docs/test/ケース04-診断.md DIA-51: 自作 interface 経由の間接一致 → 注入スキップ・非発火 -@Enumize -sealed interface OkIndSi : OkIndBase { - data object L : OkIndSi -} diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/OkKca.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/OkKca.kt deleted file mode 100644 index 47a9354..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/OkKca.kt +++ /dev/null @@ -1,13 +0,0 @@ -package io.github.projectmapk.diag.ok - -import io.github.projectmapk.sealedClassEnumizer.Enumize - -// docs/test/ケース04-診断.md DIA-45: kind companion の手動 asEnumish(検査名集合外)→ 非発火 -@Enumize -sealed interface OkKca { - class Leaf(val v: Int) : OkKca { - companion object { - fun asEnumish(tag: String): String = tag - } - } -} diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/OkKex.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/OkKex.kt deleted file mode 100644 index 9da46c0..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/OkKex.kt +++ /dev/null @@ -1,12 +0,0 @@ -package io.github.projectmapk.diag.ok - -import io.github.projectmapk.sealedClassEnumizer.Enumize - -// docs/test/ケース04-診断.md DIA-58: 末端 class の companion による `: Enumish` 明示宣言 -// (kind companion 免除の成立側・メンバーは生成が充足)→ MIOH / MSM / MC 非発火 -@Enumize -sealed interface OkKex { - class Leaf(val v: Int) : OkKex { - companion object : OkKex.Enumish - } -} diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/OkM.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/OkM.kt deleted file mode 100644 index c0e4235..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/OkM.kt +++ /dev/null @@ -1,12 +0,0 @@ -package io.github.projectmapk.diag.ok - -import kotlin.reflect.KClass -import io.github.projectmapk.sealedClassEnumizer.Enumize - -// docs/test/ケース04-診断.md DIA-45: 末端 class 本体の enumizedClass 宣言(生成先は companion)→ 非発火 -@Enumize -sealed interface OkM { - data class Foo(val v: Int) : OkM { - val enumizedClass: KClass get() = Foo::class - } -} diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/OkManLeaf.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/OkManLeaf.kt deleted file mode 100644 index 00ffcf1..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/OkManLeaf.kt +++ /dev/null @@ -1,11 +0,0 @@ -package io.github.projectmapk.diag.ok - -import kotlin.reflect.KClass - -// docs/test/ケース04-診断.md DIA-58: 階層内手動実装(末端 class の両実装)は許容・MIOH / MSM 非発火。 -// Enumish 由来でも可視な label 手動宣言には ES 警告(docs/test/ケース04-診断.md DIA-37) -class OkManLeaf(val v: Int) : OkManSi, OkManSi.Enumish { - override val label: String get() = "OkManLeaf" - - override val enumizedClass: KClass get() = OkManLeaf::class -} diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/OkManSi.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/OkManSi.kt deleted file mode 100644 index f112c6f..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/OkManSi.kt +++ /dev/null @@ -1,9 +0,0 @@ -package io.github.projectmapk.diag.ok - -import io.github.projectmapk.sealedClassEnumizer.Enumize - -// docs/test/ケース04-診断.md DIA-58 用の基底 -@Enumize -sealed interface OkManSi { - data object R : OkManSi -} diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/OkR.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/OkR.kt deleted file mode 100644 index d7992eb..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/OkR.kt +++ /dev/null @@ -1,13 +0,0 @@ -package io.github.projectmapk.diag.ok - -import io.github.projectmapk.sealedClassEnumizer.Enumize - -// docs/test/ケース04-診断.md DIA-55: Enumish 名のプロパティ / 関数は分類子でなく非発火 -@Enumize -sealed interface OkR { - val Enumish: Int get() = 0 - - fun Enumish(): Int = 1 - - data object L : OkR -} diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/OkRn.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/OkRn.kt deleted file mode 100644 index 4bf406b..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/OkRn.kt +++ /dev/null @@ -1,11 +0,0 @@ -package io.github.projectmapk.diag.ok - -import io.github.projectmapk.sealedClassEnumizer.Enumize - -// docs/test/ケース04-診断.md DIA-55: 別名のネスト分類子(Enumish でない)→ 非発火 -@Enumize -sealed interface OkRn { - class EnumishLike - - data object L : OkRn -} diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/OkSc.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/OkSc.kt deleted file mode 100644 index 0ad2f83..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/OkSc.kt +++ /dev/null @@ -1,9 +0,0 @@ -package io.github.projectmapk.diag.ok - -import io.github.projectmapk.sealedClassEnumizer.Enumize - -// docs/test/ケース04-診断.md DIA-05: 正値の sealed class 階層(DIA-16 の独立 2 階層の片割れを兼ねる) -@Enumize -sealed class OkSc { - data object C : OkSc() -} diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/OkSi.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/OkSi.kt deleted file mode 100644 index 30d1c98..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/OkSi.kt +++ /dev/null @@ -1,11 +0,0 @@ -package io.github.projectmapk.diag.ok - -import io.github.projectmapk.sealedClassEnumizer.Enumize - -// docs/test/ケース04-診断.md DIA-05: 正値の sealed interface 階層(全診断非発火) -@Enumize -sealed interface OkSi { - data object A : OkSi - - data class B(val v: Int) : OkSi -} diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/ReservedNameNearMiss.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/ReservedNameNearMiss.kt new file mode 100644 index 0000000..7d8479d --- /dev/null +++ b/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/ReservedNameNearMiss.kt @@ -0,0 +1,29 @@ +package io.github.projectmapk.diag.ok + +import io.github.projectmapk.sealedClassEnumizer.Enumize + +// docs/test/ケース04-診断.md DIA-55: 非 @Enumize 基底のネスト Enumish・別名のネスト宣言・ +// Enumish 名のプロパティ / 関数は RESERVED_NAME_CLASH 非発火 + +// 非 @Enumize クラスのネスト Enumish +class NmRnc { + class Enumish +} + +// Enumish 名のプロパティ / 関数は分類子でない +@Enumize +sealed interface OkR { + val Enumish: Int get() = 0 + + fun Enumish(): Int = 1 + + data object L : OkR +} + +// 別名のネスト分類子(Enumish でない) +@Enumize +sealed interface OkRn { + class EnumishLike + + data object L : OkRn +} diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/ToStringExempt.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/ToStringExempt.kt new file mode 100644 index 0000000..b9aa7ee --- /dev/null +++ b/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/ToStringExempt.kt @@ -0,0 +1,23 @@ +package io.github.projectmapk.diag.ok + +import io.github.projectmapk.sealedClassEnumizer.Enumize + +// docs/test/ケース04-診断.md DIA-44: toString は手動宣言・継承具象とも MEMBER_CONFLICT の対象外 + +@Enumize +sealed interface NmTs + +// Any 以外の具象 toString を持つ継承元 +abstract class NmTsBase { + override fun toString(): String = "custom-inherited" +} + +// kind が継承経路上の具象 toString を持つ形 +object NmTsLeaf : NmTsBase(), NmTs + +// kind companion の手動 toString 宣言 +class NmTsMan(val v: Int) : NmTs { + companion object { + override fun toString(): String = "manual!" + } +} diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/TypealiasAliases.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/TypealiasAliases.kt new file mode 100644 index 0000000..6e83afa --- /dev/null +++ b/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/TypealiasAliases.kt @@ -0,0 +1,17 @@ +package io.github.projectmapk.diag.ok + +import io.github.projectmapk.sealedClassEnumizer.Enumized + +// docs/test/ケース04-診断.md DIA-52 用の別名宣言。 +// 頭別名(NmThAlias)は基底より先に解決される配置であることが要件であり、 +// 解決順はファイル名順に従うため本ファイル名は TypealiasMatch.kt より前に来る必要がある +// (先に解決されない配置は言語側がバックエンド ICE になる = sweep-typealias-samefile-head の既知の制限) + +// 型引数別名 +typealias NmTaAlias = NmTaSi.Enumish + +// 手動 supertype の頭(Enumized 自体)への別名 +typealias NmThAlias = Enumized + +// 末端側の冗長宣言に使う別名 +typealias NmTlAlias = NmTlSi.Enumish diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/TypealiasMatch.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/TypealiasMatch.kt new file mode 100644 index 0000000..44a1bbc --- /dev/null +++ b/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/TypealiasMatch.kt @@ -0,0 +1,26 @@ +package io.github.projectmapk.diag.ok + +import io.github.projectmapk.sealedClassEnumizer.Enumize +import io.github.projectmapk.sealedClassEnumizer.Enumized + +// docs/test/ケース04-診断.md DIA-52: 照合は typealias 展開後に行われる。 +// 別名宣言は基底より先に解決される配置(ファイル名順で前)が要件であり TypealiasAliases.kt が持つ。 +// 先に解決されない同一ファイル配置は NmTlSame.kt が担う + +// 型引数別名の手動 Enumized(展開後は厳密一致)→ 注入スキップ +@Enumize +sealed interface NmTaSi : Enumized { + data object L : NmTaSi +} + +// 頭別名(Enumized 自体への別名)→ 注入スキップ +@Enumize +sealed interface NmThSi : NmThAlias { + data object L : NmThSi +} + +// 末端 Enumish 冗長宣言の別名形 → 注入スキップ +@Enumize +sealed interface NmTlSi { + data object L : NmTlSi, NmTlAlias +} diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/VisibilityNearMiss.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/VisibilityNearMiss.kt new file mode 100644 index 0000000..3d1f5d4 --- /dev/null +++ b/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/VisibilityNearMiss.kt @@ -0,0 +1,55 @@ +package io.github.projectmapk.diag.ok + +import io.github.projectmapk.sealedClassEnumizer.Enumize + +// docs/test/ケース04-診断.md DIA-26: 3 段規則の成立形(規則 1 / 2・広い末端 object・private 基底・ +// 基底ネスト private 末端)は KIND_TYPE_NOT_DENOTABLE 非発火(C2 の分岐網羅)。 +// 別ファイル配置が要件となる private トップレベル中間は NmVis3Mid.kt が担う + +// 基底内ネストの private 末端 +@Enumize +sealed interface NmVis1 { + private data object Hidden : NmVis1 + + data object Shown : NmVis1 +} + +// private 基底と private 末端(private トップレベルはファイルスコープのため同一ファイル配置が要件) +@Enumize +private sealed interface NmVis2 + +private data object NmVis2Leaf : NmVis2 + +// 別ファイルの private トップレベル中間 sealed を持つ基底 +@Enumize +sealed interface NmVis3 + +// private 基底 + internal companion(実効可視性で規則 1) +@Enumize +private sealed interface NmVis4 { + class L(val v: Int) : NmVis4 { + internal companion object + } +} + +// internal 基底 + 基底より広い末端 object(kind は自身のため規則対象外) +@Enumize +internal sealed interface NmVis5 + +object NmVis5Wide : NmVis5 + +// internal 基底 + 広い末端 + public companion(規則 1 成立) +@Enumize +internal sealed interface NmVis6 + +class NmVis6Wide : NmVis6 { + companion object +} + +// public 基底 + internal companion → 規則 2 フォールバック +@Enumize +sealed interface NmVis7 { + class Half(val v: Int) : NmVis7 { + internal companion object + } +} diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/WellFormed.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/WellFormed.kt new file mode 100644 index 0000000..5feafde --- /dev/null +++ b/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/WellFormed.kt @@ -0,0 +1,33 @@ +package io.github.projectmapk.diag.ok + +import io.github.projectmapk.sealedClassEnumizer.Enumize + +// docs/test/ケース04-診断.md DIA-05: 正値と下限境界(sealed class / interface・継承者ゼロ・ +// 型パラメータ付き基底 / 末端)。本ファイルには診断が一切出ない。 +// local class の素通りは OkLocal.kt が担う + +// 正値の sealed interface 階層 +@Enumize +sealed interface OkSi { + data object A : OkSi + + data class B(val v: Int) : OkSi +} + +// 正値の sealed class 階層(DIA-16 の独立 2 階層の片割れを兼ねる) +@Enumize +sealed class OkSc { + data object C : OkSc() +} + +// 継承者ゼロの空階層(完全非発火の下限境界) +@Enumize +sealed interface OkEmpty + +// 型パラメータ付き基底 / 末端 +@Enumize +sealed class OkGen { + class BoxG(val t: T) : OkGen() + + class FixedG : OkGen() +} diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/Wl2Si.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/Wl2Si.kt deleted file mode 100644 index 7134ce7..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/Wl2Si.kt +++ /dev/null @@ -1,13 +0,0 @@ -package io.github.projectmapk.diag.ok - -import io.github.projectmapk.sealedClassEnumizer.Enumize - -// docs/test/ケース04-診断.md DIA-37/38/39: 基底 label 宣言の ES・継承末端 class の ES・末端 object の除外 -@Enumize -sealed interface Wl2Si { - val label: String get() = "base" - - data object L : Wl2Si - - data class C(val v: Int) : Wl2Si -} diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/Wl3Leaf.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/Wl3Leaf.kt deleted file mode 100644 index 54fdbe9..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/Wl3Leaf.kt +++ /dev/null @@ -1,4 +0,0 @@ -package io.github.projectmapk.diag.ok - -// docs/test/ケース04-診断.md DIA-38: 階層外 default 継承の label → ES 警告(クラス位置 + 宣言元 FQN) -class Wl3Leaf : Wl3Si, Wl3Named diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/Wl3Named.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/Wl3Named.kt deleted file mode 100644 index 5321f0b..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/Wl3Named.kt +++ /dev/null @@ -1,6 +0,0 @@ -package io.github.projectmapk.diag.ok - -// docs/test/ケース04-診断.md DIA-38 用: label の default 実装を持つ階層外 interface -interface Wl3Named { - val label: String get() = "named" -} diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/Wl3Si.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/Wl3Si.kt deleted file mode 100644 index c75110a..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/Wl3Si.kt +++ /dev/null @@ -1,7 +0,0 @@ -package io.github.projectmapk.diag.ok - -import io.github.projectmapk.sealedClassEnumizer.Enumize - -// docs/test/ケース04-診断.md DIA-38 用の基底 -@Enumize -sealed interface Wl3Si diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/WlPriv.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/WlPriv.kt deleted file mode 100644 index 80467b0..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/WlPriv.kt +++ /dev/null @@ -1,13 +0,0 @@ -package io.github.projectmapk.diag.ok - -import io.github.projectmapk.sealedClassEnumizer.Enumize - -// docs/test/ケース04-診断.md DIA-39: private の label 宣言(可視条件の偽側)→ 非発火 -@Enumize -sealed interface WlPriv { - class Q : WlPriv { - private val label: String = "q" - - companion object - } -} diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/WlSi.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/WlSi.kt deleted file mode 100644 index f28a36b..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/WlSi.kt +++ /dev/null @@ -1,17 +0,0 @@ -package io.github.projectmapk.diag.ok - -import io.github.projectmapk.sealedClassEnumizer.Enumize - -// docs/test/ケース04-診断.md DIA-37/39: label メンバー宣言の ES 警告と非対象(Named は label 以外) -@Enumize -sealed interface WlSi { - data class Tagged(val label: String) : WlSi - - data class Named(val name: String) : WlSi - - class Fn : WlSi { - fun label(): String = "fn" - - companion object - } -} From 8c713be22ef962105dc4593e38f72e3687b2c068 Mon Sep 17 00:00:00 2001 From: wrongwrong Date: Sun, 2 Aug 2026 00:52:10 +0900 Subject: [PATCH 7/9] =?UTF-8?q?test:=20diag-cross=20=E3=81=AE=20DIA-22=20?= =?UTF-8?q?=E7=94=A8=202=20=E9=9A=8E=E5=B1=A4=E3=82=92=201=20=E3=83=95?= =?UTF-8?q?=E3=82=A1=E3=82=A4=E3=83=AB=E3=81=B8=E3=81=BE=E3=81=A8=E3=82=81?= =?UTF-8?q?=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cross2 が両末端を実装する 2 階層は同一ケースの構成要素のため XfamSi へ集約する。 Co-Authored-By: Claude Opus 5 --- .../io/github/projectmapk/diag/xlib/XfamSi.kt | 15 +++++++++++++++ .../io/github/projectmapk/diag/xlib/XfamSi1.kt | 9 --------- .../io/github/projectmapk/diag/xlib/XfamSi2.kt | 9 --------- 3 files changed, 15 insertions(+), 18 deletions(-) create mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-cross/lib/src/main/kotlin/io/github/projectmapk/diag/xlib/XfamSi.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-cross/lib/src/main/kotlin/io/github/projectmapk/diag/xlib/XfamSi1.kt delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-cross/lib/src/main/kotlin/io/github/projectmapk/diag/xlib/XfamSi2.kt diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-cross/lib/src/main/kotlin/io/github/projectmapk/diag/xlib/XfamSi.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-cross/lib/src/main/kotlin/io/github/projectmapk/diag/xlib/XfamSi.kt new file mode 100644 index 0000000..45667f6 --- /dev/null +++ b/integration-test/gradle-integration/src/test/resources/fixtures/diag-cross/lib/src/main/kotlin/io/github/projectmapk/diag/xlib/XfamSi.kt @@ -0,0 +1,15 @@ +package io.github.projectmapk.diag.xlib + +import io.github.projectmapk.sealedClassEnumizer.Enumize + +// docs/test/ケース04-診断.md DIA-22 用の 2 階層(利用側 app の Cross2 が両末端を実装する) + +@Enumize +sealed interface XfamSi1 { + interface LeafC : XfamSi1 +} + +@Enumize +sealed interface XfamSi2 { + interface LeafD : XfamSi2 +} diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-cross/lib/src/main/kotlin/io/github/projectmapk/diag/xlib/XfamSi1.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-cross/lib/src/main/kotlin/io/github/projectmapk/diag/xlib/XfamSi1.kt deleted file mode 100644 index fed6edd..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-cross/lib/src/main/kotlin/io/github/projectmapk/diag/xlib/XfamSi1.kt +++ /dev/null @@ -1,9 +0,0 @@ -package io.github.projectmapk.diag.xlib - -import io.github.projectmapk.sealedClassEnumizer.Enumize - -// docs/test/ケース04-診断.md DIA-22 用の階層 1 -@Enumize -sealed interface XfamSi1 { - interface LeafC : XfamSi1 -} diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-cross/lib/src/main/kotlin/io/github/projectmapk/diag/xlib/XfamSi2.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-cross/lib/src/main/kotlin/io/github/projectmapk/diag/xlib/XfamSi2.kt deleted file mode 100644 index fcd1890..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-cross/lib/src/main/kotlin/io/github/projectmapk/diag/xlib/XfamSi2.kt +++ /dev/null @@ -1,9 +0,0 @@ -package io.github.projectmapk.diag.xlib - -import io.github.projectmapk.sealedClassEnumizer.Enumize - -// docs/test/ケース04-診断.md DIA-22 用の階層 2 -@Enumize -sealed interface XfamSi2 { - interface LeafD : XfamSi2 -} From a97f1be2a3dcfe9a50248a8c6c8ff50d142490b0 Mon Sep 17 00:00:00 2001 From: wrongwrong Date: Sun, 2 Aug 2026 00:52:10 +0900 Subject: [PATCH 8/9] =?UTF-8?q?docs:=20=E3=83=95=E3=82=A3=E3=82=AF?= =?UTF-8?q?=E3=82=B9=E3=83=81=E3=83=A3=E3=81=AE=E3=83=95=E3=82=A1=E3=82=A4?= =?UTF-8?q?=E3=83=AB=E5=88=86=E5=89=B2=E5=8D=98=E4=BD=8D=E3=82=92=E6=98=8E?= =?UTF-8?q?=E6=96=87=E5=8C=96=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 「1 ファイル 1 クラス規約の適用外」という記述を、分割単位(階層フィクスチャ = 1 階層・診断フィクスチャ = 1 診断ケース)と、分離が検証の成立条件となる条件の 表へ差し替える。 Co-Authored-By: Claude Opus 5 --- ...01\343\203\243\346\247\213\346\210\220.md" | 20 +++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git "a/docs/test/\343\203\225\343\202\243\343\202\257\343\202\271\343\203\201\343\203\243\346\247\213\346\210\220.md" "b/docs/test/\343\203\225\343\202\243\343\202\257\343\202\271\343\203\201\343\203\243\346\247\213\346\210\220.md" index 5b74cca..d199e61 100644 --- "a/docs/test/\343\203\225\343\202\243\343\202\257\343\202\271\343\203\201\343\203\243\346\247\213\346\210\220.md" +++ "b/docs/test/\343\203\225\343\202\243\343\202\257\343\202\271\343\203\201\343\203\243\346\247\213\346\210\220.md" @@ -122,8 +122,24 @@ src/test には test compilation 配線検証用の小さな @Enumize 階層(T - 診断フィクスチャの行位置はアサートの一部であり、編集時は行番号照合を更新する。 TestKit フィクスチャは ktfmt 整形対象外。 - 順序フィクスチャの期待値は FQN の UTF-16 序数から機械的に導出し、期待列をコメントで併記する。 -- producer-jvm のフィクスチャで「1 ファイル 1 クラス」規約より配置制約(同一ファイル要求・ - 複数トップレベル宣言)が優先される場合は、ファイル先頭コメントで適用外を明示する。 + +### 5.1 ファイル分割の単位 + +階層フィクスチャは 1 ファイル = 1 階層(基底・中間・末端・吸収サブタイプ・kind の親クラスを同居させる)、 +診断フィクスチャは 1 ファイル = 1 診断ケースを既定とし、ファイル名はそれぞれ基底名・診断名とする。 + +ただし次のいずれかに当たる宣言はファイルを分けることが検証の成立条件であり、 +その理由をファイル先頭コメントに明示する。 + +| 分離が要件となる条件 | 例 | +|---|---| +| `private` トップレベルの壁(ファイルスコープ)を作る | vis.pub の別ファイル private 末端・diag-fail の ScopePrivUse | +| K7 の「別ファイル配置」自体が次元値 | order.flat の別ファイルトップレベル末端 | +| `import` 別名 / star import の解決文脈がファイル単位 | diag-ok の NmAlImported / NmStarNoc | +| typealias の解決順(ファイル名順)が挙動を分ける | diag-ok の TypealiasAliases が TypealiasMatch より前 | +| ファイル単位の非発火アサートが同居を許さない | diag-mpp の ON_EXPECT / ON_ACTUAL 非発火・diag-fail の Mc1Si | +| IC / 決定性テストがファイル粒度で編集・追加削除する | ic-\* / determinism / abi-propagation | +| 別モジュール・別パッケージ・別ソースセットに置く | diag-cross / failother / diag-mpp | ## 6. maven-integration(Maven フィクスチャ) From 2ba436af237537dd02c37b09279bb30a0f31233b Mon Sep 17 00:00:00 2001 From: wrongwrong Date: Sun, 2 Aug 2026 01:07:38 +0900 Subject: [PATCH 9/9] =?UTF-8?q?test:=20=E8=A4=87=E6=95=B0=E3=83=95?= =?UTF-8?q?=E3=82=A1=E3=82=A4=E3=83=AB=E3=81=AB=E8=B7=A8=E3=82=8B=E8=A8=BA?= =?UTF-8?q?=E6=96=AD=E3=82=B1=E3=83=BC=E3=82=B9=E3=82=92=E3=82=B1=E3=83=BC?= =?UTF-8?q?=E3=82=B9=E5=B0=82=E7=94=A8=E3=83=91=E3=83=83=E3=82=B1=E3=83=BC?= =?UTF-8?q?=E3=82=B8=E3=81=B8=E5=88=87=E3=82=8A=E5=87=BA=E3=81=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 1 ケースが複数ファイルになる箇所をパッケージで括り、ルートパッケージには 1 ファイル = 1 ケースのものだけを残す。sealed 階層は同一パッケージを要求するため 階層ごと丸ごと移す。 - diag-fail: visibilityscope(DIA-28)・labelclash(DIA-34/35)・memberconflict(DIA-40〜43) - diag-ok: rawtracking(DIA-31/32)・typealiasmatch(DIA-52)・visibility(DIA-26) 「別パッケージであること」自体が次元値の far はケースのパッケージ配下へ入れ子にする。 ファイル名は変えないため診断の file:line 照合に変更はない。 Co-Authored-By: Claude Opus 5 --- ...71\343\203\201\343\203\243\346\247\213\346\210\220.md" | 8 ++++++++ .../kotlin/io/github/projectmapk/diag/fail/ShapeProbe.kt | 2 ++ .../projectmapk/diag/fail/{ => labelclash}/LabelClash.kt | 2 +- .../projectmapk/diag/fail/{ => labelclash}/Lc4Priv.kt | 2 +- .../projectmapk/diag/fail/{ => memberconflict}/Mc1Si.kt | 2 +- .../diag/fail/{ => memberconflict}/MemberConflict.kt | 2 +- .../diag/fail/{ => visibilityscope}/ScopePriv.kt | 2 +- .../diag/fail/{ => visibilityscope}/ScopePrivUse.kt | 2 +- .../diag/fail/{ => visibilityscope}/VisibilityScope.kt | 2 +- .../io/github/projectmapk/diag/ok/far/NmFarAlias.kt | 4 ---- .../github/projectmapk/diag/ok/{ => rawtracking}/NmAl.kt | 4 ++-- .../projectmapk/diag/ok/{ => rawtracking}/NmAlAlias.kt | 2 +- .../projectmapk/diag/ok/{ => rawtracking}/NmAlImported.kt | 4 ++-- .../projectmapk/diag/ok/{ => rawtracking}/NmFarNoc.kt | 4 ++-- .../projectmapk/diag/ok/{ => rawtracking}/NmStarNoc.kt | 4 ++-- .../projectmapk/diag/ok/rawtracking/far/NmFarAlias.kt | 4 ++++ .../projectmapk/diag/ok/{ => typealiasmatch}/NmTlSame.kt | 2 +- .../diag/ok/{ => typealiasmatch}/TypealiasAliases.kt | 2 +- .../diag/ok/{ => typealiasmatch}/TypealiasMatch.kt | 2 +- .../projectmapk/diag/ok/{ => visibility}/NmVis3Mid.kt | 2 +- .../diag/ok/{ => visibility}/VisibilityNearMiss.kt | 2 +- 21 files changed, 35 insertions(+), 25 deletions(-) rename integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/{ => labelclash}/LabelClash.kt (96%) rename integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/{ => labelclash}/Lc4Priv.kt (88%) rename integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/{ => memberconflict}/Mc1Si.kt (92%) rename integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/{ => memberconflict}/MemberConflict.kt (97%) rename integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/{ => visibilityscope}/ScopePriv.kt (87%) rename integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/{ => visibilityscope}/ScopePrivUse.kt (84%) rename integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/{ => visibilityscope}/VisibilityScope.kt (95%) delete mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/far/NmFarAlias.kt rename integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/{ => rawtracking}/NmAl.kt (91%) rename integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/{ => rawtracking}/NmAlAlias.kt (66%) rename integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/{ => rawtracking}/NmAlImported.kt (81%) rename integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/{ => rawtracking}/NmFarNoc.kt (59%) rename integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/{ => rawtracking}/NmStarNoc.kt (61%) create mode 100644 integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/rawtracking/far/NmFarAlias.kt rename integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/{ => typealiasmatch}/NmTlSame.kt (91%) rename integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/{ => typealiasmatch}/TypealiasAliases.kt (93%) rename integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/{ => typealiasmatch}/TypealiasMatch.kt (94%) rename integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/{ => visibility}/NmVis3Mid.kt (89%) rename integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/{ => visibility}/VisibilityNearMiss.kt (97%) diff --git "a/docs/test/\343\203\225\343\202\243\343\202\257\343\202\271\343\203\201\343\203\243\346\247\213\346\210\220.md" "b/docs/test/\343\203\225\343\202\243\343\202\257\343\202\271\343\203\201\343\203\243\346\247\213\346\210\220.md" index d199e61..eb703dd 100644 --- "a/docs/test/\343\203\225\343\202\243\343\202\257\343\202\271\343\203\201\343\203\243\346\247\213\346\210\220.md" +++ "b/docs/test/\343\203\225\343\202\243\343\202\257\343\202\271\343\203\201\343\203\243\346\247\213\346\210\220.md" @@ -141,6 +141,14 @@ src/test には test compilation 配線検証用の小さな @Enumize 階層(T | IC / 決定性テストがファイル粒度で編集・追加削除する | ic-\* / determinism / abi-propagation | | 別モジュール・別パッケージ・別ソースセットに置く | diag-cross / failother / diag-mpp | +**1 ケースが複数ファイルに跨る場合は、そのケース専用のパッケージへ切り出す。** +`sealed` 階層は同一パッケージを要求するため、切り出しは階層ごと丸ごと移す。 +パッケージ名はケースの内容を表す小文字 1 語とする +(diag-fail の `visibilityscope` / `labelclash` / `memberconflict`、 +diag-ok の `rawtracking` / `typealiasmatch` / `visibility`)。 +「別パッケージであること」自体が次元値の場合は、そのケースのパッケージ配下へ入れ子にする +(diag-ok の `rawtracking.far`)。 + ## 6. maven-integration(Maven フィクスチャ) フィクスチャは 1 プロジェクト = 1 POM の合成 Maven プロジェクトであり、実 Maven ビルドで駆動する。 diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/ShapeProbe.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/ShapeProbe.kt index 9fb5ea2..6116ab8 100644 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/ShapeProbe.kt +++ b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/ShapeProbe.kt @@ -1,5 +1,7 @@ package io.github.projectmapk.diag.fail +import io.github.projectmapk.diag.fail.memberconflict.Mc1Si + // docs/test/ケース04-診断.md DIA-60: MC / MSM 発火時も形状生成は継続する // (発火宣言に隣接する生成 API 参照が未解決にならない = このファイルには診断が出ない) fun shapeProbeMc(): Int = Mc1Si.Enumish.entries.size diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/LabelClash.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/labelclash/LabelClash.kt similarity index 96% rename from integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/LabelClash.kt rename to integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/labelclash/LabelClash.kt index c4929a6..e6ac6a5 100644 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/LabelClash.kt +++ b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/labelclash/LabelClash.kt @@ -1,4 +1,4 @@ -package io.github.projectmapk.diag.fail +package io.github.projectmapk.diag.fail.labelclash import io.github.projectmapk.sealedClassEnumizer.Enumize diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Lc4Priv.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/labelclash/Lc4Priv.kt similarity index 88% rename from integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Lc4Priv.kt rename to integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/labelclash/Lc4Priv.kt index aa8f476..23d4f95 100644 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Lc4Priv.kt +++ b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/labelclash/Lc4Priv.kt @@ -1,4 +1,4 @@ -package io.github.projectmapk.diag.fail +package io.github.projectmapk.diag.fail.labelclash // docs/test/ケース04-診断.md DIA-34: Lc4Si 階層の参照不能末端(別ファイルの private トップレベル)。 // IR-only アクセサで load し、LABEL_CLASH を抑止も誘発もしない。 diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Mc1Si.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/memberconflict/Mc1Si.kt similarity index 92% rename from integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Mc1Si.kt rename to integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/memberconflict/Mc1Si.kt index 53a147e..595e7a2 100644 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/Mc1Si.kt +++ b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/memberconflict/Mc1Si.kt @@ -1,4 +1,4 @@ -package io.github.projectmapk.diag.fail +package io.github.projectmapk.diag.fail.memberconflict import io.github.projectmapk.sealedClassEnumizer.Enumize import kotlin.reflect.KClass diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/MemberConflict.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/memberconflict/MemberConflict.kt similarity index 97% rename from integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/MemberConflict.kt rename to integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/memberconflict/MemberConflict.kt index 3e8e462..3e6f68b 100644 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/MemberConflict.kt +++ b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/memberconflict/MemberConflict.kt @@ -1,4 +1,4 @@ -package io.github.projectmapk.diag.fail +package io.github.projectmapk.diag.fail.memberconflict import io.github.projectmapk.sealedClassEnumizer.Enumize import io.github.projectmapk.sealedClassEnumizer.Enumized diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/ScopePriv.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/visibilityscope/ScopePriv.kt similarity index 87% rename from integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/ScopePriv.kt rename to integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/visibilityscope/ScopePriv.kt index b91a29e..d14df58 100644 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/ScopePriv.kt +++ b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/visibilityscope/ScopePriv.kt @@ -1,4 +1,4 @@ -package io.github.projectmapk.diag.fail +package io.github.projectmapk.diag.fail.visibilityscope import io.github.projectmapk.sealedClassEnumizer.Enumize diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/ScopePrivUse.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/visibilityscope/ScopePrivUse.kt similarity index 84% rename from integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/ScopePrivUse.kt rename to integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/visibilityscope/ScopePrivUse.kt index 4604396..103bcad 100644 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/ScopePrivUse.kt +++ b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/visibilityscope/ScopePrivUse.kt @@ -1,4 +1,4 @@ -package io.github.projectmapk.diag.fail +package io.github.projectmapk.diag.fail.visibilityscope // docs/test/ケース04-診断.md DIA-28: private トップレベル基底を別ファイルから参照 → 言語可視性エラーのみ。 // 参照が基底と別ファイルであること自体が本ケースの成立条件である diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/VisibilityScope.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/visibilityscope/VisibilityScope.kt similarity index 95% rename from integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/VisibilityScope.kt rename to integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/visibilityscope/VisibilityScope.kt index 6a09d5f..73a0cdf 100644 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/VisibilityScope.kt +++ b/integration-test/gradle-integration/src/test/resources/fixtures/diag-fail/src/main/kotlin/io/github/projectmapk/diag/fail/visibilityscope/VisibilityScope.kt @@ -1,4 +1,4 @@ -package io.github.projectmapk.diag.fail +package io.github.projectmapk.diag.fail.visibilityscope import io.github.projectmapk.sealedClassEnumizer.Enumize diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/far/NmFarAlias.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/far/NmFarAlias.kt deleted file mode 100644 index 5c5eede..0000000 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/far/NmFarAlias.kt +++ /dev/null @@ -1,4 +0,0 @@ -package io.github.projectmapk.diag.ok.far - -// docs/test/ケース04-診断.md DIA-32 用: 基底を指す別パッケージの typealias -typealias NmFarAlias = io.github.projectmapk.diag.ok.NmAl diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmAl.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/rawtracking/NmAl.kt similarity index 91% rename from integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmAl.kt rename to integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/rawtracking/NmAl.kt index 9e33c98..50fe61e 100644 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmAl.kt +++ b/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/rawtracking/NmAl.kt @@ -1,4 +1,4 @@ -package io.github.projectmapk.diag.ok +package io.github.projectmapk.diag.ok.rawtracking import io.github.projectmapk.sealedClassEnumizer.Enumize @@ -19,7 +19,7 @@ enum class NmEnumLeaf : NmAl { } // FQN 表記の supertype でも候補判定が働き自動生成される -class NmFqFoo(val v: Int) : io.github.projectmapk.diag.ok.NmAl +class NmFqFoo(val v: Int) : io.github.projectmapk.diag.ok.rawtracking.NmAl // typealias 経由 supertype の末端 class(companion 無し)→ 成立 class NmAlNoc(val v: Int) : NmAlT diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmAlAlias.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/rawtracking/NmAlAlias.kt similarity index 66% rename from integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmAlAlias.kt rename to integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/rawtracking/NmAlAlias.kt index d09fb3c..b82d8a7 100644 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmAlAlias.kt +++ b/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/rawtracking/NmAlAlias.kt @@ -1,4 +1,4 @@ -package io.github.projectmapk.diag.ok +package io.github.projectmapk.diag.ok.rawtracking // docs/test/ケース04-診断.md DIA-32 用の typealias(同一 pkg) typealias NmAlT = NmAl diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmAlImported.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/rawtracking/NmAlImported.kt similarity index 81% rename from integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmAlImported.kt rename to integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/rawtracking/NmAlImported.kt index 821dd55..b718af4 100644 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmAlImported.kt +++ b/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/rawtracking/NmAlImported.kt @@ -1,6 +1,6 @@ -package io.github.projectmapk.diag.ok +package io.github.projectmapk.diag.ok.rawtracking -import io.github.projectmapk.diag.ok.NmAl as NmAlI +import io.github.projectmapk.diag.ok.rawtracking.NmAl as NmAlI // docs/test/ケース04-診断.md DIA-31/32: import 別名表記の各末端形。 // import 別名は file 単位の解決文脈であり、本ファイルにまとめること自体がその表記の適用範囲となる diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmFarNoc.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/rawtracking/NmFarNoc.kt similarity index 59% rename from integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmFarNoc.kt rename to integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/rawtracking/NmFarNoc.kt index a647708..cd4f47f 100644 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmFarNoc.kt +++ b/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/rawtracking/NmFarNoc.kt @@ -1,6 +1,6 @@ -package io.github.projectmapk.diag.ok +package io.github.projectmapk.diag.ok.rawtracking -import io.github.projectmapk.diag.ok.far.NmFarAlias +import io.github.projectmapk.diag.ok.rawtracking.far.NmFarAlias // docs/test/ケース04-診断.md DIA-32: 別 pkg typealias を明示 import した末端(companion 無し)→ 成立 class NmFarNoc(val v: Int) : NmFarAlias diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmStarNoc.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/rawtracking/NmStarNoc.kt similarity index 61% rename from integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmStarNoc.kt rename to integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/rawtracking/NmStarNoc.kt index a34456e..515f925 100644 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmStarNoc.kt +++ b/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/rawtracking/NmStarNoc.kt @@ -1,6 +1,6 @@ -package io.github.projectmapk.diag.ok +package io.github.projectmapk.diag.ok.rawtracking -import io.github.projectmapk.diag.ok.far.* +import io.github.projectmapk.diag.ok.rawtracking.far.* // docs/test/ケース04-診断.md DIA-32: 別 pkg typealias を star import した末端(companion 無し)→ 成立 class NmStarNoc(val v: Int) : NmFarAlias diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/rawtracking/far/NmFarAlias.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/rawtracking/far/NmFarAlias.kt new file mode 100644 index 0000000..8161d87 --- /dev/null +++ b/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/rawtracking/far/NmFarAlias.kt @@ -0,0 +1,4 @@ +package io.github.projectmapk.diag.ok.rawtracking.far + +// docs/test/ケース04-診断.md DIA-32 用: 基底を指す別パッケージの typealias +typealias NmFarAlias = io.github.projectmapk.diag.ok.rawtracking.NmAl diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmTlSame.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/typealiasmatch/NmTlSame.kt similarity index 91% rename from integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmTlSame.kt rename to integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/typealiasmatch/NmTlSame.kt index 4d8a83f..3cb3086 100644 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmTlSame.kt +++ b/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/typealiasmatch/NmTlSame.kt @@ -1,4 +1,4 @@ -package io.github.projectmapk.diag.ok +package io.github.projectmapk.diag.ok.typealiasmatch import io.github.projectmapk.sealedClassEnumizer.Enumize diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/TypealiasAliases.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/typealiasmatch/TypealiasAliases.kt similarity index 93% rename from integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/TypealiasAliases.kt rename to integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/typealiasmatch/TypealiasAliases.kt index 6e83afa..1fc3ef7 100644 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/TypealiasAliases.kt +++ b/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/typealiasmatch/TypealiasAliases.kt @@ -1,4 +1,4 @@ -package io.github.projectmapk.diag.ok +package io.github.projectmapk.diag.ok.typealiasmatch import io.github.projectmapk.sealedClassEnumizer.Enumized diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/TypealiasMatch.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/typealiasmatch/TypealiasMatch.kt similarity index 94% rename from integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/TypealiasMatch.kt rename to integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/typealiasmatch/TypealiasMatch.kt index 44a1bbc..08d1dfd 100644 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/TypealiasMatch.kt +++ b/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/typealiasmatch/TypealiasMatch.kt @@ -1,4 +1,4 @@ -package io.github.projectmapk.diag.ok +package io.github.projectmapk.diag.ok.typealiasmatch import io.github.projectmapk.sealedClassEnumizer.Enumize import io.github.projectmapk.sealedClassEnumizer.Enumized diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmVis3Mid.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/visibility/NmVis3Mid.kt similarity index 89% rename from integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmVis3Mid.kt rename to integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/visibility/NmVis3Mid.kt index 07460ab..a66677d 100644 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/NmVis3Mid.kt +++ b/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/visibility/NmVis3Mid.kt @@ -1,4 +1,4 @@ -package io.github.projectmapk.diag.ok +package io.github.projectmapk.diag.ok.visibility // docs/test/ケース04-診断.md DIA-26: 別ファイルの private トップレベル中間 sealed → 非発火。 // private トップレベルはファイルスコープであり、基底(VisibilityNearMiss.kt の NmVis3)と diff --git a/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/VisibilityNearMiss.kt b/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/visibility/VisibilityNearMiss.kt similarity index 97% rename from integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/VisibilityNearMiss.kt rename to integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/visibility/VisibilityNearMiss.kt index 3d1f5d4..cae781b 100644 --- a/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/VisibilityNearMiss.kt +++ b/integration-test/gradle-integration/src/test/resources/fixtures/diag-ok/src/main/kotlin/io/github/projectmapk/diag/ok/visibility/VisibilityNearMiss.kt @@ -1,4 +1,4 @@ -package io.github.projectmapk.diag.ok +package io.github.projectmapk.diag.ok.visibility import io.github.projectmapk.sealedClassEnumizer.Enumize