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.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。