yangtools.git
18 months agoMerge if statements 12/103412/1
Robert Varga [Sat, 26 Nov 2022 09:53:23 +0000 (10:53 +0100)]
Merge if statements

Sonar is reporting this violation, fix it.

Change-Id: Iae2ae38e84fd89962bb2ec2eeddab2228e33c11f
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
18 months agoBump versions to 10.0.2-SNAPSHOT 93/103393/2
Robert Varga [Fri, 25 Nov 2022 09:32:44 +0000 (10:32 +0100)]
Bump versions to 10.0.2-SNAPSHOT

This starts the next development iteration.

Change-Id: I5a0f6863eae49cd07d6ba4a4578460381aadcea1
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
18 months agoBump odlparent to 12.0.1 92/103392/2
Robert Varga [Fri, 25 Nov 2022 09:29:42 +0000 (10:29 +0100)]
Bump odlparent to 12.0.1

Pick up latest updates from upstream.

Change-Id: I3de141be79358d5565533abd0b86420474b03562
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
18 months agoValidate namespace sooner 86/103386/2
Robert Varga [Fri, 25 Nov 2022 03:16:59 +0000 (04:16 +0100)]
Validate namespace sooner

Pass the read string directly to XMLNamespace.of() before we read the
revision.

Change-Id: I67f2a7f258d340bba107b0233501061dd8af352b
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
18 months agoTrim QNameModule.compare() 85/103385/2
Robert Varga [Fri, 25 Nov 2022 03:08:37 +0000 (04:08 +0100)]
Trim QNameModule.compare()

Use assign-and-check to save a bit of bytecode.

Change-Id: Ie7bbad84938c824bd7bd427a94e11980538e6efc
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
18 months agoConvert csit to run in local environment 03/103303/5
Mario Doman [Mon, 21 Nov 2022 08:15:07 +0000 (09:15 +0100)]
Convert csit to run in local environment

This ditches the creation of VMs and updates execution to run
in local execution environment.

Change-Id: Iab2b191d2b4616e80cb009ea3beff79add5fac24
Signed-off-by: Mario Doman <mario.doman@pantheon.tech>
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
18 months agoFix isSupportedToBuildEffective() propagation 18/103318/2
Robert Varga [Tue, 22 Nov 2022 17:47:49 +0000 (18:47 +0100)]
Fix isSupportedToBuildEffective() propagation

InferredStatementContext has bad interaction with ImplictStmtCtx -- the
latter fizzles when it is not supported by features. This leads to a
failure to build effective context, as the prototype cannot be built and
therefore an attempt to reuse it fails.

Adjust InferredStatementContext to check if its prototype can be built
and carry over that fact when it is not.

JIRA: YANGTOOLS-1465
Change-Id: Iad05b0c6a06b6d9f837b70ced0da8cdc8ed3ed97
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
18 months agoFix yang-xpath-impl package import 16/103316/1
Robert Varga [Tue, 22 Nov 2022 12:06:18 +0000 (13:06 +0100)]
Fix yang-xpath-impl package import

The dependency on javax.inject should be optional, make sure that is the
case.

JIRA: YANGTOOLS-1467
Change-Id: Ic005d463e65bd8596fe586bb64272e966a6d1693
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
18 months agoUse instanceof patterns in AbstractEffectiveModule 10/103310/4
Robert Varga [Mon, 21 Nov 2022 16:57:08 +0000 (17:57 +0100)]
Use instanceof patterns in AbstractEffectiveModule

We can reduce the number of explicit casts and make the code a bit
denser now that we have Java 17.

Change-Id: I3d1775676eb4a0a08873b1a452f40d72e27a10a7
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
18 months agoAdd ModuleEffectiveStatement.namespace() 12/103312/3
Robert Varga [Mon, 21 Nov 2022 17:05:35 +0000 (18:05 +0100)]
Add ModuleEffectiveStatement.namespace()

A module has to have exactly one namespace statement, expose it
from ModuleEffectiveStatement.

JIRA: YANGTOOLS-1466
Change-Id: I958cb5fca392029dd236d52e54527ab211ab8199
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
18 months agoAdd SubmoduleEffectiveStatement.belongsTo() 11/103311/3
Robert Varga [Mon, 21 Nov 2022 17:02:00 +0000 (18:02 +0100)]
Add SubmoduleEffectiveStatement.belongsTo()

A submodule has to have exactly one belongs-to statement, expose it
from SubmoduleEffectiveStatement.

JIRA: YANGTOOLS-1466
Change-Id: Ic95bdca3f57384f14e05524b365825c3ed3dccf6
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
18 months agoAdd prefix() methods 09/103309/2
Robert Varga [Mon, 21 Nov 2022 16:41:09 +0000 (17:41 +0100)]
Add prefix() methods

A number of statements are required to have a prefix substatement,
expose utility methods to access these substatements directly.

JIRA: YANGTOOLS-1466
Change-Id: Ibc9846ad3e3489755eddbcc02be62c128c0f78e2
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
18 months agoAdd input()/output() utility methods 08/103308/1
Robert Varga [Mon, 21 Nov 2022 15:58:35 +0000 (16:58 +0100)]
Add input()/output() utility methods

RpcDefinition and ActionDefinition provide direct access to their,
always present, input and output substatements. Expose equivalent
functionality from {Action,Rpc}EffectiveStatement.

