PassManager Class

class QQmlSA ::PassManager

Can analyze an element and its children with static analysis passes. 更多...

头: #include <PassManager>
Status: Technical Preview

公共函数

PassManager (QQmlJSImportVisitor * visitor , QQmlJSTypeResolver * resolver )
void analyze (const QQmlSA::Element & root )
std::unordered_map<quint32, BindingInfo> bindingsByLocation () const
std::vector<std::shared_ptr<ElementPass>> elementPasses () const
bool hasImportedModule (QAnyStringView 模块 ) const
bool isCategoryEnabled (QQmlSA::LoggerWarningId category ) const
std::multimap<QString, PropertyPassInfo> propertyPasses () const
void registerElementPass (std::unique_ptr<ElementPass> pass )
bool registerPropertyPass (std::shared_ptr<PropertyPass> pass , QAnyStringView moduleName , QAnyStringView typeName , QAnyStringView propertyName = QAnyStringView(), bool allowInheritance = true)

详细描述

成员函数文档编制

PassManager:: PassManager ( QQmlJSImportVisitor * visitor , QQmlJSTypeResolver * resolver )

Constructs a pass manager given an import visitor and a type resolver .

void PassManager:: analyze (const QQmlSA::Element & root )

Runs the element passes over root and all its children.

std::unordered_map < quint32 , BindingInfo > PassManager:: bindingsByLocation () const

Returns bindings by their source location.

std::vector < std::shared_ptr < ElementPass >> PassManager:: elementPasses () const

Returns the list of element passes.

bool PassManager:: hasImportedModule ( QAnyStringView 模块 ) const

返回 true if the module named 模块 has been imported by the QML to be analyzed, false 否则。

This can be used to skip registering a pass which is specific to a specific module.

if (passManager->hasImportedModule("QtPositioning"))
    passManager->registerElementPass(
       std::make_unique<PositioningPass>(passManager)
    );
					

另请参阅 registerPropertyPass () 和 registerElementPass ().

bool PassManager:: isCategoryEnabled ( QQmlSA::LoggerWarningId category ) const

返回 true if warnings of category are enabled, false 否则。

std::multimap < QString , PropertyPassInfo > PassManager:: propertyPasses () const

Returns the list of property passes.

void PassManager:: registerElementPass ( std::unique_ptr < ElementPass > pass )

Registers a static analysis pass to be run on all elements.

bool PassManager:: registerPropertyPass ( std::shared_ptr < PropertyPass > pass , QAnyStringView moduleName , QAnyStringView typeName , QAnyStringView propertyName = QAnyStringView(), bool allowInheritance = true)

Registers a static analysis pass for properties. The pass will be run on every property matching the moduleName , typeName and propertyName .

省略 propertyName will register this pass for all properties matching the typeName and moduleName .

设置 allowInheritance to true means that the filtering on the type also accepts types deriving from typeName .

pass is passed as a std::shared_ptr to allow reusing the same pass on multiple elements:

auto titleValiadorPass = std::make_shared<TitleValidatorPass>(manager);
manager->registerPropertyPass(titleValidatorPass,
                              "QtQuick", "Window", "title");
manager->registerPropertyPass(titleValidatorPass,
                              "QtQuick.Controls", "Dialog", "title");
					

注意: Running analysis passes on too many items can be expensive. This is why it is generally good to filter down the set of properties of a pass using the moduleName , typeName and propertyName .

返回 true if the pass was successfully added, false otherwise. Adding a pass fails when the Element 指定通过 moduleName and typeName does not exist.

另请参阅 PropertyPass .