mdsal.git
23 months agoUse HexFormat to print out byte[] properties 35/100935/5
ivan.martiniak [Tue, 3 May 2022 11:32:21 +0000 (13:32 +0200)]
Use HexFormat to print out byte[] properties

HexFormat.of().formatHex(byte[] arr)
 - transform byte array to hex formated string,

For comparison array formated with Arrays.toString()
[-32,79,-48,32,-22,58,105,16,-94,-40,8,0,43,48,48,-99],
with formatHex() it is string "e04fd020ea3a6910a2d808002b30309d".

The main difference is that array formatted with formatHex()
does not contain signed values, what was a condition
in the task description.

The test was required to be changed as well because it was
dependent on Arrays.toString() method.

JIRA: MDSAL-692
Change-Id: Ica9e399d61d54ac19369d3b2a9f60c9690b44128
Signed-off-by: ivan.martiniak <ivan.martiniak@pantheon.tech>
23 months agoBump byte-buddy to 1.12.10 08/100908/1
Robert Varga [Mon, 2 May 2022 08:15:01 +0000 (10:15 +0200)]
Bump byte-buddy to 1.12.10

https://github.com/raphw/byte-buddy/releases/tag/byte-buddy-1.12.10

Change-Id: I3cf43e7adf6e99bc9794e3e561645646d5a4c720
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
23 months agoFix lead transaction cancellation 69/100869/4
Robert Varga [Thu, 28 Apr 2022 16:08:23 +0000 (18:08 +0200)]
Fix lead transaction cancellation

We have a thinko around recording frontend transaction, which leads
to us always cancelling the entire chain. This is not correct, as
evidenced by existing tests.

Correct the book keeping and refactor cancelTransaction() to allow
returning correct result of operation and handle the case where backend
refuses to cancel.

JIRA: MDSAL-756
Change-Id: I553e4de2d09acedf67af63bc292fae0bb5dfed78
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
23 months agoDitch Google Truth 71/100871/1
Robert Varga [Thu, 28 Apr 2022 17:26:13 +0000 (19:26 +0200)]
Ditch Google Truth

Truth is not bringing much to the table, use Hamcrest and JUnit
assertions instead.

Change-Id: Ib1badc61ff2bd2ccea27053b037382c625cb1c04
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
2 years agoUse Map.entry() in PingPongTransactionChain 68/100868/1
Robert Varga [Thu, 28 Apr 2022 15:38:41 +0000 (17:38 +0200)]
Use Map.entry() in PingPongTransactionChain

Map.entry() is potentially more efficient, use that instead of a
SimpleImmutableEntry.

Change-Id: I26a27f5f36a4c57b2e21158af78e4b50a787c24c
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
2 years agoUse VarHandles in PingPongTransactionChain 57/100857/3
Robert Varga [Thu, 28 Apr 2022 07:25:39 +0000 (09:25 +0200)]
Use VarHandles in PingPongTransactionChain

Most of our accesses are compareAndSwap() so we do not benefit all
that much from ARFU type safety. Switch to using VarHandles to access
our atomic fields. Provide an acquireReadyTx() to deal with the few
call sites which would require explicit cast due to using getAndSet().

VarHandles allow us to use compareAndExchange(), which exposes the
witness value -- hence our error paths report the correct object without
a possibility of a race.

Change-Id: I79d2791f6e0d6accb987e46d31415452f735a7f8
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
2 years agoReduce volatile variable access 59/100859/2
Robert Varga [Thu, 28 Apr 2022 08:06:34 +0000 (10:06 +0200)]
Reduce volatile variable access

The checkState() and verify() calls are costing us a superfluous
access after we have already accessed the volatile field. Refactor
them to prevent that.

Change-Id: I07c552593a89fb8929985ac637c6fba576b4e659
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
2 years agoFix a nullability warning in PingPongTransactionChain 58/100858/1
Robert Varga [Thu, 28 Apr 2022 07:54:33 +0000 (09:54 +0200)]
Fix a nullability warning in PingPongTransactionChain

Eclipse is flagging multiple accessed to the same field. The field
cannot move on us, but use a local variable to make the value invariant.

Change-Id: I81599fecc77861d5011e45fa336c554e412f87dc
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
2 years agoRemove dependency on jna 56/100856/1
Robert Varga [Wed, 27 Apr 2022 20:08:36 +0000 (22:08 +0200)]
Remove dependency on jna

We no longer need this, as we do not generate documentation for
byte-buddy.

Change-Id: I0c7e537393ab4a707dedcc163737c24b3abfa15c
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
2 years agoUse osgi componentn artifacts for docs 55/100855/1
Robert Varga [Wed, 27 Apr 2022 19:56:56 +0000 (21:56 +0200)]
Use osgi componentn artifacts for docs

Remove the use of osgi.{core,cmpn} and use individual packages.

Change-Id: Iaa0c06073204906a608d05b31711962b5981b844
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
2 years agoUse instanceof pattern match in fieldsFrom() 51/100851/1
Robert Varga [Wed, 27 Apr 2022 16:56:13 +0000 (18:56 +0200)]
Use instanceof pattern match in fieldsFrom()

With JD17 we can use a pattern match to cast the argument only once,
simplifying the generated code and the codegen a bit.

Change-Id: I14c61480eee3d0214d43af2337c5fd0cf9b7d3ae
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
2 years agoUse 'var' for augmentation variable 50/100850/1
Robert Varga [Wed, 27 Apr 2022 16:43:08 +0000 (18:43 +0200)]
Use 'var' for augmentation variable

Simplify the variable declaration and corresponding codegen bit
by relying on local variable type inference.

Change-Id: I3976b20ce5acbce66b1057bb3e374e18aaef3155
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
2 years agoGenerate documentation for builder getters 49/100849/1
Robert Varga [Wed, 27 Apr 2022 16:36:39 +0000 (18:36 +0200)]
Generate documentation for builder getters

