Skip to content

QLExpress4支持返回运行时覆盖情况 #384

@DQinYuan

Description

@DQinYuan

需求描述

在一段脚本执行后,给应用返回语法树节点是否被执行的信息。相比 #373,支持面的更加广(比如可以支持循环),但是不会包含具体的计算结果 value

实现思路

因为分支覆盖信息统计会产生性能损耗,所以默认不进行统计。需要用户主动打开 traceEvaluated 选项后才会在 QLResult 中返回覆盖信息。

覆盖信息以 EvaluatedTrace 对象的形式返回,一个 EvaluatedTrace 对象代表一个计算节点:

public class EvaluatedTrace {
    private TraceType type;
    private String token;
    private Object value;
    private boolean evaluated;
    private List<EvaluatedTrace> children;
}

案例1,无短路运算场景:

if (a>3) {
    sum = 0
    for (i:[1,2,3]) {
        sum += i
    }
    sum
} else {
    100
}

则返回的 EvaluatedTrace 对象如下(假设上下文传入的a为4):

即下钻每一个 Block(代码块) 的结构,每一行作为 children 中的一个元素,并且整体标记该 block 是否执行过。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions