ElementPass 类
类QQmlSA::ElementPass所有元素静态分析遍历的基类。 更多...
头文件 | #include <ElementPass> |
CMake | find_package(Qt6 REQUIRED COMPONENTS QmlCompiler) target_link_libraries(mytarget PRIVATE Qt6::QmlCompiler) |
继承 | QQmlSA::GenericPass |
状态 | 技术预览 |
公共函数
virtual void | run(const QQmlSA::Element &element) = 0 |
virtual bool | shouldRun(const QQmlSA::Element &element) |
详细说明
ElementPass 是两种分析遍历中较简单的一个。它将考虑文件中的每个元素。可以使用 shouldRun() 方法筛选出无关的元素,run() 方法负责初始工作。
适合在 ElementPass 中执行的任务有
- 检查 Element 的属性是否以一种毫无意义的方式进行组合
- 验证属性值(例如,属性是否只能取特定的枚举值)
- 检查依赖于 Element 父元素的行为(例如,当父元素是
Layout
时,不要使用 Item::width)。
如下所示,建议在 ElementPass 的构造函数中执行必要的类型解析并将其缓存在局部成员中,并通过 shouldRun() 实现一些筛选以保持静态分析的性能。
using namespace QQmlSA; class MyElementPass : public ElementPass { Element myType; public: MyElementPass(QQmlSA::PassManager *manager) : myType(resolveType("MyModule", "MyType")) {} bool shouldRun(const Element &element) override { return element.inherits(myType); } void run(const Element &element) override { // actual pass logic } }
ElementPass 对元素属性的使用了解有限。如果您需要该信息,请考虑使用 PropertyPass。
注意:ElementPass 仅考虑可实例化的类型。因此,它不适用于分析附加类型和单例。需要通过 PropertyPass 来处理它们。
成员函数文档
[纯虚函数]
void ElementPass::run(const QQmlSA::Element &element)
如果 shouldRun()
返回 true
,则执行。对 element 执行遍历的真实计算。此方法旨在被重写。调用基类方法是不必要的。
[虚函数]
bool ElementPass::shouldRun(const QQmlSA::Element &element)
控制是否在给定的元素上执行run()
函数。子类可以重写此方法,通过筛选掉不相关的元素来提高分析性能。
默认实现无条件返回true
。
© 2024 Qt 公司有限。此处收录的文档贡献归各自版权所有者所有。本文件提供的文档根据自由软件基金会发布的GNU 自由文档许可证第 1.3 版条款获得许可。Qt及其相应标志是芬兰及/或其他国家 Qt 公司的商标。所有其他商标归各自的权利人所有。