Javadoc rightfully complains about Builders not documenting its getFoo()
methods. Add the javadocs pointing to their interface counterparts.

JIRA: MDSAL-755
Change-Id: Iacb5480b3bc0490d7c088add9e681076d067635d
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
2 years agoGenerate javadoc for builder setters 48/100848/1
Robert Varga [Wed, 27 Apr 2022 16:23:30 +0000 (18:23 +0200)]
Generate javadoc for builder setters

Setters are utterly undocumented. Add javadocs which point to the
corresponding interface method.

JIRA: MDSAL-755
Change-Id: I1d51ea8499d430ed231197e6448a1122d7ac0f27
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
2 years agoImport exception references 47/100847/1
Robert Varga [Wed, 27 Apr 2022 15:39:42 +0000 (17:39 +0200)]
Import exception references

We may be generating a competing construct, hence need to use
importedName for {IllegalArgument,NullPointer}Exception.

Change-Id: I3fe59a745bc17b292d8d50e6c55ef8669b0ee35a
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
2 years agoDocument Builder.augmentation() 46/100846/1
Robert Varga [Wed, 27 Apr 2022 15:32:38 +0000 (17:32 +0200)]
Document Builder.augmentation()

Builder's augmentation() method needs some javadoc to fix linting
warnings.

JIRA: MDSAL-755
Change-Id: I1bc62ea6753411159a9d21eca95eaf40b799d2b1
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
2 years agoAnnotate non-null build() return 45/100845/1
Robert Varga [Wed, 27 Apr 2022 15:22:10 +0000 (17:22 +0200)]
Annotate non-null build() return

Builder.build() always returns a non-null value, make sure we annotate
it properly.

Change-Id: I88df931e4d98481354d8e418909248f2d23d2b68
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
2 years agoUse Map.of() instead of Collections.emptyMap() in builders 44/100844/1
Robert Varga [Wed, 27 Apr 2022 15:02:43 +0000 (17:02 +0200)]
Use Map.of() instead of Collections.emptyMap() in builders

Augmentation field is not used by the builder-internal implementation,
hence we can inline the codegen. Also use Map.of() instead of
emptyMap().

Change-Id: I62e9b92b31355abd917a05a01c94f46230f449ec
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
2 years agoFix a minor typo 43/100843/2
Robert Varga [Wed, 27 Apr 2022 14:57:16 +0000 (16:57 +0200)]
Fix a minor typo

'wich' should be 'which'.

Change-Id: I20295881f28c139b0ec7a04678272e762969efe5
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
2 years agoDocument builder constructors 42/100842/2
Robert Varga [Wed, 27 Apr 2022 14:49:58 +0000 (16:49 +0200)]
Document builder constructors

Javadoc is not entirely happy with us not generating any documentation
for various Builder constructors. Fix this by adding some rudimentary
javadoc.

JIRA: MDSAL-755
Change-Id: Icaec59bb86d21f372e341ea93d9d89cbb2599951
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
2 years agoImprove Builder's fieldsFrom() javadoc 41/100841/1
Robert Varga [Wed, 27 Apr 2022 14:47:45 +0000 (16:47 +0200)]
Improve Builder's fieldsFrom() javadoc

We are listing out types, but do not link them. Fix this by making
each item a {@link}.

JIRA: MDSAL-755
Change-Id: I3bf6f8a97bd004cb88bee3fbc6b6b0ef373a36d0
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
2 years agoDocument QNAME constant 40/100840/1
Robert Varga [Wed, 27 Apr 2022 14:30:52 +0000 (16:30 +0200)]
Document QNAME constant

Javadoc does not like the constant not being documented. Make sure
we attach a bit of documentation.

JIRA: MDSAL-755
Change-Id: Ib56879225ea7653f22770d5e097d350e931ece13
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
2 years agoDocument YangModuleInfo(Provider) 39/100839/1
Robert Varga [Wed, 27 Apr 2022 14:19:24 +0000 (16:19 +0200)]
Document YangModuleInfo(Provider)

New javadoc is rather more noisy about missing documentation. Improve
the situation for module info and its ServiceLoader provider.

JIRA: MDSAL-755
Change-Id: I9d008a737b4db992664b24babfe206219b975e90
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
2 years agoRepair version declarations 32/100832/1
Robert Varga [Wed, 27 Apr 2022 06:50:22 +0000 (08:50 +0200)]
Repair version declarations

Previous search and replace has bumped our versions to an illegal
string, fix that up.

Change-Id: Ic1f0204ea78384e0c1f542c902ef9ce46bcb8d89
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
2 years agoSeal more Binding contracts 08/100808/5
Robert Varga [Tue, 26 Apr 2022 10:03:56 +0000 (12:03 +0200)]
Seal more Binding contracts

DataContainer/BindingObject/BindingContract provide structural
hierarchy which is fixed with codegen attaching to specific endpoints.
Make sure we express this invariant by sealing the interior of the
hierarchy.

Change-Id: I5121b5afe9a880600e7ee12700fc954352afa82d
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
2 years agoRemove RpcServiceInvoker.from(Class) 23/100823/1
Robert Varga [Tue, 26 Apr 2022 16:16:28 +0000 (18:16 +0200)]
Remove RpcServiceInvoker.from(Class)

This method is not used anywhere and has been deprecated since version
9.0.3. Remove it and its underlying implementation.

Change-Id: I81965075c38aec0ec7fd0da5eaf4b8fe1d867a7b
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
2 years agoDeprecate RpcServiceInvoker.from(Class) 22/100822/1
Robert Varga [Tue, 26 Apr 2022 16:10:52 +0000 (18:10 +0200)]
Deprecate RpcServiceInvoker.from(Class)