JIRA: YANGTOOLS-1466
Change-Id: I836bc03f6215eec98c66502619c51bf361cc77b2
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
18 months agoFix NPE when parsing deviation from submodule 29/103229/4
Ruslan Kashapov [Tue, 15 Nov 2022 15:41:31 +0000 (17:41 +0200)]
Fix NPE when parsing deviation from submodule

If the deviation statement is used in a submodule, we need to lookup up
the corresponding module, otherwise we will not find the correct
namespace.

JIRA: YANGTOOLS-1448
Change-Id: Iaf2e1d6526a9f268a6c0a3835e1bfdfafa05fffe
Signed-off-by: Ruslan Kashapov <ruslan.kashapov@pantheon.tech>
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
18 months agoEnable deviation substatement validation 80/103280/1
Robert Varga [Wed, 16 Nov 2022 19:47:04 +0000 (20:47 +0100)]
Enable deviation substatement validation

Make sure we call super, as that circles back to our validator.

Change-Id: I41dcaa3a48b98cb09a348349a56263a4936ea5bc
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
18 months agoReproduce YANGTOOLS-1445 42/101842/13
Sangwook Ha [Tue, 12 Jul 2022 22:26:01 +0000 (15:26 -0700)]
Reproduce YANGTOOLS-1445

Building effective model fails when unique statement is used in a
grouping used by another grouping.

Add a test case (the third one) to reproduce the issue. There is no
issue when the unique statement is used in a single grouping like the
first two test cases.

JIRA: YANGTOOLS-1445
Change-Id: Idadfb6e8fc0bf724f0ff770d9fe986692e4b30eb
Signed-off-by: Sangwook Ha <sangwook.ha@verizon.com>
18 months agoCatch duplicate instantiation of statements 50/102550/7
Robert Varga [Tue, 15 Nov 2022 22:30:15 +0000 (23:30 +0100)]
Catch duplicate instantiation of statements

The problem here is that during tryToReusePrototype() we are copying
child statements, which in turn are triggering onStatementAdded(). For
unique statements this incurs a SchemaTreeNamespace requirement on the
target leaf -- which is satisified via requestSchemaTreeChild() and
recorded in substatements (as partial materialization) and it is also
recorded in the schema tree namespace. When this happens, though,
effectiveCopy() does not notice the statement has already been copied
and copies it again, and thus ends up colliding in the schema tree
namespace -- pointing to the same statement as the source of the
problem.

Update effectiveCopy() to re-examing substatements to see if they
reflect partial materialization and pick copied statement from there.

JIRA: YANGTOOLS-1445
Change-Id: Ic184f872bf21e3e3c112b4fb5960fbe44262c77e
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
18 months agoAllow path to be null 96/103196/2
Robert Varga [Thu, 10 Nov 2022 16:27:52 +0000 (17:27 +0100)]
Allow path to be null

Downstreams need to perform dispatch to use either create() without
the path -- which is a bit hostile for utilities. Allow path to be
optional, improving usability a bit.

Change-Id: I46e4c4b5d2aa9218df6cb729f7a68cbd503cc4c5
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
18 months agoInitial CSIT code drop 03/102903/8
MarioDoman [Thu, 27 Oct 2022 13:23:13 +0000 (15:23 +0200)]
Initial CSIT code drop

This drops in the system test from integration/distribution,
so that it can be maintained with the corresponding codebase.

Change-Id: I5c05deb5e6e33d436b1af7362ccddfcd6f3a1566
Signed-off-by: MarioDoman <mario.doman@pantheon.tech>
18 months agoAdd SourceIdentifier(String,Revision) 65/103165/2
Robert Varga [Tue, 8 Nov 2022 20:44:02 +0000 (21:44 +0100)]
Add SourceIdentifier(String,Revision)

This is a convenience constructor which is useful when mapping
raw literals to a concrete namespace revision. Also improve
documentation a bit.

Change-Id: I955c2bdbf4d573da4ef87aec8b0f9faaecc6cb5a
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
18 months agoUse VarHandle for LeafRefPath.legacyPath 62/103162/1
Robert Varga [Tue, 8 Nov 2022 18:37:10 +0000 (19:37 +0100)]
Use VarHandle for LeafRefPath.legacyPath

Using a VarHandle we can use relaxed ordering and improve behaviour
under races.

Change-Id: Ia7a6d0dff43c3e0534099949931dc91eba209eaa
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
18 months agoReduce synchronization for child strategy access 61/103161/1
Robert Varga [Tue, 8 Nov 2022 18:20:57 +0000 (19:20 +0100)]
Reduce synchronization for child strategy access

We now have a VarHandle here, so we can use getAcquire()/setRelease()
for more relaxed happens-before ordering.

Change-Id: I46e1936cc68ba1ec6205135124e69dfc2d578ca0
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
18 months agoUse VarHandles in DataNodeContainerModificationStrategy 60/103160/1
Robert Varga [Tue, 8 Nov 2022 18:18:39 +0000 (19:18 +0100)]
Use VarHandles in DataNodeContainerModificationStrategy

Using a VarHandle allows us to use compareAndExchange(), which
eliminates the need for a volatile read when we fail to update.

Change-Id: Ie7922c5f116801f0b442c30f3ca14d2360abc845
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
18 months agoUse instanceof pattern 59/103159/1
Robert Varga [Tue, 8 Nov 2022 18:15:00 +0000 (19:15 +0100)]
Use instanceof pattern

Reduce the need to cast by using an instanceof pattern.

