ElementPass 类

QQmlSA::ElementPass

所有元素静态分析遍历的基类。 更多...

头文件 #include <ElementPass>
CMakefind_package(Qt6 REQUIRED COMPONENTS QmlCompiler)
target_link_libraries(mytarget PRIVATE Qt6::QmlCompiler)
继承 QQmlSA::GenericPass
状态技术预览

公共函数

virtual voidrun(const QQmlSA::Element &element) = 0
virtual boolshouldRun(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 公司的商标。所有其他商标归各自的权利人所有。