Invokers are considered an implementation detail and this particular
method is not used anywhere except tests. Schedule it for removal along
with ClassBasedRpcServiceInvoker it uses.

Change-Id: I4d8c57bbd982ea6eae21706d909af16495f29f56
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
2 years agoSeal YangSourceDefinition 11/100811/4
Robert Varga [Tue, 26 Apr 2022 10:11:21 +0000 (12:11 +0200)]
Seal YangSourceDefinition

YangSourceDefinition cannot be subclassed externally, make it a sealed
class.

Change-Id: Ibebd2c13dc4fac4e2def7f0924b2558b728e2f96
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
2 years agoSeal JavaTypeName 10/100810/4
Robert Varga [Tue, 26 Apr 2022 10:10:41 +0000 (12:10 +0200)]
Seal JavaTypeName

JavaTypeName cannot be externally subclassed, make it a sealed class.

Change-Id: I2f79f8cf3d4ff060ebb269a1d2fc0f57a3cda604
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
2 years agoClean up mdsal-binding-java-api-generator dependencies 21/100821/3
Robert Varga [Tue, 26 Apr 2022 14:52:50 +0000 (16:52 +0200)]
Clean up mdsal-binding-java-api-generator dependencies

We have a number of used dependencies which are not declared, clean them
up.

Change-Id: Iaaa3c808ff8f8c89b3c0bb67ad169eedefeade77
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
2 years agoFix mdsal-binding-model-api dependencies 12/100812/4
Robert Varga [Tue, 26 Apr 2022 10:13:15 +0000 (12:13 +0200)]
Fix mdsal-binding-model-api dependencies

We have a few warnings about used dependencies, fix that up.

Change-Id: I3ab19de156c637cc97ad06ef8d98a9284601b44a
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
2 years agoFixup mdsal-binding-model-api module definition 09/100809/4
Robert Varga [Tue, 26 Apr 2022 10:08:44 +0000 (12:08 +0200)]
Fixup mdsal-binding-model-api module definition

We require SLF4J, make sure to mention that.

Change-Id: Ibbdb5438ef60f4c5fc70c590e3fdfdbe2c0c4b8f
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
2 years agoGenerate a switch expression in forName()/forIntValue() 16/100816/4
Robert Varga [Tue, 26 Apr 2022 12:53:38 +0000 (14:53 +0200)]
Generate a switch expression in forName()/forIntValue()

JDK17 allows us to use switch expressions, which are nice and concise
way of matching values. Use them instead of ImmutableMaps for value
lookups.

JIRA: MDSAL-753
Change-Id: I1f12eb7469ce08ee66024abfb2bef5305f1cee63
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
2 years agoCleanup enumeration static factory methods 15/100815/4
Robert Varga [Tue, 26 Apr 2022 12:47:23 +0000 (14:47 +0200)]
Cleanup enumeration static factory methods

We have some amount of inconsistency around enumeration returns. Improve
the situation by making forName() return a nullable value and add
ofName()/ofValue() methods which throw IAE.

While we are modifying the template, also add proper @Nullable and
@NonNull annotations.

JIRA: MDSAL-754
Change-Id: I07fe4b408174ba830bcc1369ed70597ea2538a85
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
2 years agoFix mdsal-binding-test-model maven warning 17/100817/3
Robert Varga [Tue, 26 Apr 2022 12:57:19 +0000 (14:57 +0200)]
Fix mdsal-binding-test-model maven warning

We are using two dependencies without declaring them, fix that up.

Change-Id: Ifd71d0b5c7768107e004d3c851369d404fc8cbba
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
2 years agoDo not mock YangInstanceIdentifier 19/100819/1
Robert Varga [Tue, 26 Apr 2022 13:39:00 +0000 (15:39 +0200)]
Do not mock YangInstanceIdentifier

We just need a simple YangInstanceIdentifier. Do not mock it, but
rather use the correct value.

Change-Id: I8498973e71f394c736c4abab4b481f756ca0e2f8
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
2 years agoModernize SimpleDOMMountPointTest 18/100818/1
Robert Varga [Tue, 26 Apr 2022 13:18:02 +0000 (15:18 +0200)]
Modernize SimpleDOMMountPointTest

Do not use YangInstanceIdentifier mocking and clean up the structure
with better asserts.

Change-Id: Id8da5ad4c549990822628c50068b0ba5565408cc
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
2 years agoUse HexFormat instead of home-grown formatting 05/100805/2
Robert Varga [Mon, 25 Apr 2022 20:09:11 +0000 (22:09 +0200)]
Use HexFormat instead of home-grown formatting

JDK17 provides a ready-to-use HexFormat facility. Use it to format
mac-address/hex-string/phys-address/ipv6-address.

Change-Id: I3a99a5e27db1e75384e3d8b9879c83400273e715
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
2 years agoSeal BaseNotification 03/100803/4
Robert Varga [Mon, 25 Apr 2022 19:26:06 +0000 (21:26 +0200)]
Seal BaseNotification

BaseNotification should never be used directly, only through
Notification and InstanceNotification.

Change-Id: Ib3fd70aeb364523d7f630eb6e882f2308e427884
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
2 years agoPick up odlparent/yangtools snapshots 02/100802/5
Robert Varga [Mon, 25 Apr 2022 19:09:37 +0000 (21:09 +0200)]
Pick up odlparent/yangtools snapshots

Use snapshots for upstreams in order to get updates and JDK17 support.

Change-Id: Ie9dc7e34084b86cbb7e1c931ca884458d92c185c
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
2 years agoModernize NotificationListenerInvokerTest 04/100804/1
Robert Varga [Mon, 25 Apr 2022 19:46:21 +0000 (21:46 +0200)]
Modernize NotificationListenerInvokerTest

Improve assertions and use assertThrows().

Change-Id: Iee3847231e97a1e755559b13eb54b57fbf67c853
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
2 years agoFix checkstyle 01/100801/3
Robert Varga [Mon, 25 Apr 2022 19:11:44 +0000 (21:11 +0200)]
Fix checkstyle