Change-Id: Iea1cef0d13e20786abe34d90f05e3118f31c6206
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
18 months agoModernize DataNodeContainerModificationStrategy 58/103158/1
Robert Varga [Tue, 8 Nov 2022 18:12:45 +0000 (19:12 +0100)]
Modernize DataNodeContainerModificationStrategy

Use:
- local variable type inference
- fluent builder to simplify Immutable construction
- DataNodeContainer.dataChildByName() to remove Optional

Change-Id: Ic6f31ef98f98edcd3608bac11dc3a6170f659a5f
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
18 months agoUse VarHandle in AbstractCursorAware 57/103157/1
Robert Varga [Tue, 8 Nov 2022 18:00:29 +0000 (19:00 +0100)]
Use VarHandle in AbstractCursorAware

VarHandle.compareAndExchange() gives us visibility to witness value,
hence we can eliminate all volatile reads.

Change-Id: Ie88e09960a3a0fd46bd2853759c1afdd3b96b38c
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
18 months agoUse VarHandle for AbstractCursor.closed 56/103156/1
Robert Varga [Tue, 8 Nov 2022 17:05:46 +0000 (18:05 +0100)]
Use VarHandle for AbstractCursor.closed

With VarHandles we do not get raw types and can use a plain boolean
to keep the closed state.

Change-Id: I959b0f33fb861af5b21aeef3525719e878e3156d
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
18 months agoDurationWithTime is a simple record 55/103155/1
Robert Varga [Tue, 8 Nov 2022 17:01:16 +0000 (18:01 +0100)]
DurationWithTime is a simple record

This is a pure value holder, use a record for it.

Change-Id: I3f6743cfbbe74bd7b83acb0b9d8bfb0265f03540
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
18 months agoUse VarHandles for sum/count tracking 54/103154/1
Robert Varga [Tue, 8 Nov 2022 16:56:53 +0000 (17:56 +0100)]
Use VarHandles for sum/count tracking

Switch from AtomicLongFieldUpdater, which does not give us much, but
makes the class more uniform.

Change-Id: I3ef63910f57a123172906f9814e5aa689c029721
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
18 months agoUse VarHandles to update shortest/longest duration 53/103153/4
Robert Varga [Tue, 8 Nov 2022 16:36:54 +0000 (17:36 +0100)]
Use VarHandles to update shortest/longest duration

Rather than using ARFU's compareAndSet() and volatile reads, take
advantage of VarHandle's getAcquire() and compareAndExchangeRelease().
This makes things less ordered and more performant in face of races.
Also split out the update logic to aid inlining.

Change-Id: If60016b03c738240d7bdc041c32d5d908b3f002c
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
18 months agoImprove largestQueueSize tracking 50/103150/2
Robert Varga [Tue, 8 Nov 2022 16:02:13 +0000 (17:02 +0100)]
Improve largestQueueSize tracking

VarHandles expose a better API to updating variable than
AtomicIntegerFieldUpdater.

This patch takes advantage of Java 9 memory model to take this variable
out of global volatile happens-before tracking where updates are
concerned. User access still uses a volatile read.

Change-Id: Iba667d501aaebb6cae7e56692bae9e1d840c6807
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
18 months agoTarget FIXME to next major release 49/103149/2
Robert Varga [Tue, 8 Nov 2022 16:00:19 +0000 (17:00 +0100)]
Target FIXME to next major release

The return value here should have been changed eons ago, target it for
next release.

Change-Id: Ic9e9ec663fefc19513b61e389b8f3948d7aa4fda
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
18 months agoForeignDataNode is identified by NormalizedNode 00/103100/2
Robert Varga [Fri, 4 Nov 2022 22:15:29 +0000 (23:15 +0100)]
ForeignDataNode is identified by NormalizedNode

Both specializations are using NodeIdentifier, make sure we centralize
that definition.

Change-Id: Ie3eed54476098f583916e4ed37fdfe17ff10eeef
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
18 months agoClean up ExceptionMapper 25/103125/1
Robert Varga [Mon, 7 Nov 2022 13:32:08 +0000 (14:32 +0100)]
Clean up ExceptionMapper

Use Class.isInstance() and Class.cast() instead of unchecked casts. Also
restructure ExecutionException mapping.

Change-Id: I21b61cd99a715746c865d12b378b1874b925519b
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
18 months agoRemove most direct references to builder implementations 43/103043/4
Robert Varga [Thu, 3 Nov 2022 00:21:40 +0000 (01:21 +0100)]
Remove most direct references to builder implementations

We want to hide individual builders, this patch removes most references
outside of core implementation.

Change-Id: I198efa13a0b5700ce066d8d5fbf41a98614f3c40
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
18 months agoReuse the a NodeIdentifier for SchemaContext.NAME 85/103085/1
Robert Varga [Fri, 4 Nov 2022 18:25:20 +0000 (19:25 +0100)]
Reuse the a NodeIdentifier for SchemaContext.NAME

We have an unused constant for this, use it instead of creating one over
and over again.

Change-Id: I5dfc6fddf8eef6c4ed45c1d7926fe09ba4174c35
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
18 months agoMigrate yang-data-tree-ri to use Builders 45/103045/2
Robert Varga [Thu, 3 Nov 2022 00:59:01 +0000 (01:59 +0100)]
Migrate yang-data-tree-ri to use Builders

Migrate production code to use Builders instead of referencing
individual builders.

