Skip to content

Commit 499751e

Browse files
🧩 Refactor(Workflow): 控制流形态消歧+Models归位+表达式构建器收敛-代码组织重构阶段L14
Phase A - 低风险机械改动: - BlockScriptServiceImpl -> BlockScriptService(消除唯一Impl后缀异常) - BlueprintDebugger.cs -> Services/(运行时状态控制器,与RealPluginManager并列) - BlueprintDebugContext内联进ControlFlowGraph(1字段DTO,DebugStatementToNodeId) - 删除BlueprintToBlockScriptConverter死字段_cfg2bs - 修复3处过时文档(BlockScriptSerializer/PipelineContext/ControlFlowMapping) Phase B - CFGStatementKind控制流形态消歧(核心): - FlowControlType重命名为图结构语义名: Branch->ConditionalJump, Loop->IterativeJump, Switch->IndexedDispatch, Break->LoopExit, ToLoopCond->LoopBackedge, Return->ScriptReturn (消除与builtin函数名同名混淆,命名按图/边语义而非函数) - IBuiltinFunctionDefinition新增FlowControlShape(默认null),StatementKind改为派生 - CFGStatement新增FlowControlShape属性,LowerToCFG/合成语句时填充 - 所有控制流消费点改查FlowControlShape: CFG2CSConverter类型推断/BP2CFGConverter块分类 与边语义/CFGConditionDuplicator/CFGBlock.EndsWithControlFlow/GetEdgeType/RegenerateBranchSource - 删除6个registry迁移遗留死值: Print/Set/Get/Pause/PluginCallWithTarget/TryGetDevice (保留5个控制流Kind作派生诊断标签+Assignment/Expression/NextBlockAssignment值分类) - ControlFlowMapping简化文档+明确ToFunctionName为唯一字符串源 - 新增控制流builtin只需设FlowControlShape,零enum改动零散弹 Phase C - Models提升: - Abstractions/Models/ -> 根Models/(13文件,namespace Abstractions.Models->Models) - Abstractions/回归接口本义(已证伪跨Contract边界说法:Dashboard走接口不碰模型) - GlobalUsings+19文件显式引用更新 Phase D - 表达式构建器收敛+registry单例: - CSEmitContext新增GetInvocation/PluginCallExpression/PluginCallWithTargetExpression - 3个BuiltinFunctions从CFG2CSConverter.X(...)改ctx.X(...),消除叶子层反向依赖929行converter - BuiltinFunctionRegistry新增Instance懒单例,CFG2CSConverter/CSCompiler改用之 (消除4次Discover反射扫描与实例漂移) Phase E - ExprUtils性能优化: - ParseExpression/ParseStatement加ConcurrentDictionary memoize(热点路径,避免重复Roslyn解析) - IsCharacterLiteral改用SyntaxFactory.ParseToken(比表达式树解析便宜得多) 清理: KitX.sln移除SyncCodes悬空Build配置行 验证: Workflow/Core.Contract/Test/Dashboard四个项目0错误构建通过 测试: A-W全部23个测试通过(含控制流K/L/M/N/P/Q/R/S/T/V) BREAKING CHANGE: FlowControlType枚举值重命名(Branch->ConditionalJump等),外部引用需更新 Date: 2026-06-20 Author: StarInk
1 parent 28bdb1f commit 499751e

77 files changed

Lines changed: 302 additions & 261 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

KitX Clients/KitX Workflow/KitX.Workflow.Test/KcsCompileTest.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,9 @@
88
using KitX.Workflow.BlockScripting;
99
using KitX.Workflow.Compilation;
1010
using KitX.Workflow.Abstractions;
11-
using KitX.Workflow.Abstractions.Models;
12-
using KitX.Workflow.Abstractions.Models.Statements;
13-
using KitX.Workflow.Abstractions.Models.Results;
11+
using KitX.Workflow.Models;
12+
using KitX.Workflow.Models.Statements;
13+
using KitX.Workflow.Models.Results;
1414
using KitX.Workflow.Blueprint;
1515
using KitX.Workflow.CFG;
1616
using KitX.Workflow.Conversion;

KitX Clients/KitX Workflow/KitX.Workflow.Test/Program.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,9 @@
1010
using KitX.Workflow.BlockScripting;
1111
using KitX.Workflow.Compilation;
1212
using KitX.Workflow.Abstractions;
13-
using KitX.Workflow.Abstractions.Models;
14-
using KitX.Workflow.Abstractions.Models.Statements;
15-
using KitX.Workflow.Abstractions.Models.Results;
13+
using KitX.Workflow.Models;
14+
using KitX.Workflow.Models.Statements;
15+
using KitX.Workflow.Models.Results;
1616
using KitX.Workflow.Conversion;
1717

1818
namespace KitX.Workflow.Test;

KitX Clients/KitX Workflow/KitX.Workflow/Abstractions/IBlockScriptExecutor.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
using System.Threading;
33
using System.Threading.Tasks;
44
using KitX.Core.Contract.Workflow;
5-
using KitX.Workflow.Abstractions.Models;
5+
using KitX.Workflow.Models;
66

77
namespace KitX.Workflow.Abstractions;
88

KitX Clients/KitX Workflow/KitX.Workflow/Abstractions/IBlockScriptParser.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
using System.Threading.Tasks;
22
using KitX.Core.Contract.Workflow;
3-
using KitX.Workflow.Abstractions.Models.Results;
3+
using KitX.Workflow.Models.Results;
44

55
namespace KitX.Workflow.Abstractions;
66