Updated checkstyle is finding a few violations, fix them up.

Change-Id: I7a9cb9a19dc20de08a856c7752af8f060585e342
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
2 years agoYet another fix for javadoc 65/100665/1
Robert Varga [Wed, 20 Apr 2022 09:02:02 +0000 (11:02 +0200)]
Yet another fix for javadoc

The method takes a long not an int, fix that up.

Change-Id: Ic7c508775b2a3854b13d3b7c25cdd2c21e603481
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
2 years agoFix InstanceNotificationPublishService javadoc 63/100663/1
Robert Varga [Wed, 20 Apr 2022 07:40:53 +0000 (09:40 +0200)]
Fix InstanceNotificationPublishService javadoc

We have bad references here, fix them up.

Change-Id: I58a23cb616f808f33840ebfe3abf53345d21fe76
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
2 years agoConvert mdsal-binding-dom-codec-osgi to a JPMS module 61/100661/1
Robert Varga [Wed, 20 Apr 2022 05:13:58 +0000 (07:13 +0200)]
Convert mdsal-binding-dom-codec-osgi to a JPMS module

This is a simple implementation, convert it to JPMS module, fixing up
warnings in the process of doing so.

JIRA: MDSAL-641
Change-Id: I03f71512580ae9c6b48d5acd0d0c6e77a02f3e82
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
2 years agoConvert mdsal-binding-dom-codec to a JPMS module 78/97078/13
tadei.bilan [Mon, 19 Jul 2021 14:19:52 +0000 (17:19 +0300)]
Convert mdsal-binding-dom-codec to a JPMS module

Convert mdsal-binding-dom-codec to a properly-injected JPMS module,
available through @Singleton, @Component and @MetaInfServices.

Also update NonCachingCodecTest to expose its mock fields and
UnionValueOptionContextTest to use test-model's classes.

This also necessitates relocating the loeader package, as otherwise
maven-javadoc-plugin ends up being confused passes down invalid
@packages to javadoc.

JIRA: MDSAL-641
Change-Id: I3cbe8da4fc4905a1246a5e94a7e208e1bccfa1d8
Signed-off-by: tadei.bilan <tadei.bilan@pantheon.tech>
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
2 years agoRemove unneeded doc dependency 47/100647/1
Robert Varga [Tue, 19 Apr 2022 16:41:34 +0000 (18:41 +0200)]
Remove unneeded doc dependency

We are no longer shading byte-buddy, hence we can clean up docs/pom.xml.

Change-Id: Ic7eda3da04a3fee4410c78e84d072574dd87d39a
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
2 years agoBump byte-buddy to 1.12.9 42/100642/1
Robert Varga [Mon, 18 Apr 2022 17:51:04 +0000 (19:51 +0200)]
Bump byte-buddy to 1.12.9

https://github.com/raphw/byte-buddy/releases/tag/byte-buddy-1.12.9

Change-Id: I28743e471ab4200f4ef50c6b87950fe7c353c55b
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
2 years agoAdd odl-mdsal-bytebuddy 41/100641/1
Robert Varga [Mon, 18 Apr 2022 17:48:21 +0000 (19:48 +0200)]
Add odl-mdsal-bytebuddy

Rather than shading byte-buddy, provide it in a separate feature.
This will allow packagers better control of the runtime we link to
and allow it to be reused.

JIRA: MDSAL-747
Change-Id: Id25acfdb24cce9ce2529b0ac8706b8f00671ed7b
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
2 years agoMap identities to proper objects 17/100117/20
Robert Varga [Mon, 14 Mar 2022 09:31:49 +0000 (10:31 +0100)]
Map identities to proper objects

Change the binding type mapping from Class<? extends BaseIdetity>
to proper objects. While this imposes some runtime footprint in terms of
loaded classes (there is an anonymous implementation of each identity)
and objects (that implementation is an eager singleton), it removes a
metric ton of irregularities. This this change, all mapped objects
objects can be checked via 'instanceof' and most of them have
implementedInterface() for exact contract matches.

JIRA: MDSAL-733
Change-Id: Iab7dfb7656db87850613f567dfe40ef31494f6c4
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
2 years agoUse StringBuilder fluently 30/100630/1
Robert Varga [Thu, 14 Apr 2022 20:00:51 +0000 (22:00 +0200)]
Use StringBuilder fluently

This is just a bunch of appends, use the return value to chain them.

Change-Id: I7db1a134387ae6ac0b756886d06264cbb8ffa43b
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
2 years agoDo not generate union builders 96/100496/7
Robert Varga [Fri, 8 Apr 2022 21:00:37 +0000 (23:00 +0200)]
Do not generate union builders

Union builds are not referenced by generated code anymore and have a
number of issues which need to be addressed separately. Just do not
generate them at all, pending a proper factory replacement.

JIRA: MDSAL-49
Change-Id: I6b769ca4d82da16b9f48720e8a17d7c4e1b4e8ef
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
2 years agoBump versions to 10.0.0-SNAPSHOT 13/100613/1
Robert Varga [Thu, 14 Apr 2022 12:34:13 +0000 (14:34 +0200)]
Bump versions to 10.0.0-SNAPSHOT

This starts the next major development iteration.

Change-Id: Id30b892ae437fc78f930b372ddf69c85d8724f05
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
2 years agoSpecialize CompositeValueCodec 10/100610/3
Robert Varga [Thu, 14 Apr 2022 11:34:59 +0000 (13:34 +0200)]
Specialize CompositeValueCodec

We have only two codec interactions, both of which have dom-codec-api
not tied to IllegalArgumentCodec. Specialize the class and use our codec
API.

JIRA: MDSAL-704
Change-Id: Ic4b219f3e328fe3244811a57037fe1d1780e141f
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
2 years agoRemove ValueTypeCodec 09/100609/2
Robert Varga [Thu, 14 Apr 2022 11:15:20 +0000 (13:15 +0200)]
Remove ValueTypeCodec

CompositeValueCodec is null-hostile, hence it can directly subclass
AbstractIllegalArgumentCodec. This leaves UnionTypeCodec as the only
ValueTypeCodec -- hence we can remove the indirection, making the type
hierachy crisper.

JIRA: MDSAL-704
Change-Id: I7661263f5dd7684cebcff7af82d76a1fe0d9b1eb
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
2 years agoSimplify CompositeValueCodec instantiation 87/100587/2
Robert Varga [Thu, 14 Apr 2022 10:51:11 +0000 (12:51 +0200)]
Simplify CompositeValueCodec instantiation

We have some long-winded instantiation here, which amounts to getting an
EncapsulatedValueCodec. Specialize two constructors for
identityref/instance-identifier to make things a bit more clear and
direct.

JIRA: MDSAL-704
Change-Id: I766d4437ff51a8c32c872f6a3bfe66aec68caa14
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
2 years agoBump versions to 9.0.3-SNAPSHOT 73/100573/1
Robert Varga [Thu, 14 Apr 2022 06:54:11 +0000 (08:54 +0200)]
Bump versions to 9.0.3-SNAPSHOT

This starts the next development iteration.

Change-Id: I84fc11be536df45edcc531964969ce0bc202e212
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
2 years agoBump yangtools to 8.0.3 72/100572/1
Robert Varga [Thu, 14 Apr 2022 06:53:33 +0000 (08:53 +0200)]
Bump yangtools to 8.0.3

Pick up fixes from upstream.

Change-Id: I1bb83612ef0c9ad474c2ec4e893c90e2455d62dc
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
2 years agoSchemaUnawareCodec is AbstractIllegalArgumentCodec 41/100541/1
Robert Varga [Tue, 12 Apr 2022 09:45:28 +0000 (11:45 +0200)]
SchemaUnawareCodec is AbstractIllegalArgumentCodec

AbstractIllegalArgumentCodec is null-hostile, just as really all
SchemaUnawareCodecs are. Express this in a the type hierarchy,
coalescing things to a place where we can do a like-for like
replacement.

JIRA: MDSAL-704
Change-Id: I44cc2a0d0e5abcb7ea696eeba65dfe892c5daafb
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
2 years agoSwitch SchemaUnawareCodec to an abstract class 40/100540/1
Robert Varga [Tue, 12 Apr 2022 09:32:00 +0000 (11:32 +0200)]
Switch SchemaUnawareCodec to an abstract class

We have four implementations here, three of which are indirected via
ValueTypeCodec. Switch the type hierarchy a bit, which leaves only
two codecs still using ValueTypeCodec.

JIRA: MDSAL-704
Change-Id: I4c92f15f7de2678a51792e60431947e4c6acbd6f
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
2 years agoDo not indirect UnionLoading through Callable 39/100539/1
Robert Varga [Mon, 11 Apr 2022 17:58:59 +0000 (19:58 +0200)]
Do not indirect UnionLoading through Callable

Let's just declare Exception to be thrown, forcing the caller to deal
with it -- which it already does.

JIRA: MDSAL-704
Change-Id: I21e26b4f40814bb62a03b5e4a46eed3c29f27882
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
2 years agoRemove ReflectionBaseCodec 38/100538/1
Robert Varga [Mon, 11 Apr 2022 15:06:18 +0000 (17:06 +0200)]
Remove ReflectionBaseCodec

This base class has no real function, remove it.

JIRA: MDSAL-704
Change-Id: I1c79e861bc55133ed16745d4744b29588326eee5
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
2 years agoDisconnect BitsCodec from ReflectionBasedCodec 37/100537/1
Robert Varga [Mon, 11 Apr 2022 14:51:01 +0000 (16:51 +0200)]
Disconnect BitsCodec from ReflectionBasedCodec

There is just no need to retain the target class here, as we'll never
access it.

JIRA: MDSAL-704
Change-Id: I1d01af3a16d2a4de5d8bd899428960875280493a
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
2 years agoEliminate ValueTypeCodec.encapsulatedValueCodecFor() 36/100536/1
Robert Varga [Mon, 11 Apr 2022 14:29:53 +0000 (16:29 +0200)]
Eliminate ValueTypeCodec.encapsulatedValueCodecFor()

There are only two call sites in the same method, inline it and remove
the unnecessary indirection through ValueTypeCodec -- which any reason
for existence except binding IllegalArgumentCodec vtable.

JIRA: MDSAL-704
Change-Id: I11cd0b4f08a1cb8dacd1f66fec9070102ba47889
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
2 years agoDisconnect EncapsulatedValueCodec from ReflectionBasedCodec 35/100535/2
Robert Varga [Mon, 11 Apr 2022 14:23:18 +0000 (16:23 +0200)]
Disconnect EncapsulatedValueCodec from ReflectionBasedCodec

While are not looking at the class after we have created our
MethodHandles, hence retaining the Class reference and the baggage
from ReflectionBasedCodec is completely unnecessary. This also
simplifies the class hierarchy a bit.

JIRA: MDSAL-704
Change-Id: Ifc0a9d98d892ab6fa72fd8c91ee3d4a61b1740a1
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
2 years agoEncapsulatedValueCodec does not use TypeDefinition 34/100534/1
Robert Varga [Mon, 11 Apr 2022 14:18:06 +0000 (16:18 +0200)]
EncapsulatedValueCodec does not use TypeDefinition

The class does not use the definition at all, hence we can neatly
switch to using a LoadingCache, making things a lot clearer.

JIRA: MDSAL-704
Change-Id: I6563e7f97c168fc9a06bcddc0668060104ea0f0a
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
2 years agoPromote SchemaUnawareCodec to a top-level construct 33/100533/1
Robert Varga [Mon, 11 Apr 2022 14:09:15 +0000 (16:09 +0200)]
Promote SchemaUnawareCodec to a top-level construct

The encapsulation in ValueTypeCodec seems to be rather unfortunate,
as it is obscuring what codec classes there are.

Change-Id: I25a3cf02b952da9293ad6c4937646c3198fbd6e6
JIRA: MDSAL-704
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
2 years agoSplit STATIC_CODECS into per-type caches 32/100532/1
Robert Varga [Mon, 11 Apr 2022 13:57:28 +0000 (15:57 +0200)]
Split STATIC_CODECS into per-type caches

We have a rather sorry tangle of call sites due to the fact we one
instance of a cache with multiple loaders. Split the cache up separately
for each type, co-locating the cache and the loader. This makes it a tad
clearer as to what the type hierarchy looks like: ValueTypeCodec really
is just a useless holder.

JIRA: MDSAL-704
Change-Id: Ia334d373090a119297e7b9c92bccb166e80bcac6
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
2 years agoDisconnect IdentifiableItemCodec from IllegalArgumentCodec 30/100530/1
Robert Varga [Mon, 11 Apr 2022 11:57:24 +0000 (13:57 +0200)]
Disconnect IdentifiableItemCodec from IllegalArgumentCodec

IdentifiableItemCodec is only used by KeyedListNodeCodecContext
and it is used directly. Detach it from IllegalArgumentCodec, making
peeling off one possibility from the class tree.

JIRA: MDSAL-704
Change-Id: I25a818eabe80d5bb3f6b4ff2d152e7ca002a93a1
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
2 years agoAdd InstanceNotification(Publish)ServiceAdapter 35/100435/10
Robert Varga [Wed, 6 Apr 2022 14:58:07 +0000 (16:58 +0200)]
Add InstanceNotification(Publish)ServiceAdapter

Add the binding/dom adapter to route requests towards the DOM service.
This necessitates a bit of work on the codec side to allow generic
notification translation service.

JIRA: MDSAL-494
Change-Id: I6f98304aa475717ae4a0fb0e8fb2fb5b5a659336
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
2 years agoRemove superfluous @NonNull 26/100526/1
Robert Varga [Sun, 10 Apr 2022 22:51:29 +0000 (00:51 +0200)]
Remove superfluous @NonNull

Nullness is specified by the contract, no need to repeat it.

Change-Id: I27d846125faea0b5cd083f342b61f269cefec257
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
2 years agoRequire yang.binding 25/100525/1
Robert Varga [Sun, 10 Apr 2022 22:48:53 +0000 (00:48 +0200)]
Require yang.binding

We are referencing yang.binding constructs, make sure we require them
transitively.

Change-Id: I84ab5f4e585f469fea05fa91298a035921c79322
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
2 years agoCentralize MoreObjects import 88/100488/3
Robert Varga [Fri, 8 Apr 2022 14:31:57 +0000 (16:31 +0200)]
Centralize MoreObjects import

We are importing MoreObjects through Class, let's go through
JavaTypeName, centralized in JavaFileTemplate. Also use 'var' to elide
the need to refer to it twice.

Change-Id: Id7fa0625e8d939195654b710e5f9847303c33861
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
2 years agoImport java.lang.reflect.Type 89/100489/1
Robert Varga [Fri, 8 Apr 2022 15:05:15 +0000 (17:05 +0200)]
Import java.lang.reflect.Type

Simplify references to make things a tad easier.

Change-Id: I920b633b48b496156eaca2e90ed388adeba41d7e
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
2 years agoRemove unused lines 87/100487/1
Robert Varga [Fri, 8 Apr 2022 14:04:19 +0000 (16:04 +0200)]
Remove unused lines

We have commented-out imports and a superfluous empty line. Remove them.

Change-Id: I91b8dca0041b50baefa032ccff2e4d02a781605a
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
2 years agoImport yang-binding 86/100486/1
Robert Varga [Fri, 8 Apr 2022 13:18:50 +0000 (15:18 +0200)]
Import yang-binding

We are referencing a number of constructs here, make sure we also
import the module.

Change-Id: I8b1823046c762e33cc99e1471ee5965ab57e233b
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
2 years agoSplit out isBitsType() 81/100481/1
Robert Varga [Fri, 8 Apr 2022 10:38:44 +0000 (12:38 +0200)]
Split out isBitsType()

Simplify dispatch of checking to a separate method.

Change-Id: I59e3baf22bf99ead66f43c7df0fd62ab2b030894
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
2 years agoFix Automatic-Module-Name declarations 34/100434/2
Robert Varga [Wed, 6 Apr 2022 14:57:27 +0000 (16:57 +0200)]
Fix Automatic-Module-Name declarations

The declaration should be in <instructions/>, otherwise it is not
effective.

Change-Id: I82aeeaf9c68791ea171853f238afc6a9bafe9661
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
2 years agoDrop a few FIXMEs into mdsal-binding-dom-adapter 33/100433/1
Robert Varga [Wed, 6 Apr 2022 14:36:45 +0000 (16:36 +0200)]
Drop a few FIXMEs into mdsal-binding-dom-adapter

We should have final classes and similar things.

Change-Id: Ie60973456464367db6396906fd079b76f5cfc3dd
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
2 years agoAdd InstanceNotificationService 23/86323/21
Robert Varga [Tue, 10 Dec 2019 10:38:57 +0000 (11:38 +0100)]
Add InstanceNotificationService

InstanceNotificationService provides access to YANG 1.1 nested
notifications, i.e. those defined in a container or a list.

JIRA: MDSAL-494
Change-Id: If308adb3a26964cea90456f8fb020b7364c937db
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
2 years agoFix javadoc compatibility 73/96873/8
Robert Varga [Mon, 12 Jul 2021 09:15:54 +0000 (11:15 +0200)]
Fix javadoc compatibility

JDK13+ is much stricter about what is considered valid Javadoc. Fixup
to make compilation pass on JDK17. This breaks linting on JDK11, hence
we also disable it for now.

Change-Id: I4ee650e13a135349c9522ad74fe098f088c09e5d
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
2 years agoFix RetryingManagedNewTransactionRunner javadoc 20/100420/1
Robert Varga [Tue, 5 Apr 2022 15:45:30 +0000 (17:45 +0200)]
Fix RetryingManagedNewTransactionRunner javadoc

JDK13+ requires H2, JDK11 does not care. Fix it up.

Change-Id: Id3898df1112797d8e026934fdc5cae20860871ed
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
2 years agoFix NotificationService javadoc 19/100419/1
Robert Varga [Tue, 5 Apr 2022 15:33:09 +0000 (17:33 +0200)]
Fix NotificationService javadoc

We have an invalid @param here, fix that up.

Change-Id: I737c78114863ab5ca5f3a3485dd38fb6c441b3ca
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
2 years agoFixup BindingStreamEventWriter javadoc 18/100418/1
Robert Varga [Tue, 5 Apr 2022 15:31:10 +0000 (17:31 +0200)]
Fixup BindingStreamEventWriter javadoc

JDK17 is picky and the class documentation is a mess anyway. Fix it up.

Change-Id: If7e656b9f3336b9a0cffcc9f64c17eb9853fc919
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
2 years agoSuppress warning around pathArgument 17/100417/1
Robert Varga [Tue, 5 Apr 2022 15:05:15 +0000 (17:05 +0200)]
Suppress warning around pathArgument

For some strange reason SE_BAD_FIELD is triggered with JDK17. The
warning is a false positive, as we are handling serialization via
Externalizable proxy.

Change-Id: I4035194852f6b0a914d76929124d92ca8d3039fe
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
2 years agoAdd DOMInstanceNotificationService 28/98528/9
Robert Varga [Mon, 15 Nov 2021 08:03:27 +0000 (09:03 +0100)]
Add DOMInstanceNotificationService

DOMNotificationService provides a means to subscribe to top-level
notifications, as defined by YANG 1.0. RFC7950 (YANG 1.1) extended
this construct with the notion that notifications can be bound to
a datastore instance.

Define a set of DOMInstanceNotification* interfaces which cover provide
a conterpart to DOMNotification* interfaces and cover the extensions
introduced in YANG 1.1.

JIRA: MDSAL-494
Change-Id: I610f761bfcb9fb292709dd12618ec5bcb9b843c2
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
2 years agoFix a few javadoc warnings 55/100355/2
Robert Varga [Fri, 1 Apr 2022 17:31:49 +0000 (19:31 +0200)]
Fix a few javadoc warnings

JDK17 is quite picky about these, fix them up.

Change-Id: Id24515f036ec89f24bfb5027ad5d17c37f4b8fa5
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
2 years agoInject RPC input QName into LazySerializedContainerNode 82/100282/9
Dominik Vrbovsky [Wed, 30 Mar 2022 17:53:53 +0000 (19:53 +0200)]
Inject RPC input QName into LazySerializedContainerNode

When ExecuteRpc message is sent with LazySerializedContainerNode
as 'input' parameter, during serialization is invoked its
getIdentifier() method that returns NodeIdentfier of rpc,
not input. So OpsInvoker receives the message with incorrect 'input'
parameter and  we get error downstream because of it.

We need to inject rpc input Qname into LazySerializedContainerNode
to get NodeIdentifier of rpc input from getIdentifier() method. While we
are at it, let's pass a NodeIdentifier, which saves us the cost of
NodeIdentifier.create() in the fast path.

JIRA: MDSAL-739
Change-Id: I77c870fe91a758037bd27e54607e778255d611fc
Signed-off-by: Dominik Vrbovsky <dominik.vrbovsky@pantheon.tech>
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
2 years agoFix union stringValue() with Decimal64 09/100309/4
Robert Varga [Thu, 31 Mar 2022 20:25:15 +0000 (22:25 +0200)]
Fix union stringValue() with Decimal64

UnionTemplate still things decimal64 maps to java.math.BigInteger,
resulting in string conversion which does not compile. Fix the template
to recognize Decimal64 as a proper CanonicalValue.

JIRA: MDSAL-738
Change-Id: I0f161b62887f4aea6e0c625d105e48a20c8dc048
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
2 years agoFix a typo in UnionTemplate 14/100314/1
Robert Varga [Fri, 1 Apr 2022 08:45:57 +0000 (10:45 +0200)]
Fix a typo in UnionTemplate

We have an extra empty line and mis-spelled 'assigned'.

Change-Id: I058213a3408780ea13249679c0cca4ba21e8a9e8
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
2 years agoBump versions to 9.0.2-SNAPSHOT 56/100256/1
Robert Varga [Fri, 25 Mar 2022 13:40:17 +0000 (14:40 +0100)]
Bump versions to 9.0.2-SNAPSHOT

This starts the next development iteration.

Change-Id: I93eac4d2cf3607265434359543ba5d8808815446
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
2 years agoAdd YANG Module Tags models 54/100254/1
Robert Varga [Fri, 25 Mar 2022 09:25:08 +0000 (10:25 +0100)]
Add YANG Module Tags models

Add modules from RFC8819.

JIRA: MDSAL-684
Change-Id: Idb8a1e925a6062598dcd5b1ef06e6a6e39ed808e
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
2 years agoBump yangtools to 8.0.2 45/100245/1
Robert Varga [Thu, 24 Mar 2022 15:42:10 +0000 (16:42 +0100)]
Bump yangtools to 8.0.2

Pick up bugfixes and features from upstream.

Change-Id: I714d308d6a602c075aa59000650296d8b5cfd2d2
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
2 years agoBump versions to 9.0.1-SNAPSHOT 53/100153/2
Robert Varga [Sat, 19 Mar 2022 12:38:01 +0000 (13:38 +0100)]
Bump versions to 9.0.1-SNAPSHOT

This starts the next development iteration.

Change-Id: I7fed52e8ddd7348e1e0aac90e2af7ac792ca5226
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
2 years agoIgnore empty augmentations at runtime 56/100156/1
Robert Varga [Sun, 20 Mar 2022 11:11:34 +0000 (12:11 +0100)]
Ignore empty augmentations at runtime

We may end up generating an augmentation for a semantically-empty
construct, which in turn will not have a valid AugmentationIdentifier.
Ignore sure augmentations in codec.

JIRA: MDSAL-735
Change-Id: Ibb279a6b554c49857d0ee2ae0108d4d424939d02
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
2 years agoUpdate mdsal-binding-dom-codec-api modele-info 52/100152/1
Robert Varga [Sat, 19 Mar 2022 10:43:38 +0000 (11:43 +0100)]
Update mdsal-binding-dom-codec-api modele-info

We are exposing yang.model.api to users, make sure we require it
transitively.

Change-Id: I97e28c4f080ca3e40869b532ad2cf9b6ff96d07f
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
2 years agoUse declared statements to resolve augments 51/100151/2
Robert Varga [Fri, 18 Mar 2022 18:37:28 +0000 (19:37 +0100)]
Use declared statements to resolve augments

When trying to map effective instantiated model back to our Generator
hierarchy we need to not get confused by namespaces. The simplest way
to do that is to pick out augmentations first -- as those are the only
ones what can actually differ in namespace. The rest can be taken care
of just based on localName, as we are dealing with
SchemaTreeEffectiveStatements.

In general we can make the connection by tracing back the path we have
taken towards the instantiation site when seeing an
AugmentEffectiveStatement and match it to the corresponding
AbstractAugmentGenerator. Normally we could do this via straight
comparison of AugmentEffectiveStatements, but unfortunately their
equality contract does not give us that.

The reason for that is that we reuse things across groupings, whereas
YANG parser creates separate instantiations -- hence this breaks down
with UsesAugmentGenerator. We deal with that by comparing the declared
view of the two statements -- and those are guaranteed to be unique.

JIRA: MDSAL-735
Change-Id: I4d8f0e50541b53620cc5b0a2170484e85e9cf717
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
2 years agoOptimize AbstractCompositeRuntimeType storage 44/100144/4
Robert Varga [Thu, 17 Mar 2022 22:01:26 +0000 (23:01 +0100)]
Optimize AbstractCompositeRuntimeType storage

Storage on schema tree does not allow for duplicates. Rather than
allocating a full Map, let's use arrays and associated binary search.
This allows us to drop the storage requirements, especially for choices,
which would end up allocating an object to contain Map.values()
representation.

This results in O(log2(N)) lookups instead of O(1), plus some additional
code, but the lookups are one-off and so well worth the reduced
footprint. A further improvement is that we relax type safety down to
Object, which allows us to not allocate singleton arrays.

Change-Id: Ice6f07a7f853bd68c614a42eda6cc1d3fd2c184e
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
2 years agoRework AugmentRuntimeType and Choice/Case linkage 22/100122/11
Robert Varga [Mon, 14 Mar 2022 19:36:49 +0000 (20:36 +0100)]
Rework AugmentRuntimeType and Choice/Case linkage

Augmentations and their interactions with runtime linkage are a strange
beast. Not through YANG semantics, which is very simple. The
complication is Binding Specification reusing statement interfaces
across 'grouping'/'uses' boundaries. This poses distinct challenges as
for a particular GeneratedType we may have multiple augmentations,
which:
- may be completely unrelated. Binding Spec does not provide its usual
  compile-time safety guarantees because it basically says transporting
  anything across grouping boundaries is mostly okay as long as you
  augment all instantiations of the grouping the same way. That is a
  very sensible trade-off, as it allows, for example, no-frills movement
  of data from RPC 'input'/'output' and 'notification' structures to
  and from the datastore. More importantly it allows transportation
  across datastore subtrees, which enables very easy derivation
  pipelines
- but they have to obey YANG namespacing rules, which means that when we
  are interfacing towards yang.data.api (or any YANG-conforming
  projection), we have to make sure the constructs are aligned and also
  perform automated repair & recovery based on Binding Spec assumptions.

Current code behaves incorrectly in this respect, as it does not perform
correct expanstion of 'uses/augments' in one part, and then considers
all augments in when trying to look up a statement -- easily wandering
off into augments which are not appropriate through the YANG scope.

Fix this by correctly tracking with augments are valid in a particular
scope and carefully resolving them.

As a further side-effect of this, the choice/case relationship is
reworked to prevent potential recursion problems and rather expose the
ambiguos linkages in BindingRuntimeTypes.

We also separate CompositeRuntimeType from AugmentableRuntimeType, so
there is a clear distinction which types can be targeted by Augmentable
interfaces and which cannot.

JIRA: MDSAL-731
Change-Id: I027bbfa4ea8315b11b9348f5e0928626de3103a0
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
2 years agoRemove AbstractExplicitGenerator.recursiveRuntimeType() 11/100111/3
Robert Varga [Sun, 13 Mar 2022 23:05:02 +0000 (00:05 +0100)]
Remove AbstractExplicitGenerator.recursiveRuntimeType()

A potential identified in the bug report is repetitive creation
of the same runtime type, when it clearly should be reused.
Make sure we recognize when we are dealing with the same statement
and eliminate one Optional.map() indirection.

JIRA: MDSAL-735
Change-Id: Iaa97a04f58465b302666ca082a887fde9616282a
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>