Add lazy-loading DataTypeTree implementation #1673
Open
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Summary
LazyClientDataTypeTreethat resolves types on demand by browsing inverse HasSubtype references, avoiding eager enumeration of the entire type hierarchyDataTypeTreeFactoryinterface witheager()andlazy()factory methods for configuring how the DataTypeTree is createdsetDataTypeTreeFactory()method toOpcUaClientto allow switching between eager and lazy tree implementationsClientBrowseUtilsclass with operation limit handlingDataTypeTreeBuilder,ObjectTypeTreeBuilder, andVariableTypeTreeBuilderto use shared utilitiesLazyClientDataTypeManagerthat resolves codecs on demand when types are requestedDataTypeManagerFactoryinterface witheager()andlazy()factory methods for configuring how the DataTypeManager is createdsetDataTypeManagerInitializer()withsetDynamicDataTypeManagerFactory()for greater flexibilityBreaking Changes
The
OpcUaClient.setDataTypeManagerInitializer()method has been replaced withsetDynamicDataTypeManagerFactory()to support both eager and lazy codec resolution strategies.OpcUaClient.DataTypeManagerInitializerDataTypeManagerFactory.InitializerOpcUaClient.DefaultDataTypeManagerInitializerDataTypeManagerFactory.DefaultInitializersetDataTypeManagerInitializer(initializer)setDynamicDataTypeManagerFactory(DataTypeManagerFactory.eager(initializer))Migration Examples
Custom initializer (e.g., legacy DTD support):
Custom codec factory:
Lazy resolution (new feature):