KitX Clients/KitX Workflow/KitX.Workflow/Abstractions/IBlueprintConverters.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,5 +21,5 @@ public interface IBlockScriptToBlueprintConverter
2121
/// </summary>
2222
/// <param name="script">Parsed BlockScript</param>
2323
/// <returns>Converted Blueprint</returns>
24-
KitX.Core.Contract.Workflow.Blueprint Convert(KitX.Workflow.Abstractions.Models.BlockScript script);
24+
KitX.Core.Contract.Workflow.Blueprint Convert(KitX.Workflow.Models.BlockScript script);
2525
}

KitX Clients/KitX Workflow/KitX.Workflow/Abstractions/IBlueprintToBlockScriptConverter.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,5 +18,5 @@ public interface IBlueprintToBlockScriptConverter
1818
/// </summary>
1919
/// <param name="blueprint">Blueprint to convert</param>
2020
/// <returns>Parsed BlockScript</returns>
21-
KitX.Workflow.Abstractions.Models.BlockScript ConvertToBlockScript(KitX.Core.Contract.Workflow.Blueprint blueprint);
21+
KitX.Workflow.Models.BlockScript ConvertToBlockScript(KitX.Core.Contract.Workflow.Blueprint blueprint);
2222
}

KitX Clients/KitX Workflow/KitX.Workflow/Abstractions/IBuiltinFunctionDefinition.cs

Lines changed: 24 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -30,13 +30,32 @@ public interface IBuiltinFunctionDefinition
3030
/// </summary>
3131
bool IsNonExtractable { get; }
3232

33-
// ─── 语句类型映射 ─────────────────────────────────
33+
// ─── 控制流形态 ─────────────────────────────────
3434

3535
/// <summary>
36-
/// 对应的 CFGStatementKind。用于 BS2CFGConverter 确定语句类型,
37-
/// 以及 CFG2BPConverter 选择节点创建策略。
36+
/// 该内置函数产生的 CFG 控制流形态(图结构角色)。非控制流函数返回 null(默认)。
37+
/// 这是控制流语义的权威来源——消费端(BP2CFGConverter/CFG2BPConverter/CFGConditionDuplicator/
38+
/// CFG2CSConverter 的类型推断等)应查询此属性而非 switch(CFGStatementKind)。
39+
/// 新增控制流内置函数只需覆写此属性,无需修改 CFGStatementKind 枚举或散弹式 switch。
3840
/// </summary>
39-
CFGStatementKind StatementKind { get; }
41+
FlowControlType? FlowControlShape => null;
42+
43+
// ─── 语句类型映射(派生)─────────────────────────
44+
45+
/// <summary>
46+
/// 对应的 CFGStatementKind。现在由 <see cref="FlowControlShape"/> 派生:
47+
/// 控制流形态映射到对应的 Kind;非控制流默认 Expression。
48+
/// 保留供尚未迁移的旧消费点使用(见 Phase B.3 清理)。
49+
/// </summary>
50+
CFGStatementKind StatementKind => FlowControlShape switch
51+
{
52+
FlowControlType.ConditionalJump => CFGStatementKind.Branch,
53+
FlowControlType.IterativeJump => CFGStatementKind.Loop,
54+
FlowControlType.IndexedDispatch => CFGStatementKind.Switch,
55+
FlowControlType.LoopBackedge => CFGStatementKind.ToLoopCond,
56+
FlowControlType.LoopExit => CFGStatementKind.Break,
57+
_ => CFGStatementKind.Expression
58+
};
4059

4160
/// <summary>
4261
/// 此内置函数在蓝图中物化为哪种节点类型。默认 <see cref="BuiltinNodeKind.BuiltinFunction"/>;
@@ -125,6 +144,7 @@ List<CFGStatement> LowerToCFG(
125144
{
126145
BlockName = blockName,
127146
Kind = StatementKind,
147+
FlowControlShape = FlowControlShape,
128148
FunctionName = FunctionName,
129149
Arguments = expandedArgs.ToList(),
130150
PubVarTarget = assignedVar,

KitX Clients/KitX Workflow/KitX.Workflow/Abstractions/Models/FlowControlType.cs

Lines changed: 0 additions & 38 deletions
This file was deleted.

KitX Clients/KitX Workflow/KitX.Workflow/BlockScripting/BlockLinker.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,9 +28,9 @@ public static void LinkBlocksSequentially(BlockScript script)
2828
// A block ending with Branch/Loop should NOT fall through
2929
var lastStatement = currentBlock.Statements.LastOrDefault();
3030
if (lastStatement is FlowControlStatement flowStmt &&
31-
(flowStmt.ControlType == FlowControlType.Branch ||
32-
flowStmt.ControlType == FlowControlType.Loop ||
33-
flowStmt.ControlType == FlowControlType.Return))
31+
(flowStmt.ControlType == FlowControlType.ConditionalJump ||
32+
flowStmt.ControlType == FlowControlType.IterativeJump ||
33+
flowStmt.ControlType == FlowControlType.ScriptReturn))
3434
{
3535
continue;
3636
}

KitX Clients/KitX Workflow/KitX.Workflow/BlockScripting/BlockStatementExtractor.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -147,7 +147,7 @@ private void ExtractStatements(
147147
{
148148
LineNumber = returnStmt.GetLineNumber(),
149149
SourceCode = returnStmt.ToFullString(),
150-
ControlType = FlowControlType.Return,
150+
ControlType = FlowControlType.ScriptReturn,
151151
ConditionExpression = returnStmt.Expression?.ToString() ?? string.Empty
152152
});
153153
break;

0 commit comments

Comments
 (0)