Change-Id: I842e8ff71b0dd95fb2fad5f281dfd136d3b85c32
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
18 months agoUse Builders in yang-data-tree-ri tests 44/103044/4
Robert Varga [Thu, 3 Nov 2022 00:56:38 +0000 (01:56 +0100)]
Use Builders in yang-data-tree-ri tests

We want to hide individual implementations, make sure tests are not
referencing them.

Change-Id: Id6f45b5b2469d949bb4e1aba840a57e2a273483a
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
18 months agoRemove unused logger 03/103003/3
Robert Varga [Tue, 1 Nov 2022 17:35:32 +0000 (18:35 +0100)]
Remove unused logger

DurationStatisticsTracker is not using logging, remove the logger.

Change-Id: I8211d54dbea1dbe9a5c2eeef74ea12a4cc6f067b
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
18 months agoBump versions to 10.0.1-SNAPSHOT 01/103001/1
Robert Varga [Tue, 1 Nov 2022 16:57:25 +0000 (17:57 +0100)]
Bump versions to 10.0.1-SNAPSHOT

This starts the next development iteration.

Change-Id: I120b76ff75c67d5ce80709dcf5a2d210633ee29f
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
18 months agoPromote yang-xpath-api to stable 97/102997/3
Robert Varga [Tue, 1 Nov 2022 15:02:42 +0000 (16:02 +0100)]
Promote yang-xpath-api to stable

Most of the constructs here are deemed stable, those that are not can be
evolved as per SemVer.

Change-Id: Ife3030039b1c2dcba1c7261533aca779ca33a811
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
18 months agoRemove UnresolvedQName.(qualified,unqualified) 00/103000/1
Robert Varga [Tue, 1 Nov 2022 16:31:59 +0000 (17:31 +0100)]
Remove UnresolvedQName.(qualified,unqualified)

These static factory methods have been superseded, remove them.

Change-Id: I2036a619cbc288a38a66390d4983faba060e6732
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
18 months agoUse java.io.Serial in yang-common 99/102999/1
Robert Varga [Tue, 1 Nov 2022 16:30:50 +0000 (17:30 +0100)]
Use java.io.Serial in yang-common

This is a way of documenting serialization intent, make sure we use it
where appropriate.

Change-Id: I7bcfa898f2f9c21be27dbf99b0d689b19e137871
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
18 months agoFix maven dependency declarations 98/102998/1
Robert Varga [Tue, 1 Nov 2022 16:20:34 +0000 (17:20 +0100)]
Fix maven dependency declarations

Dependencies should be scope=provided, fix that.

Change-Id: I5c3569991c7a77482714ea1c4fdee022d42ab5cc
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
18 months agoSplit out YangIRSchemaSource 09/102709/5
Robert Varga [Mon, 17 Oct 2022 08:47:37 +0000 (10:47 +0200)]
Split out YangIRSchemaSource

This is a counterpart to YangTextSchemaSource, publish it to
yang-repo-api. This allows is to be consumed without a direct dependency
on YANG parser.

JIRA: YANGTOOLS-1460
Change-Id: Ia7a9d938b8ed94f9b46cd5a22cb86472160dfd98
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
18 months agoSplit out yang-ir 08/102708/7
Robert Varga [Sun, 16 Oct 2022 23:35:51 +0000 (01:35 +0200)]
Split out yang-ir

We are using a generalized parse tree-based intermediate representation
of YANG files. Publish the object layout from parser so it can be
separately accessed.

JIRA: YANGTOOLS-1460
Change-Id: I965c5cf64b12e849ff4d76db5a8b2c79b1a8856c
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
18 months agoFix anyxml-to-JSON translation duplication error 44/96944/9
Manoj Chokka [Tue, 20 Jul 2021 12:38:00 +0000 (12:38 +0000)]
Fix anyxml-to-JSON translation duplication error

JSONNormalizedNodeStreamWriter generates duplicates when array elements
are not listed consecutively and interleaved with other sibling nodes.
Make sure to check if there is any previously processed sibling node
with the same node name instead of checking just the previous one.

Also, Add a couple of test cases to cover this issue.

JIRA: YANGTOOLS-1302
Change-Id: I4d64c8b8a45009e7667af621c96c34824fb7b48b
Signed-off-by: Manoj Chokka <cmanoj8@gmail.com>
Signed-off-by: Sangwook Ha <sangwook.ha@verizon.com>
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
18 months agoPromote plugin-generator-api 96/102996/1
Robert Varga [Tue, 1 Nov 2022 14:47:55 +0000 (15:47 +0100)]
Promote plugin-generator-api

The interfaces here are mature enough to not need special treatment,
drop @Beta annotations.

Change-Id: I829bf26856cd3e299d5a18fe0939ecd68b0fad38
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
19 months agoPromote yang-data-codec-binfmt to stable status 48/102948/2
Robert Varga [Fri, 28 Oct 2022 21:59:53 +0000 (23:59 +0200)]
Promote yang-data-codec-binfmt to stable status

All interfaces are deemed stable enough, with clear demarcation at major
revisions. Note that the writeout of everything of but latest version is
deprecated for removal.

Change-Id: I6311ce04f1613eaefc60863d93df64bef73efe2a
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
19 months agoEliminate ReactorStmtCtx.boolFlag 45/100945/3
Robert Varga [Sat, 23 Apr 2022 11:44:46 +0000 (13:44 +0200)]
Eliminate ReactorStmtCtx.boolFlag

The existence of this field is a pure memory layout optimization, taking
advantage of alignment shadow provided by isSupportedToBuildEffective.
JDK15+ memory layout logic can take advatage of this hole, rendering
this optimization unnecessary.

Separate the field into its users, naming it appropriatelly.

Change-Id: I807f31268bd384517e1c0db79f24d5fc92f9492c
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
19 months agoRemove an unused constructor 05/102905/1
Robert Varga [Thu, 27 Oct 2022 17:31:48 +0000 (19:31 +0200)]
Remove an unused constructor

Sonar is complaining about this constructor, remove it.

Change-Id: Iab25d1b0b13be32fcee7f298c7dbdfbaf5a87600
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
19 months agoRemove EffectiveStatement namespaces 00/102900/18
Robert Varga [Wed, 26 Oct 2022 16:59:52 +0000 (18:59 +0200)]
Remove EffectiveStatement namespaces

The idea of complete extensibility with various namespaces is quite
baroque and wasteful. Rather than having a generic get()/getAll()
mechanism, rely on well-defined interface methods that need to be
implemented by the implementations.

This also makes searching much more convenient, without implementations
forcibly requiring Maps or .class addressing, and at the tip of users'
fingertips.

JIRA: YANGTOOLS-1459
Change-Id: Iefaf49a470fa5e93210c7347b3a42f5620c6da36
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
19 months agoIntroduce RootDeclaredStatement 99/102899/4
Robert Varga [Wed, 26 Oct 2022 16:06:33 +0000 (18:06 +0200)]
Introduce RootDeclaredStatement

We have a number of (mostly-unused) traits, which are implemented by
both ModuleStatement and SubmoduleStatement. Combine these interfaces
into a single interface.

Change-Id: Ide4daa704e0b41cc0916d3acf567302991cf8202
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
19 months agoRemove ModuleHeaderGroup 98/102898/3
Robert Varga [Wed, 26 Oct 2022 15:51:05 +0000 (17:51 +0200)]
Remove ModuleHeaderGroup

This interface is extended only by ModuleStatement, which implements it
with default methods. Remove ModuleHeaderGroup and implement the methods
directly.

Change-Id: I08e412fd3287ea35e98f7da488fdbe35c730bbb9
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
19 months agoPromote ValueRange 97/102897/3
Robert Varga [Wed, 26 Oct 2022 15:47:11 +0000 (17:47 +0200)]
Promote ValueRange

This is a quite stable API element, remove its @Beta tag.

Change-Id: If7bfbe4488799ef010aadc35b7cc475f16aa4bef
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
19 months agoRemove Rfc6020AbnfRule 96/102896/3
Robert Varga [Wed, 26 Oct 2022 15:44:39 +0000 (17:44 +0200)]
Remove Rfc6020AbnfRule

Remove the annotation and update all its users, so it does not confuse
anyone.

Change-Id: Ief29c36f380a676dd42935eaf6b980eab99924bc
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
19 months agoSeal OperationDeclaredStatement 94/102894/3
Robert Varga [Wed, 26 Oct 2022 15:36:47 +0000 (17:36 +0200)]
Seal OperationDeclaredStatement

This is a common super-interface for ActionStatement and RpcStatement,
make sure we seal it to prevent misuse elsewhere.

Change-Id: I52b29e9f5b845ab19d045847183bf374f01f1fa8
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
19 months agoMass-promote DeclaredStatement captures 93/102893/3
Robert Varga [Wed, 26 Oct 2022 15:30:27 +0000 (17:30 +0200)]
Mass-promote DeclaredStatement captures

Declared statements are in a reasoable shape. Add some documentation and
move them out of @Beta.

Change-Id: Ib690d613c28d249c34d29ee064b9d59f6a0b286b
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
19 months agoMass-promote EffectiveStatement captures 91/102891/6
Robert Varga [Wed, 26 Oct 2022 12:34:16 +0000 (14:34 +0200)]
Mass-promote EffectiveStatement captures

The hierarchy and capabilities of EffectiveStatements are well-defined
and quite safe for use. Drop their @Beta annotations and add javadocs
where those were missing.

Change-Id: I7b0469aca9d527a81d59cad513707c424c978294
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
19 months agoDeprecate Rfc6020AbnfRule 95/102895/2
Robert Varga [Wed, 26 Oct 2022 15:38:24 +0000 (17:38 +0200)]
Deprecate Rfc6020AbnfRule

This annotation is used for very light documentation purposes only.
It also does not have an RFC7950 counterpart nor can it express the
various definitions in YANG extensions. Deprecate it for removal.

Change-Id: I13eff70e8cf8dc20bfdaf42969ab92b608bc1dff
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
19 months agoDocument Key(Effective)Statement's argument 92/102892/2
Robert Varga [Wed, 26 Oct 2022 15:04:46 +0000 (17:04 +0200)]
Document Key(Effective)Statement's argument

Iteration order of the returned set has additional requirements, make
sure we document them.

Change-Id: I72ed3c8e45e7149187a4c295ab3e3d6526fbb368
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
19 months agoDocument UniqueStatement 90/102890/2
Robert Varga [Wed, 26 Oct 2022 12:33:51 +0000 (14:33 +0200)]
Document UniqueStatement

We do not have any javadocs, adds some basics.

Change-Id: Ic449d949b78e7313104fa32f0ad99c09037bed4a
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
19 months agoPromote ArgumentDefinition 89/102889/2
Robert Varga [Wed, 26 Oct 2022 12:19:29 +0000 (14:19 +0200)]
Promote ArgumentDefinition

This construct is suitably stable for normal use, remove @Beta
declaration.

Change-Id: Id865e1a6ffafdd82479e5fb9cf811e443c5f3552
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
19 months agoMass-promote yang.model.api constructs 86/102886/2
Robert Varga [Wed, 26 Oct 2022 11:51:32 +0000 (13:51 +0200)]
Mass-promote yang.model.api constructs

The following constructs are deemed stable enough for normal use:
- ActionDefinition
- ActionNodeContainer
- AddedByUsesAware (although it is deprecated)
- AnydataSchemaNode
- ContainerLike
- EffectiveStatementEquivalent
- InputSchemaNode
- OutputSchemaNode
- OperationDefinition
- PathExpression

Change-Id: I0bd793add470adf1d90d4e098e592efc921a76de
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
19 months agoPromote DataNodeContainer.findDataTreeChild() 85/102885/2
Robert Varga [Wed, 26 Oct 2022 11:45:07 +0000 (13:45 +0200)]
Promote DataNodeContainer.findDataTreeChild()

Do not use Optional internally, reduce casts and promote these methods
to stable API.

Change-Id: I66b36a5e138f049a4431141a70147bf01cb39f02
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
19 months agoOptimize DataNodeContainer.findDataChildByName() 84/102884/2
Robert Varga [Wed, 26 Oct 2022 11:39:53 +0000 (13:39 +0200)]
Optimize DataNodeContainer.findDataChildByName()

Ditch the internal use of Optional, which allows us to use simpler
traversal logic.

Change-Id: Idd30830b434e40d3d15d00bdda8efcab253b4590
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
19 months agoMass-promote concepts 83/102883/2
Robert Varga [Wed, 26 Oct 2022 11:13:17 +0000 (13:13 +0200)]
Mass-promote concepts

The following concepts are deemed stable enough to lose @Beta
annotation:
- PrettyTree
- ExtensibleObject
- ObjectExtension
- ObjectExtensions
- WritableObject
- WritableObjects
- WritableIdentifier

Change-Id: Iff82ecbae7456edb8e74d2f9e0cefe57564e82b9
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
19 months agoPromote yang-model-export classes to stable 82/102882/2
Robert Varga [Wed, 26 Oct 2022 10:02:40 +0000 (12:02 +0200)]
Promote yang-model-export classes to stable

Drop @Beta annotations, as the contracts here are sufficiently stable.

Change-Id: Id72dd37da28daf6c53d7ad7037dc2ed76c547a95
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
19 months agoUse a record for OpenElement 81/102881/2
Robert Varga [Wed, 26 Oct 2022 09:59:31 +0000 (11:59 +0200)]
Use a record for OpenElement

This is a simple holder of two references, model it as such.

Change-Id: Iad079aa78bcb87a738319312415becf1e5034fc7
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
19 months agoUse Optional.ifPresent() 80/102880/1
Robert Varga [Wed, 26 Oct 2022 09:49:32 +0000 (11:49 +0200)]
Use Optional.ifPresent()

Use a simple lambda for appending the optional prefix.

Change-Id: I17a79f73dcb10d2b6826b5fb9c0a368e723a7ccd
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
19 months agoUse local variable type inference in yang-model-export 79/102879/1
Robert Varga [Wed, 26 Oct 2022 09:43:44 +0000 (11:43 +0200)]
Use local variable type inference in yang-model-export

This cleans up some of the code verbosity.

Change-Id: I6d026214ad3229852984e06deb08b5a2148015f0
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
19 months agoUse instanceof pattern match in yang-model-export 78/102878/1
Robert Varga [Wed, 26 Oct 2022 09:48:11 +0000 (11:48 +0200)]
Use instanceof pattern match in yang-model-export

This allows for more exhaustive checks and makes code a bit more clear.

Change-Id: I50c8ab52f39b398890621cdd474a0f85aef7f181
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
19 months agoRemove deprecated YingExportUtils methods 77/102877/1
Robert Varga [Wed, 26 Oct 2022 09:50:40 +0000 (11:50 +0200)]
Remove deprecated YingExportUtils methods

The callers can make the switch themselves, remove migration methods.

Change-Id: Iad94c417d78debedc3571e44f10f2956e37fb892
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
19 months agoModernize AbstractCodecFactory a bit 72/102872/2
Robert Varga [Tue, 25 Oct 2022 13:28:30 +0000 (15:28 +0200)]
Modernize AbstractCodecFactory a bit

Use local variable type inference and instanceof patterns.

Change-Id: I9ba940e18a4f1ead42ffe32b7a37bed1f922c6ac
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
19 months agoModernize IdentityCodecUtil a bit 71/102871/1
Robert Varga [Tue, 25 Oct 2022 13:20:12 +0000 (15:20 +0200)]
Modernize IdentityCodecUtil a bit

Use local variable type inference and Optional.orElseThrow().

Change-Id: I4de98926da01f6d4f1209b676c2315501e8da5b7
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
19 months agoModernize ParserStreamUtils a bit 70/102870/1
Robert Varga [Tue, 25 Oct 2022 13:14:02 +0000 (15:14 +0200)]
Modernize ParserStreamUtils a bit

Use variable type inference and instanceof patterns.

Change-Id: I771e92538f7ab87167992a1952ef8de61e88505f
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
19 months agoUse instanceof patterns in NormalizedNodeStreamWriterStack 69/102869/1
Robert Varga [Tue, 25 Oct 2022 13:10:25 +0000 (15:10 +0200)]
Use instanceof patterns in NormalizedNodeStreamWriterStack

We have a few places where we can apply these shortcuts, improving
safety and expressiveness.

Change-Id: I80bfbab9adb21ae2f0727d9e52135a103d0ecba8
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
19 months agoSeal XMLStreamNormalizedNodeStreamWriter 68/102868/1
Robert Varga [Tue, 25 Oct 2022 12:40:18 +0000 (14:40 +0200)]
Seal XMLStreamNormalizedNodeStreamWriter

We have only two specializations of this construct, make sure we do not
allow it to be otherwise subclassed.

Change-Id: Ibfae6c844aa4626bba7004a257a04383798d272c
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
19 months agoBump odlparent to 12.0.0 62/102862/1
Robert Varga [Mon, 24 Oct 2022 18:45:22 +0000 (20:45 +0200)]
Bump odlparent to 12.0.0

Pick up the next version of odlparent.

Change-Id: I54b8c36865438488662cdfa24ebea118fa19ba60
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
19 months agoUse instanceof patterns in XmlParserStream 31/102831/2
Robert Varga [Fri, 21 Oct 2022 14:08:51 +0000 (16:08 +0200)]
Use instanceof patterns in XmlParserStream

We can ditch a few explicit casts if we use instanceof patterns, let's
do that.

Change-Id: I820e2469948d88e3ecfc06b3a2e2dbadf6658df4
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
19 months agoMove AntlrSupport 01/102701/3
Robert Varga [Sun, 16 Oct 2022 23:07:12 +0000 (01:07 +0200)]
Move AntlrSupport

The binding works in exact opposite way: the antlr package knows how to
represent IR things.

Change-Id: I4d20dcb206750a6a2185c22a8620fca95d12282f
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
19 months agoRework IR API instantiation 99/102699/2
Robert Varga [Sun, 16 Oct 2022 21:39:54 +0000 (23:39 +0200)]
Rework IR API instantiation

Prepare for splitting out of IR{Argument,Keyword,Statement} interfaces,
implementation and users:
- hide pure implementation details
- expose factory methods

Change-Id: I2ec099ddcdb617fa0ac10b06515b65c4ba9602ea
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
19 months agoMove IRSchemaSource 98/102698/2
Robert Varga [Sun, 16 Oct 2022 20:31:09 +0000 (22:31 +0200)]
Move IRSchemaSource

IRSchemaSource is a yang-repo-api contract, it should live in
rfc7950.repo until we find it a better place. This allows is to remove
the export of yang.parser.rfc7950.ir.

Change-Id: I78f71ae6491d0e551f957819fb77f30c8910c00e
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
19 months agoRemove yang-maven-plugin interfaces 54/93554/24
Robert Varga [Mon, 2 Nov 2020 16:09:48 +0000 (17:09 +0100)]
Remove yang-maven-plugin interfaces

yang2sources.spi package has been deprecated for a long time, remove
it. This will allow us to properly control file lifecycle and perform
correct incremental builds.

integration tests were updated to match actual state.

JIRA: YANGTOOLS-747
Change-Id: I5e3acf0df97a33e7507841a549fa7109b48c16c3
Signed-off-by: Ruslan Kashapov <ruslan.kashapov@pantheon.tech>
19 months agoSeal SchemaSourceRepresentation hierarchy 90/102690/2
Robert Varga [Fri, 14 Oct 2022 12:00:25 +0000 (14:00 +0200)]
Seal SchemaSourceRepresentation hierarchy

There are really only two basic SchemaSourceRepresentations: either YIN
or YANG. Make sure we express that through sealing interfaces. This
exposes the fact IRSchemaSource is a YangSchemaSourceRepresentation.

Change-Id: Ic0e073deefeef541ff4461c17e1dacffe4324da4
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
19 months agoClean up antlr/parser utilities 80/102680/1
Robert Varga [Thu, 13 Oct 2022 22:21:47 +0000 (00:21 +0200)]
Clean up antlr/parser utilities

We can seal the token hierarchy, let's do that to improve clarity as to
what is going on.

Change-Id: I982831143d462e53def2a7ea9283d7509c1fdaff
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
19 months agoUse switch expressions in AntlrSupport 74/102674/1
Robert Varga [Thu, 13 Oct 2022 17:03:48 +0000 (19:03 +0200)]
Use switch expressions in AntlrSupport

This is a mostly-automated conversion, except for a few comments.

Change-Id: I027159cd0ee135fd8ea2ef1cd98747b298dac239
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
19 months agoAdd AbstractIRObject equality contract 73/102673/2
Robert Varga [Thu, 13 Oct 2022 16:40:40 +0000 (18:40 +0200)]
Add AbstractIRObject equality contract

Make sure the objects we are giving out implement proper equality. Also
use JDK17 features to seal the class hierarchy.

Change-Id: Iff7f3fa1f071f44e41eb322e8adc070030cdbd30
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
19 months agoModernize YangDataExtensionTest 95/102595/3
Robert Varga [Tue, 11 Oct 2022 12:56:36 +0000 (14:56 +0200)]
Modernize YangDataExtensionTest

Use local variable type inference to reduce verbosity a bit.

