ElementPass Class

class QQmlSA::ElementPass

要素に対するすべての静的解析パスの基本クラスです。さらに...

Header: #include <ElementPass>
CMake: find_package(Qt6 REQUIRED COMPONENTS QmlCompiler)
target_link_libraries(mytarget PRIVATE Qt6::QmlCompiler)
Inherits: QQmlSA::GenericPass
Status: Technical Preview

パブリック関数

virtual void run(const QQmlSA::Element &element) = 0
virtual bool shouldRun(const QQmlSA::Element &element)

詳細説明

ElementPassは2つの解析パスのうち、より単純なものです。ファイル内のすべての要素を考慮します。shouldRun() メソッドを使用して、無関係な要素をフィルタリングできます。また、run() メソッドが初期作業を行います。

ElementPass に適した一般的なタスクは次のとおりです。

  • 要素のプロパティが無意味に組み合わされていないかチェックする。
  • プロパティ値の検証(たとえば、プロパティが特定の列挙型値しか取らないなど)
  • 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 で処理する必要があります。

メンバ関数の説明

[pure virtual] void ElementPass::run(const QQmlSA::Element &element)

shouldRun()true を返した場合に実行されます。element でパスの実計算を行う。このメソッドはオーバーライドされることを意図している。ベースメソッドを呼び出す必要はありません。

[virtual] bool ElementPass::shouldRun(const QQmlSA::Element &element)

与えられたelement に対してrun() 関数を実行するかどうかを制御します。サブクラスはこのメソッドをオーバーライドして、関連性のない要素をフィルタリングすることで、解析のパフォーマンスを向上させることができます。

デフォルトの実装では、無条件にtrue を返します。

本書に含まれる文書の著作権は、それぞれの所有者に帰属します 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。