Change-Id: I3006823047e8f8643c781ab0b086ff014aab1bc3
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
19 months agoFix yang-data extension definition 02/101302/10
Peter Suna [Thu, 26 May 2022 09:58:49 +0000 (11:58 +0200)]
Fix yang-data extension definition

The definition on ietf-restconf's yang-data is being rather exploited in
the wild, with a license to contain choices and anydata. These are
essentially allowed by other tooling, hence we need to also relax our
requirements.

This implies we cannot really expose the container directly, but rather
have to implement DataNodeContainer instead -- with the implied API
breakage. This is fine due to @Beta-level contract of all interfaces
involved.

Since we are breaking semantics here, also ditch the notion that the
yang-data argument can be parsed into a QName and instead reuse the
schema tree child's QName as the value required by SchemaNode contract.

JIRA: YANGTOOLS-1443
Change-Id: I3f78f71ea2980bf84f409d1ec89979e9e7b200ae
Signed-off-by: Peter Suna <peter.suna@pantheon.tech>
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
19 months agoRemove SchemaAwareBuilders 56/102556/6
Robert Varga [Tue, 4 Oct 2022 14:12:14 +0000 (16:12 +0200)]
Remove SchemaAwareBuilders

This reverts commit ed354e4ac28c35091d7bce0bd74919118916d999, removing
SchemaAwareBuilders again.

JIRA: YANGTOOLS-1249
Change-Id: Ia40bf36e7edd569de22e32a844ab40ab15fc46ae
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
19 months agoTighten AbstractImmutableDataContainerNodeBuilder constructors 57/102557/1
Robert Varga [Tue, 4 Oct 2022 15:32:13 +0000 (17:32 +0200)]
Tighten AbstractImmutableDataContainerNodeBuilder constructors

The class is not visible outside the package, there is no point in
protected visibility.

Change-Id: I8944000865766720d03c04840803752269e878d1
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
19 months agoReduce code duplication in InferredStatementContext 55/102555/5
Robert Varga [Tue, 4 Oct 2022 13:15:11 +0000 (15:15 +0200)]
Reduce code duplication in InferredStatementContext

We are treating declared/effective copies the same way -- isolate
duplicated code into utility methods.

Change-Id: I1faa7348fb7185a60abeec75c041aa0466998b00
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
19 months agoImprove StatementContextBase.stream{Declared,Effective} 54/102554/2
Robert Varga [Tue, 4 Oct 2022 13:08:07 +0000 (15:08 +0200)]
Improve StatementContextBase.stream{Declared,Effective}

We have an implementation invariant of returning ReactorStmtCtx,
make sure we expose it, removing the need for unchecked casts.

Change-Id: I7b4ab5c1032d719520bcdf046045bd6638aea13a
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
19 months agoSeal PathArgumentList 38/102038/4
Robert Varga [Wed, 10 Aug 2022 14:51:03 +0000 (16:51 +0200)]
Seal PathArgumentList

We have only two possible subclasses, make sure we use a sealed class
for that.

Change-Id: Ibb0297a660c0d61e766ee0fd8303500c44efd1dc
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
19 months agoEnforce range constraints in DecimalStringCodec 56/102056/8
OleksandrZharov [Thu, 11 Aug 2022 10:16:49 +0000 (12:16 +0200)]
Enforce range constraints in DecimalStringCodec

Added check which will report YangInvalidValueException if the parsed
value doesn't match range constraints specified in DecimalTypeDefinition.
Added explicit test for this change.

JIRA: YANGTOOLS-1442
Change-Id: I7a00fb540ae64e8f5bdde58aa7297e0e5f91d780
Signed-off-by: OleksandrZharov <Oleksandr.Zharov@pantheon.tech>
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
19 months agoFix DataTreeCandidateNodes handling of deleted nodes 36/102536/5
Robert Varga [Mon, 3 Oct 2022 08:42:11 +0000 (10:42 +0200)]
Fix DataTreeCandidateNodes handling of deleted nodes

Recursive candidate should be used only for DistinctNodeContainer,
not all NormalizedNodeContainers. Fix the check so that we do not hit a
ClassCastException.

JIRA: YANGTOOLS-1455
Change-Id: I6a89f8e59a7f8d8b36c5c5d2990290f66f79f529
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
19 months agoClean up TerminalDataTreeCandidateNode 34/102534/3
Robert Varga [Mon, 3 Oct 2022 08:36:24 +0000 (10:36 +0200)]
Clean up TerminalDataTreeCandidateNode

This class is supposed to be final and we should be mapping Optionals
instead of explicit isPreset/get calls.

Change-Id: Id30df72c8afe95c64dafe17a34f06eef01569535
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
19 months agoCleanup DataTreeCandidatesAggregateTest 37/102537/2
Robert Varga [Mon, 3 Oct 2022 09:30:03 +0000 (11:30 +0200)]
Cleanup DataTreeCandidatesAggregateTest

Use static import for ModificationType and prefer
Optional.orElseThrow().

Change-Id: Ie977782ccad84ebaf2b6e3cc9f3667f3e9b151dc
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
19 months agoImprove StmtContext.copyAsChild() type safety 16/102516/1
Robert Varga [Fri, 30 Sep 2022 12:58:02 +0000 (14:58 +0200)]
Improve StmtContext.copyAsChild() type safety

We should not be losing A/D/E type capture, but rather propagate it.

Change-Id: I6254a4f0ef0fea5b79815e99d1e6b03d33f679e4
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>