yangtools.git
7 years agoBUG-7464: package forked TrieMap 42/51842/3
Robert Varga [Tue, 14 Feb 2017 09:02:40 +0000 (10:02 +0100)]
BUG-7464: package forked TrieMap

Package TrieMap into features.

Change-Id: I37c8bde665c1ce445410772e38de1e594197f68a
Signed-off-by: Robert Varga <rovarga@cisco.com>
7 years agoFix RangeConstraintImpl 58/52058/3
Robert Varga [Mon, 20 Feb 2017 00:02:05 +0000 (01:02 +0100)]
Fix RangeConstraintImpl

Malformed javadoc and a stray copy&paste reference.

Change-Id: I2879a861852df01d5cdab385342bc93256f8792d
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
7 years agoCleanup SchemaContextUtil 57/52057/3
Robert Varga [Sun, 19 Feb 2017 23:59:46 +0000 (00:59 +0100)]
Cleanup SchemaContextUtil

Fixes checkstyle offences and eclipse warnings.

Change-Id: I8501609d6437d2177dc44f3be45ae4cd56c8983e
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
7 years agoUse YangConstants.RFC6020_YANG_FILE_EXTENSION 46/52046/3
Robert Varga [Sun, 19 Feb 2017 11:48:10 +0000 (12:48 +0100)]
Use YangConstants.RFC6020_YANG_FILE_EXTENSION

Do not open-code ".yang" and use it from its canonical definition.

Change-Id: I3ba65a0a645b9d3b94fac46087202cfe7476a7ef
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
7 years agoEliminate unused Util.listFiles() 44/52044/2
Robert Varga [Sun, 19 Feb 2017 11:47:54 +0000 (12:47 +0100)]
Eliminate unused Util.listFiles()

This flavor is only used by its test, hence we do not need it.

Change-Id: I8cdab99e5a8d1e12b24bd21c77a6c69a60014e13
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
7 years agoEliminate use of File[] 43/52043/2
Robert Varga [Sun, 19 Feb 2017 11:47:13 +0000 (12:47 +0100)]
Eliminate use of File[]

The array is used only as a filter, hence it is better to wrap it
in a collection and provide a filter on top of them.

Change-Id: I8067f128a80ded57a929fec3fcf68e84ddb7d487
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
7 years agoDo not use IOUtils 33/52033/5
Robert Varga [Sun, 19 Feb 2017 11:46:39 +0000 (12:46 +0100)]
Do not use IOUtils

Guava provides a flexible alternative, so use that directly
rather than relying on commons-io.

Change-Id: I3959df3c0421e257f233d89a73a1904e67e4cfb9
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
7 years agoEliminate the use of com.google.common.collect.Maps 32/52032/5
Robert Varga [Sun, 19 Feb 2017 11:46:16 +0000 (12:46 +0100)]
Eliminate the use of com.google.common.collect.Maps

We can instantiate maps conveniently using <>. Furthermore
we do not need ConcurrentMap with Java 8, as the base Map
interface implements putIfAbsent().

Change-Id: Ifa98a7e624b456425c0ba79dd325f444ee32e8ad
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
7 years agoMove Util.getInstance() 31/52031/5
Robert Varga [Sun, 19 Feb 2017 11:46:00 +0000 (12:46 +0100)]
Move Util.getInstance()

This method is only used in YangToSourcesProcessor, move it there
to increase clarity.

Change-Id: I1c070f84a235c9199f86f18204d3a9b08779386b
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
7 years agoCleanup artifacts pom.xml 41/51841/2
Robert Varga [Tue, 14 Feb 2017 08:55:59 +0000 (09:55 +0100)]
Cleanup artifacts pom.xml

- do not use project.groupId
- do not use project.version
- remove unused property

Change-Id: I7d04399c83ff71cb39c8f85b3c8b51f3617ad6a9
Signed-off-by: Robert Varga <rovarga@cisco.com>
7 years agoDeprecate websocket-client 47/51847/2
Robert Varga [Tue, 14 Feb 2017 09:28:15 +0000 (10:28 +0100)]
Deprecate websocket-client

This component is no longer used anywhere and has no place in yangtools,
deprecate it, pending removal in 2.0.0.

Change-Id: I0b58fa7576798e4224be1f3f04fc5d49b9ed2290
Signed-off-by: Robert Varga <rovarga@cisco.com>
7 years agoBug 6875 - [Yang 1.1] Allow imports of multiple revisions of a module. 67/51567/4
Peter Kajsa [Wed, 8 Feb 2017 16:20:50 +0000 (17:20 +0100)]
Bug 6875 - [Yang 1.1] Allow imports of multiple revisions of a module.

Since Yang 1.1, it is allowed to import a module multiple times even with
different revisions. This patch introduced this functionality for Yang 1.1
sources.

Change-Id: I99f36308079cd7bd0af412b03f63eb2bb75242ef
Signed-off-by: Peter Kajsa <pkajsa@cisco.com>
7 years agoBug 6877: [Yang 1.1] Allow multiple base identities 72/49772/10
Igor Foltin [Wed, 25 Jan 2017 13:32:07 +0000 (14:32 +0100)]
Bug 6877: [Yang 1.1] Allow multiple base identities

Allow identities to be derived from multiple base
identities in Yang 1.1 models.

Change-Id: I543336f30ae593862820639ed966b9a7f59e899b
Signed-off-by: Igor Foltin <ifoltin@cisco.com>
Signed-off-by: Peter Kajsa <pkajsa@cisco.com>
7 years agoBug 6261: Introduce resolution of deviation statement during SchemaContext assembly 08/51008/9
Igor Foltin [Wed, 25 Jan 2017 13:15:30 +0000 (14:15 +0100)]
Bug 6261: Introduce resolution of deviation statement during SchemaContext assembly

YANG statement parser now resolves deviation statements in parsed YANG models.

Change-Id: Ia4dbdfd1ee196d418c94287be5ad03af5ffc485d
Signed-off-by: Igor Foltin <ifoltin@cisco.com>
7 years agoBUG-7061: mass-rename test files 53/51153/4
Robert Varga [Fri, 27 Jan 2017 20:38:58 +0000 (21:38 +0100)]
BUG-7061: mass-rename test files

This is a mass rename of .xml files to .yin.

Change-Id: Ifc8b8bcb130bfc2d60854796254220a8894c0f38
Signed-off-by: Robert Varga <rovarga@cisco.com>
7 years agoUpdate javadocs related to *SchemaSource 87/51187/1
Martin Ciglan [Mon, 30 Jan 2017 15:25:07 +0000 (16:25 +0100)]
Update javadocs related to *SchemaSource

Change-Id: Ib51ee7d60fcd21c79fcdc138f61007bd7f450742
Signed-off-by: Martin Ciglan <mciglan@cisco.com>
7 years agoSourceIdentifier.create() method deprecation explained 12/51112/3
Martin Ciglan [Fri, 27 Jan 2017 11:59:41 +0000 (12:59 +0100)]
SourceIdentifier.create() method deprecation explained

    - javadoc
    - imports optimized

Change-Id: I3dfc20fd23a57051784a691875bce0260af39a5e
Signed-off-by: Martin Ciglan <mciglan@cisco.com>
7 years agoReplace FindBugs :jsr305 by full :annotation (Bug 7663) 96/50896/3
Michael Vorburger [Mon, 23 Jan 2017 20:01:33 +0000 (21:01 +0100)]
Replace FindBugs :jsr305 by full :annotation (Bug 7663)

Change-Id: If0368dce54a853f00d69c177c3e848888e3b20b0
Signed-off-by: Michael Vorburger <vorburger@redhat.com>
7 years agoBug 7438: Allow identityref type to reference multiple base identities 98/50298/6
Igor Foltin [Wed, 11 Jan 2017 14:49:09 +0000 (15:49 +0100)]
Bug 7438: Allow identityref type to reference multiple base identities

Starting with YANG 1.1 (RFC7950), identityref type can reference multiple
base identities.

Change-Id: I448d5c002d233444c881ff26516a435825406d79
Signed-off-by: Igor Foltin <ifoltin@cisco.com>
7 years agoBUG-7474: produce Karaf 4 features 50/49550/9
Stephen Kitt [Wed, 14 Dec 2016 17:28:35 +0000 (18:28 +0100)]
BUG-7474: produce Karaf 4 features

This is a simplified version of
https://git.opendaylight.org/gerrit/38638 without any changes to
bundles; it just delegates the actual features.xml generation to the
plugin. This requires a current snapshot of Karaf 4.0.9 to reduce the
resulting dependencies. The new features are generated for Karaf 4
only. (The existing features.xml is preserved for Karaf 3.)

Change-Id: I4cc4692459f637e06e64a1a2e432448f57c32e4c
Signed-off-by: Stephen Kitt <skitt@redhat.com>
7 years agoBug 6868: If-feature argument may be boolean expression 14/49714/8
Peter Kajsa [Wed, 21 Dec 2016 18:16:07 +0000 (19:16 +0100)]
Bug 6868: If-feature argument may be boolean expression

Since Yang 1.1, "if-feature" argument may be a boolean expression over
feature names. In this expression, a feature name evaluates to "true"
if and only if the feature is supported by the server.

Change-Id: Id68d9a101641a7775d8b2a049986431e9cb27662
Signed-off-by: Peter Kajsa <pkajsa@cisco.com>
7 years agoDo not override Immutables version 36/50836/2
Robert Varga [Mon, 23 Jan 2017 15:53:02 +0000 (16:53 +0100)]
Do not override Immutables version

Immutables is define din odlparent, no need to specify
the version again.

Change-Id: I03aed6f7f52f34c0302ee930a6b2b8a723512156
Signed-off-by: Robert Varga <rovarga@cisco.com>
7 years agoBUG-5222: Reuse substatements across phases 13/49813/14
Robert Varga [Mon, 26 Dec 2016 14:35:49 +0000 (15:35 +0100)]
BUG-5222: Reuse substatements across phases

Now that we can address substatements accurately, we can reuse
the same statements instead of throwing them out and re-instantiating
them. We still need to switch the root if the YangVersion changes,
as the statement support objects need to be reemitted.

This removes the need for ContextBuilder and its subclasses, simply
because all required information is available when createDeclaredChild()
is called, bringing further simplification to StatementContextWriter.

Once that indirection is removed, the code flow is improved, which
flushed out a failure to validate when an extension requires an arugment,
hence the test models need update to pass validation.

A final effect of these changes is that StatementContextBase.declared
becomes superfluous, as it really is just a view over declared
substatements, which allows us to eliminate that field and instead
project a view of StatementMap's values.

Change-Id: I6fd3e2e2de41305457958673b77a72073215940e
Signed-off-by: Robert Varga <rovarga@cisco.com>
7 years agoMust always use mockito-core instead of mockito-all 30/50830/1
Michael Vorburger [Mon, 23 Jan 2017 15:07:56 +0000 (16:07 +0100)]
Must always use mockito-core instead of mockito-all

to prevent NoSuchMethodError: org.hamcrest.Matcher ...

Bug 7662 related
Change-Id: Ia34e4f4d0bf5a03cc311d69c3d9cfbe5362521ed
Signed-off-by: Michael Vorburger <vorburger@redhat.com>
7 years agoBug 7551 - Bad error message for pattern constrain 43/50543/3
Peter Kajsa [Tue, 17 Jan 2017 12:22:24 +0000 (13:22 +0100)]
Bug 7551 - Bad error message for pattern constrain

Correction of misleading error message that the YANG parser
associates with a pattern constraint.

Change-Id: I39a611bd864e50fea44d3baf4a210a228f974342
Signed-off-by: Peter Kajsa <pkajsa@cisco.com>
7 years agoBug 6876: [Yang 1.1] Allow "augment" to add conditionally mandatory nodes 05/50305/4
Peter Kajsa [Wed, 11 Jan 2017 16:06:26 +0000 (17:06 +0100)]
Bug 6876: [Yang 1.1] Allow "augment" to add conditionally mandatory nodes

Since Yang 1.1, if an augmentation is made conditional with a
"when" statement, it is allowed to add mandatory nodes to target in
another module.

Change-Id: I0fb2509b26f8455870aa279702b4df4b6c718750
Signed-off-by: Peter Kajsa <pkajsa@cisco.com>
7 years agoBUG-7464: update INode.GCAS_Complete() 96/50296/2
Robert Varga [Wed, 11 Jan 2017 00:43:49 +0000 (01:43 +0100)]
BUG-7464: update INode.GCAS_Complete()

Undo previous read on INode generation. It makes the the code
read a bit clunky, as the context of reasoning about the root
INode is lost.

While we're here, improve code readability with explicit
while(m != null) instead of a while(true)/if(m != null).

Change-Id: I01dde9603ff6fec98845036742375f3c5524ba00
Signed-off-by: Robert Varga <rovarga@cisco.com>
7 years agoBug 6873: [Yang 1.1] Add support for "require-instance" in leafref 97/49697/7
Igor Foltin [Wed, 21 Dec 2016 13:03:53 +0000 (14:03 +0100)]
Bug 6873: [Yang 1.1] Add support for "require-instance" in leafref

Allow leafref type to have require-instance substatement in Yang 1.1 models.

Change-Id: I96cc337176abbb3e2fdb1ae22a83ba7810190fbe
Signed-off-by: Igor Foltin <ifoltin@cisco.com>
7 years agoFix LengthConstraintImpl javadoc 24/49824/3
Robert Varga [Mon, 26 Dec 2016 21:03:52 +0000 (22:03 +0100)]
Fix LengthConstraintImpl javadoc

Add a missing closing brace.

Change-Id: I64c147e6fd50c06f6e13cc6268844e3a4def4532
Signed-off-by: Robert Varga <rovarga@cisco.com>
7 years agoRevert "BUG-7446: pull in guava-21" 03/50303/1
Robert Varga [Wed, 11 Jan 2017 14:46:37 +0000 (15:46 +0100)]
Revert "BUG-7446: pull in guava-21"

This reverts commit 75b18eff1ab6fcd22c47b837798653668bd797db.

Change-Id: I29a007f8874b480ecc55b1b4605e28f2f86b9fb9
Signed-off-by: Robert Varga <rovarga@cisco.com>
7 years agoBUG-7464: eliminate console output 36/50236/2
Robert Varga [Tue, 10 Jan 2017 22:28:38 +0000 (23:28 +0100)]
BUG-7464: eliminate console output

Use a Logger to log messages as needed instead of System.out,
fixing checkstyle warnings.

Change-Id: I07aa409856951e72a656ed35703ea29a05fd1397
Signed-off-by: Robert Varga <rovarga@cisco.com>
7 years agoBUG-7464: improve keySet()/entrySet() bytecode 35/50235/2
Robert Varga [Tue, 10 Jan 2017 22:20:44 +0000 (23:20 +0100)]
BUG-7464: improve keySet()/entrySet() bytecode

Shave off a few instructions by using expressions rather than
verbose assignment.

Change-Id: I12adc79be895cceea3feddfeb4cc100bcee0b883
Signed-off-by: Robert Varga <rovarga@cisco.com>
7 years agoBUG-7464: fix checkstyle warnings 35/50135/7
Robert Varga [Mon, 9 Jan 2017 15:31:52 +0000 (16:31 +0100)]
BUG-7464: fix checkstyle warnings

With no functional changes, this patch cleans up most
of the warnings reported by checkstyle.

Change-Id: I24833d1038eb98a04cecd18c3055757cb1ea7cbc
Signed-off-by: Robert Varga <rovarga@cisco.com>
7 years agoBUG-7464: enable checkstyle plugin 34/50134/7
Robert Varga [Mon, 9 Jan 2017 14:48:18 +0000 (15:48 +0100)]
BUG-7464: enable checkstyle plugin

Rather than skipping the plugin completely, just disable
the license check.

Change-Id: I9547ebbc16920f6921d9c0fa29e341bca80ba287
Signed-off-by: Robert Varga <rovarga@cisco.com>
7 years agoBUG-7464: do not throw ISE/RTE in "impossible" cases 54/50054/9
Robert Varga [Thu, 5 Jan 2017 10:24:21 +0000 (11:24 +0100)]
BUG-7464: do not throw ISE/RTE in "impossible" cases

Rather than throwing exceptions which may get mis-interpreted
by the callers, use Guava's VerifyException to flag the invariant
being checked.

Change-Id: I8a9431f1b578f3bb93fccd87f5138d97c0fa4242
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
7 years agoBUG-7464: Add MainNode.trySize() 41/50041/9
Robert Varga [Thu, 5 Jan 2017 02:33:02 +0000 (03:33 +0100)]
BUG-7464: Add MainNode.trySize()

Having the ability to estimate size will be useful for Spliterators,
add a method for reading the currently-cached value without actually
computing it.

Also rename cachedSize() to size() and make it enforce being called
with an immutable snapshot. For CNodes this allows us to get rid
of atomic access to the size field, as the order of updates and
visibility propagation of size does not matter -- all concurrent
computations will arrive at the same result. The worst that can
happen we spend more time computing computing the value.

Change-Id: I84e33d96c7aa6f97cb33e0d1c31178916541c693
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
7 years agoBUG-7464: Add dedicated key set classes 08/50008/12
Robert Varga [Tue, 3 Jan 2017 21:16:17 +0000 (22:16 +0100)]
BUG-7464: Add dedicated key set classes

These are slightly more efficient versions of the default
key set and react to Set.remove().

Change-Id: If67d4c75210d22dafbd2cd2dabeebc8554505a5e
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
7 years agoBUG-7464: Refactor TrieMapIterator 83/49983/14
Robert Varga [Tue, 3 Jan 2017 16:41:08 +0000 (17:41 +0100)]
BUG-7464: Refactor TrieMapIterator

This eliminates unused code and re-organizes the type hierarchy
so we have an abstract base iterator specialized for mutable
and immutable cases. This allows the immutable iterator to not
track the last returned entry, making a bit lighter-weight.

Futhermore use of iterator in LNode is removed, as LNodeEntries
can simply be used the traverse the list without object allocation.

Finally it restores assumptions made by original Scala code, which
is that the base map for an iterator, used to access, is a read-only
one. This was probably damaged during initial Java porting, as
Scala iterators are read-only and the ability to mutate was added.

The was done without differentiating the iteration (read-only) map
from the mutation map (read-write).

Change-Id: I7949cde0712e3e02de1846a51b6dd0d3704bea58
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
7 years agoBUG-7464: Centralize implementation constants 82/49982/12
Robert Varga [Tue, 3 Jan 2017 14:07:00 +0000 (15:07 +0100)]
BUG-7464: Centralize implementation constants

We have a couple of constants: 5, 7 and 35 used in the codebase,
which are not explained anywhere. These are really derived from
the size of hash (32 bits) and size of bitmap (32 bits).

Centralize their definition in a new utility class, so they can
be documented and referenced uniformly.

Change-Id: I96433c3e72f41fb9bcfa6fa4a9552a7ff9202005
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
7 years agoBUG-7464: Add a dedicated ImmutableEntrySet 67/49967/13
Robert Varga [Tue, 3 Jan 2017 11:39:11 +0000 (12:39 +0100)]
BUG-7464: Add a dedicated ImmutableEntrySet

Having immutability as a specialization is useful, as we can make explicit
assumptions about the map not moving. This will be important as we implement
specialized interators and spliterators.

Change-Id: I00a36a5bfc48dc31b088a46b07545f0442679b49
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
7 years agoBUG-7464: enable FindBugs enforcement 62/49962/12
Robert Varga [Tue, 3 Jan 2017 02:24:15 +0000 (03:24 +0100)]
BUG-7464: enable FindBugs enforcement

So far it produces only false positives, but it is good to have
some defences.

Change-Id: Id72be114ed6d8c93e822f4325649025b7860e996
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
7 years agoClean up code, incl. fix Checkstyle warnings (without real changes) 76/38876/13
Michael Vorburger [Fri, 13 May 2016 14:05:52 +0000 (16:05 +0200)]
Clean up code, incl. fix Checkstyle warnings (without real changes)

Change-Id: Ie3875d8e07b556f671fa3e8cfca099f3da6c6e8a
Signed-off-by: Michael Vorburger <vorburger@redhat.com>
7 years agoBUG-7464: Split out entryset and iterator classes 61/49961/11
Robert Varga [Tue, 3 Jan 2017 02:02:29 +0000 (03:02 +0100)]
BUG-7464: Split out entryset and iterator classes

This is a preparatory patch, splitting out support classes
so they can be fixed up and refactored as needed.

Change-Id: Ib7b994f2f4e114ec0a56d8930e7ba7320e18201c
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
7 years agoBUG-5222: Optimize SubstatementValidator 16/49816/8
Robert Varga [Mon, 26 Dec 2016 17:00:35 +0000 (18:00 +0100)]
BUG-5222: Optimize SubstatementValidator

SubstatementValidator's execution was quite inefficient in its
operation.

During the initial phase of counting substatements by their type
it performed multiple lookups coupled with boxing. Fix this by
introducing a simple counter class and using computeIfAbsent(),
which results in a single lookup, no replacement and only primitive
increment.

During the cardinality checking, we looked up the cardinality
three times. Fix this by performing a single lookup and store
the result in local variable for further use.

For catching missing mandatory statements we take an alternative
approach, where we pre-compute the map of mandatory statements
at construction time and instantiate a HashMap before iterating
over the statements. Everytime we hit a mandatory statement
we remove the corresponding entry, which means that if everything
is okay, the map will be empty.

Finally we remove SpecialCase and its related check, is it is
not used anywhere since BUG-6173 was addressed.

Change-Id: I38582e463a2e027aef7573baeec4923fba254018
Signed-off-by: Robert Varga <rovarga@cisco.com>
7 years agoBUG-7464: Split TrieMap into read-only and read-write 51/49951/12
Robert Varga [Mon, 2 Jan 2017 22:25:14 +0000 (23:25 +0100)]
BUG-7464: Split TrieMap into read-only and read-write

Having inter-twined mutable and immutable implementations is
a maintenance and performance drag, because mutable version
is checking for read-only on each mutation and also everytime
it needs to CAS_ROOT. On the other hand, the immutable
implementation does not need to care about RDCSS, as it never
updates its root -- and can in fact have it non-volatile.

Split the implementation into three classes, with TrieMap
definining the API contract and holding common bits, MutableTrieMap
encapsulating RDCSS and mutation bits and ImmutableTrieMap
having simple guards against mutation.

Change-Id: Icae923d6312901b37252af80b03b0a0912cacaec
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
7 years agoBUG-7464: Enable parallel CNode size computation 50/49950/9
Robert Varga [Mon, 2 Jan 2017 18:35:10 +0000 (19:35 +0100)]
BUG-7464: Enable parallel CNode size computation

Re-enable code which was disabled during the initial port
from Scala, as ThreadLocalRandom is available in Java 7
and newer.

Also make the code a bit smarter by adding special-cases
for empty and single-entry arrays, when it does not make
sense to generate a random number.

Change-Id: Ie7fa98450bf1381a14a7a5e63fd9de6f3b1d17a0
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
7 years agoBUG-7464: clean up CNode.dual() call convention 49/49949/9
Robert Varga [Mon, 2 Jan 2017 17:11:15 +0000 (18:11 +0100)]
BUG-7464: clean up CNode.dual() call convention

Update package-protected entrypoint to not require the second
SNode, as it can be easily instantiated. This makes the callers
a bit less verbose and allows us to adjust the recursive part
as needed.

Change-Id: Ic9b97fe23143b3a5cdab57750958237072dcda1e
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
7 years agoBUG-7464: Split LNodeEntries implementations 47/49947/8
Robert Varga [Mon, 2 Jan 2017 15:04:49 +0000 (16:04 +0100)]
BUG-7464: Split LNodeEntries implementations

We really have two implementations here, one which
have a single key/value pair and one which has multiple.

Split these into specialized implementations, which allows
us to save 8 bytes for each initial LNode, depending on
runtime environment configuration.

Change-Id: I40c8f6115cb0a98858c5bba51996eba414acc525
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
7 years agoBUG-7464: make LNodeEntry implement Map.Entry 44/49944/12
Robert Varga [Mon, 2 Jan 2017 13:29:57 +0000 (14:29 +0100)]
BUG-7464: make LNodeEntry implement Map.Entry

Since LNodeEntry already contains a key/value mapping, it is
advantageous to make it also implement Map.Entry, simply
because that allows us to skip temporary object instantiation
when iterating over entries.

This could be done via subclassing SimpleImmutableEntry, but
that forces us to implement Serializable, which is not what
we want.

Change-Id: I3b0a2384dfbb9c2ed14dd6c9d66dfe91e883f97a
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
7 years agoBUG-7464: use Verify.verifyNonNull instead of assert 42/49942/9
Robert Varga [Mon, 2 Jan 2017 12:32:56 +0000 (13:32 +0100)]
BUG-7464: use Verify.verifyNonNull instead of assert

Asserts are generally not enabled, a verify is better
in that marks a reference clearly as non-nullable.

Change-Id: Ib9913ebcc08a130004e8760e6a7807e166439786
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
7 years agoBUG-7464: Deduplicate code in INode.rec_insertif() 41/49941/9
Robert Varga [Mon, 2 Jan 2017 12:21:01 +0000 (13:21 +0100)]
BUG-7464: Deduplicate code in INode.rec_insertif()

CPD complains about 11 lines being shared between the no-condition
and absent cases. Move common code into a utility method, thus
removing duplication.

Change-Id: I5b5a22e54383caefc749954094e5294a3873d5bc
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
7 years agoBUG-7464: remove uneeded casts and similar warnings 40/49940/9
Robert Varga [Mon, 2 Jan 2017 10:41:36 +0000 (11:41 +0100)]
BUG-7464: remove uneeded casts and similar warnings

In some places we do not need to cast nodes to their
generic arguments, so eliminate a couple of warnings.

Also remove global TrieMap @SuppressWarnings and add
suppressions as needed.

Change-Id: Ia060097673052ab5ab214704c2980db5052919f8
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
7 years agoBUG-7464: Refactor KVNode 23/49923/12
Robert Varga [Mon, 2 Jan 2017 03:29:09 +0000 (04:29 +0100)]
BUG-7464: Refactor KVNode

KVNode is not really useful, as it acts like a factory method
for turning SNode/TNode into an Map.Entry.

We do not compare those nodes based on identity, hence we can
safely make them implement immutable version of Entry interface.

In order to keep some safety, we retain the interface, renamed
to EntryNode, extending Map.Entry and providing a default
setValue() implementation.

This has the added benefit of not needing object allocation
during iteration.

Change-Id: I27e3049739f4eb97ee76e8462c9ddde3c4b5b17a
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
7 years agoBUG-7464: Optimize LNode operations 22/49922/11
Robert Varga [Mon, 2 Jan 2017 02:30:11 +0000 (03:30 +0100)]
BUG-7464: Optimize LNode operations

Refactor ListMap into LNodeEntr{y,ies} and expose better
operations for node manipulation, since performance-critical
call sites already perform a prior lookup.

Therefore we can issue explicit insert/replace operations
insteads of generic 'add'. Insert operation becomes very fast,
as it does not need to perform any checking at all.

The replace operation does not require equivalence, as it
can use identity comparison on the entry, again improving
performance. Furthermore we can rely on the fact that
a particular entry is present exactly once, hence we can
stop iteration as soon as we find it.

Change-Id: I8c28e3521f1cbc298164b84b51dc300c3f3568a9
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
7 years agoBUG-7464: Make ListMap obey TrieMap equivalence 21/49921/9
Robert Varga [Mon, 2 Jan 2017 00:33:05 +0000 (01:33 +0100)]
BUG-7464: Make ListMap obey TrieMap equivalence

Sifting through ListMap needs to have same equality
as the TrieMap it belongs to. Pass down proper equivalence
in all cases.

Change-Id: I614fbf1ed433d35babbf8b63e7cdee58280e356f
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
7 years agoBUG-7464: Do not recalculate hash on LNode removal 20/49920/8
Robert Varga [Mon, 2 Jan 2017 00:20:44 +0000 (01:20 +0100)]
BUG-7464: Do not recalculate hash on LNode removal

As it turns out all call sites performing a removal operation
actually have a hashcode handy, hence we do not need to
calculate it.

This really makes sense: in order to remove a node, we need to
find it first -- and for that we have to have the key's hash
code.

Change-Id: I4a26b5b4c07da4b38d90492884fa882362a171f1
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
7 years agoBUG-7464: Optimize LNode.removed() 19/49919/8
Robert Varga [Sun, 1 Jan 2017 23:44:45 +0000 (00:44 +0100)]
BUG-7464: Optimize LNode.removed()

Using ListMap.size() is heavy if we have a lot of hash
collisions from a bad key hash function. LNode removal
does not need to know the precise size -- only the fact
that the ListMap is holding a single entry, so it can
compress down to an SNode.

Change-Id: I99ee07e1becde2c3d6830406828f2000c79f345d
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
7 years agoBUG-7464: Encapsupate special objects. 18/49918/8
Robert Varga [Sun, 1 Jan 2017 23:17:28 +0000 (00:17 +0100)]
BUG-7464: Encapsupate special objects.

These really are singletons, hence making them type-safe
as enums makes sense, as it expresses their nature.

Change-Id: I3f1b7f953bcb36ea7d72b594bfedcd4782e6767e
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
7 years agoBUG-7464: cleanup TrieMap retry logic 17/49917/8
Robert Varga [Sun, 1 Jan 2017 22:27:55 +0000 (23:27 +0100)]
BUG-7464: cleanup TrieMap retry logic

We have a couple of while(true) loops, which can we written
concisely using a 'do { ... } while (retry);' pattern.

Also check if the from-serialization codepath does not encounter
a does not observe a concurrent modification.

Change-Id: I7970a3d11fcd6715fb86a3c669d4eb195d10fa26
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
7 years agoBUG-7464: Improve Map contract compliance 16/49916/8
Robert Varga [Sun, 1 Jan 2017 21:07:09 +0000 (22:07 +0100)]
BUG-7464: Improve Map contract compliance

Add explicit precondition guards against null keys and values
and fix iterators not currectly throwing exceptions. Also make
sure entrySet().contains() and remove() operations do not throw,
but return correct results.

Change-Id: I645686112ebb3675b73349d0c3096a3901243522
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
7 years agoBUG-7464: Hide INode.gen field 15/49915/8
Robert Varga [Sun, 1 Jan 2017 19:26:16 +0000 (20:26 +0100)]
BUG-7464: Hide INode.gen field

This field is accessed only from TrieMap when initializing an operation
on a root node. Hide the field by exposing generation-less package-visible
methods, which pass the generation field to INode-private methods.

Change-Id: Ibf281c5975fe96d2cd2b1d58e93203a806932b57
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
7 years agoBUG-7464: Rework TrieMap serialization 14/49914/8
Robert Varga [Sun, 1 Jan 2017 18:58:43 +0000 (19:58 +0100)]
BUG-7464: Rework TrieMap serialization

Using Externalizable proxy pattern has multiple advantages,
hence use that instead of plain serialization. This gets rid
of reflection-based access to readOnly field and generally
much cleaner.

Change-Id: I471dfe5a65972309b10393a91bc1cf702959a866
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
7 years agoBUG-7464: remove TrieMap.nonReadOnly() 13/49913/8
Robert Varga [Sun, 1 Jan 2017 18:22:24 +0000 (19:22 +0100)]
BUG-7464: remove TrieMap.nonReadOnly()

This is a superfluous utility method, remove it and align
call sites.

Change-Id: I65266640bc74b2548b56a4712534b135bb92bcf0
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
7 years agoBUG-7464: Eliminate {C,I}NodeBase 12/49912/9
Robert Varga [Sun, 1 Jan 2017 17:30:15 +0000 (18:30 +0100)]
BUG-7464: Eliminate {C,I}NodeBase

{C,I}NodeBase are just field holders for their sole subclasses.
This arrangement comes from Scala, where the Base classes are implemented
in Java and the rest of the code is in Scala.

Remove both base classes by inlining the fields into CNode/INode.

Change-Id: I349f1e1eeeb4301a1d6175ca5e16e7127ae1b540
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
7 years agoBUG-7464: fix INode.rec_lookup() return type 11/49911/8
Robert Varga [Sun, 1 Jan 2017 17:14:49 +0000 (18:14 +0100)]
BUG-7464: fix INode.rec_lookup() return type

Undo a blanket check for Optional in TrieMap.lookup(),
which is caused by passing LNode's result back to the caller.

With Optional being used, this can be simplified by
unwrapping the result with orElse(null).

Change-Id: Ic70e65f76e7132db93e28d55141fef992ef00692
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
7 years agoBUG-7464: Migrate to use java.util.Optional 95/49895/12
Robert Varga [Sat, 31 Dec 2016 18:59:37 +0000 (19:59 +0100)]
BUG-7464: Migrate to use java.util.Optional

Standard Java provides better interface than the custom-ported
Option/None/Some. Migrate to use it.

Change-Id: I6f4892d224bc8cbc5c37549cf7a54df86f97f207
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
7 years agoBUG-7464: remove TestHelper 04/49904/9
Robert Varga [Sun, 1 Jan 2017 13:07:14 +0000 (14:07 +0100)]
BUG-7464: remove TestHelper

TestHelper is an unneeded wrapper around Assert's methods,
use them directly as appropriate instead of the constraining
abstraction.

Change-Id: I8648d3dc731100b562c64b657f4e78e8787d9f61
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
7 years agoBUG-7464: cleanup and disable instantiation speed test 03/49903/9
Robert Varga [Sun, 1 Jan 2017 14:25:19 +0000 (15:25 +0100)]
BUG-7464: cleanup and disable instantiation speed test

Remove use of System.out and use a Guava stopwatch. This
test takes some time and is not really useful, hence disable
it.

Change-Id: Ib4b09b8e53e319230178c7898d7a2d14e4e2c1a0
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
7 years agoBUG-7464: Cleanup Triemap 94/49894/12
Robert Varga [Sat, 31 Dec 2016 18:06:20 +0000 (19:06 +0100)]
BUG-7464: Cleanup Triemap

Remove unused methods, make the public contract more lean
and eliminate unneeded else branches.

Change-Id: I79d74b2dd13b912fef493294e7afc01a1fd7c85a
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
7 years agoBUG-7464: Fix StackOverflowError on hash collisions 93/49893/12
Robert Varga [Sat, 31 Dec 2016 16:52:12 +0000 (17:52 +0100)]
BUG-7464: Fix StackOverflowError on hash collisions

If LNodes get saturated due to poor key hash function, the ListMap
chain can grow large. Since ListMap.get() was implemented using recursion
this can easily trigger StackOverflowError. The same problem impacts
ListMap.contains(), which is triggered in the add() path.

Turn recursion into a loop, which provides defence against the error,
while not alleviating the performance impact.

Change-Id: Id04d30b9cb4d75dc4535ff20bd11a16ed96ab0ff
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
7 years agoBUG-7464: Fix original porting damage in conditional operations 91/49891/11
Robert Varga [Sat, 31 Dec 2016 16:30:53 +0000 (17:30 +0100)]
BUG-7464: Fix original porting damage in conditional operations

Scala version of INode returns a correct empty Option
in case an LNode does not contain the expected key, whereas
this implementation happily falls through to a RuntimeException,
this this porting damage, adding an appropriate comment.

Removal of values through Map.remove(Object, Object) was
inconsistent in that the SNode case uses v.equals() whereas
the LNode case uses identity check. This is inconsistent
and runs contrary to the interface specitication, which calls
for using Objects.equals() -- which boils down to v.equals()
just as the SNode case does.

Change-Id: I33dd986e59211aa4c0be3648ae35e2818ebce8ad
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
7 years agoBUG-7464: Use Guava-like Equivalence instead of custom interfaces 90/49890/9
Robert Varga [Sat, 31 Dec 2016 15:48:40 +0000 (16:48 +0100)]
BUG-7464: Use Guava-like Equivalence instead of custom interfaces

Rather than open-coding hash and equal interfaces, unify them
to form an Equivalence class similar to Guava's one. We opt not
to use Guava, because we post-process the object's hash code and
we do not support null keys, hence null checking done by Guava
internally is completely unneeded.

Change-Id: I28ef68d6bed6c07bc8e4ec780988122360825677
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
7 years agoBUG-7446: pull in guava-21 21/49821/3
Robert Varga [Mon, 26 Dec 2016 20:26:30 +0000 (21:26 +0100)]
BUG-7446: pull in guava-21

This is a preparatory patch for pulling in guava-21, so both versions
are available at run-time. Once the switch upstream has been flipped
we will drop guava-18.

Change-Id: I35d52ffc19abcfb0f4090a9132d0f48339f697ea
Signed-off-by: Robert Varga <rovarga@cisco.com>
7 years agoBUG-7464: Make INode.equal() static 89/49889/6
Robert Varga [Sat, 31 Dec 2016 15:30:22 +0000 (16:30 +0100)]
BUG-7464: Make INode.equal() static

The method is not touching any state, we can safely make it
static.

Change-Id: I9d12db025fdc446f793b23b463696a158ec047f1
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
7 years agoBUG-7464: Make ListMap a final implementation 88/49888/6
Robert Varga [Sat, 31 Dec 2016 13:10:55 +0000 (14:10 +0100)]
BUG-7464: Make ListMap a final implementation

We are not using EmptyListMap anywhere, so remove the unused class
which makes the code a lot cleaner, as we can flatten the implementation
hierarchy.

Change-Id: I6ec12a4225e380c9e546515c947389cf68f476b6
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
7 years agoBUG-7464: Cleanup if-else branches in CNode 87/49887/6
Robert Varga [Sat, 31 Dec 2016 12:44:57 +0000 (13:44 +0100)]
BUG-7464: Cleanup if-else branches in CNode

Fixes eclipse warnings and makes the code more readable
by having a more flat structure.

Change-Id: If9241e9f5b0557090785afe375e8b3dccda37390
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
7 years agoBUG-7464: Cleanup INode 86/49886/6
Robert Varga [Sat, 31 Dec 2016 12:38:28 +0000 (13:38 +0100)]
BUG-7464: Cleanup INode

Unwind if-else branches so the code becomes more readable, addressing
eclipse warnings.

Also reduce visibility of methods which are not called from anywere
else.

Change-Id: I5a9ab886394d2dedd3c390cde6bdf70a585f4ef9
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
7 years agoBUG-7464: Remove unused TrieMap.apply() 85/49885/5
Robert Varga [Sat, 31 Dec 2016 12:05:05 +0000 (13:05 +0100)]
BUG-7464: Remove unused TrieMap.apply()

This method is not used anywhere, remove it.

Change-Id: I5ab2311cdf0352b21a7f8832aa8fe414082eb074
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
7 years agoBUG-7464: Eliminate else branches in INode.GCAS_Complete 78/49878/6
Robert Varga [Fri, 30 Dec 2016 15:16:29 +0000 (16:16 +0100)]
BUG-7464: Eliminate else branches in INode.GCAS_Complete

Eclipse warnings of using else branch when the code
in that branch cannot be normally reached. Cleans up
the logic, showing more potential for tail recursion.

Change-Id: Iab48ca01acdf67ec5f80324732718576a8f00611
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
7 years agoBUG-7464: Do not check twice for prev to be null 77/49877/6
Robert Varga [Fri, 30 Dec 2016 15:12:52 +0000 (16:12 +0100)]
BUG-7464: Do not check twice for prev to be null

Since we have performed a null check first and then downgraded
the unneeded instanceof check, we are left with a pure else-branch,
which proves the RuntimeException is not thrown.

Change-Id: I9dd8ba2d20738854a2790891dd6cfe099df91146
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
7 years agoBUG-7464: Reduce instanceof checks to null checks 76/49876/6
Robert Varga [Fri, 30 Dec 2016 15:07:31 +0000 (16:07 +0100)]
BUG-7464: Reduce instanceof checks to null checks

These instanceof checks function as null checks only,
hence they are not needed.

Change-Id: Iaf4df7a2b0c8b0d8d2e9bd46a02523f0693c07c0
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
7 years agoBUG-7464: Refactor Option/None/Some and its callers 75/49875/6
Robert Varga [Fri, 30 Dec 2016 13:54:55 +0000 (14:54 +0100)]
BUG-7464: Refactor Option/None/Some and its callers

Make NONE a proper constant within Option, hide Some's
value field and optimize constant callers.

Change-Id: Ifefd47ed7fb565e51c5adf8db58aa09017bfe3fa
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
7 years agoBUG-7464: Cleanup CNode instantiation 74/49874/6
Robert Varga [Fri, 30 Dec 2016 13:36:36 +0000 (14:36 +0100)]
BUG-7464: Cleanup CNode instantiation

Reorder arguments being passed in so we can use variadic
arguments for nodes. This allows us to make the code more
concise by leaving array allocation up to the compiler.

For root nodes reuse an empty array instance, hosted in
CNode instead of allocating a new one for each new TrieMap.

Change-Id: Ic0574917d5d38c62b94594d1bce27a731c90838c
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
7 years agoBUG-7464: Move INode.newRootNode() 73/49873/6
Robert Varga [Fri, 30 Dec 2016 13:15:00 +0000 (14:15 +0100)]
BUG-7464: Move INode.newRootNode()

This method is called from TrieMap only, hence we can safely
move it there and make it private.

Change-Id: I842c2c473482b0c081fa51a11bc3f703eaefdc6d
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
7 years agoBUG-7464: Hide INodeBase.mainnode 72/49872/6
Robert Varga [Fri, 30 Dec 2016 12:58:11 +0000 (13:58 +0100)]
BUG-7464: Hide INodeBase.mainnode

This field is accessed either as CAS or READ, with writes being
a falso positiive, in that they are performed only at initialization
time.

Refactor access patterns to hide the updater and the field, passing
down explicit initializer from the subclass.

Also remove INodeBase.prev(), as it is not called from anywhere.

Change-Id: I3bfcc7e7a606b3a0622ed04b99abbc67e41eb407
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
7 years agoBUG-7464: Hide LNode's listmap 71/49871/6
Robert Varga [Fri, 30 Dec 2016 12:32:19 +0000 (13:32 +0100)]
BUG-7464: Hide LNode's listmap

The only access to it is to acquire an iterator, hence provide
an Iterable wrapper and make the field final.

Change-Id: Ifff37e80d6275dc0b72b5c3f83ac089052d39b3e
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
7 years agoBUG-7464: Hide CNodeBase.csize 70/49870/6
Robert Varga [Fri, 30 Dec 2016 12:22:41 +0000 (13:22 +0100)]
BUG-7464: Hide CNodeBase.csize

This field should be accessed only through its accessor, hide it,
along with its updater.

Change-Id: I873ac0abc7d94d616e917d9c87317a55b0280747
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
7 years agoBUG-7464: Expose MainNode(prev) constructor 69/49869/6
Robert Varga [Fri, 30 Dec 2016 12:18:07 +0000 (13:18 +0100)]
BUG-7464: Expose MainNode(prev) constructor

FailedNode wants to initialize previous node in its constructor,
hence expose the appropriate overload, preventing another volatile
write.

Change-Id: I1f8889e91a9e7e96173863e60df76d9156e1faa5
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
7 years agoBUG-7464: Hide MainNode.prev field and its updater 68/49868/6
Robert Varga [Fri, 30 Dec 2016 12:07:56 +0000 (13:07 +0100)]
BUG-7464: Hide MainNode.prev field and its updater

This field is only ever read from other classes, hence we can
hide it behind READ_PREV(). The updater is also not accessed
from anywhere else, hence make it private.

Change-Id: I13e2e5a85ef502e7ad12f27d0309cd7a9ec6803a
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
7 years agoBUG-7464: Fix MainNode.cachedSize() 67/49867/6
Robert Varga [Fri, 30 Dec 2016 11:57:01 +0000 (12:57 +0100)]
BUG-7464: Fix MainNode.cachedSize()

These classes are not visible to the outside world, hence should
have package visibility. It should also take TrieMap as an argument,
thus eliminating the need for a cast in CNode's implementation.

Change-Id: I3995385fe8cb41bd0134ee1317c466cc1f2baaa9
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
7 years agoBUG-7464: Remove inner classes 66/49866/7
Robert Varga [Fri, 30 Dec 2016 10:33:03 +0000 (11:33 +0100)]
BUG-7464: Remove inner classes

These classes form the internals of TrieMap, but there is no need
to keep them as inner classes. Move them to their own files, which
allows more precise control over access into their internals.

Change-Id: I3b79a285e186af09a7f0c0e0ece43dc455c40de3
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
7 years agoBUG-7464: Apply copyright headers 65/49865/7
Robert Varga [Fri, 30 Dec 2016 10:30:23 +0000 (11:30 +0100)]
BUG-7464: Apply copyright headers

Source code lacks explicit copyright headers, make sure we mark
all sources as licensed by APL2.

Change-Id: I218a55e3ea7e32a3e9d38ffb869b78523e97d077
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
7 years agoBUG-7464: Reformat source code 64/49864/7
Robert Varga [Fri, 30 Dec 2016 10:18:13 +0000 (11:18 +0100)]
BUG-7464: Reformat source code

This is an automatic reformat, performing the following:
- remove trailing whitespace
- organize imports
- make arguments final
- add explicit braces
- use diamond for instantiation

Change-Id: I08f578bf40b72c0a592f3adf5add4a275c376f3d
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
7 years agoBUG-7464: Eliminate custom Map.Entry implementation 63/49863/7
Robert Varga [Fri, 30 Dec 2016 10:02:07 +0000 (11:02 +0100)]
BUG-7464: Eliminate custom Map.Entry implementation

AbstractMap.SimpleImmutableEntry serves the same purpose,
so use that instead of home-grown class.

Change-Id: Ifdb27bff9b87ef0d208a03b2e2d870c42ef82822
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
7 years agoBUG-7464: Make TestInstantiationSpeed.runIteration() static 62/49862/7
Robert Varga [Fri, 30 Dec 2016 09:55:24 +0000 (10:55 +0100)]
BUG-7464: Make TestInstantiationSpeed.runIteration() static

This method does not reference the object, hence we can
make it static.

Change-Id: Iea371e845a312cc15e30d7a973b1f48100688fe6
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
7 years agoBUG-7464: Update junit import 61/49861/7
Robert Varga [Fri, 30 Dec 2016 09:54:41 +0000 (10:54 +0100)]
BUG-7464: Update junit import

Assert has been moved to org.junit, import from new location.

Change-Id: Id0be53f8c13319897492ea99a90405634fa42ccd
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
7 years agoBUG-7464: Update pom.xml 60/49860/6
Robert Varga [Thu, 29 Dec 2016 12:25:51 +0000 (13:25 +0100)]
BUG-7464: Update pom.xml

Update pom.xml and move source to yangtools-specific
package. Also add triemap as a third-party module, attaching
it to default compilation.

Change-Id: I0554be2c99a6aa42ca1e25bf290693117a5b8920
Signed-off-by: Robert Varga <robert.varga@pantheon.tech>
7 years agoBUG-5222: Optimize use of declared substatements 15/49815/4
Robert Varga [Mon, 26 Dec 2016 16:31:13 +0000 (17:31 +0100)]
BUG-5222: Optimize use of declared substatements

Do not store the return in local variable, as that serves
no real purpose.

Change-Id: Iff1ae8d2d5fe6035c283c559a38fd928637cb3c6
Signed-off-by: Robert Varga <rovarga@cisco.com>
7 years agoRemove StatementIdentifier 12/49812/3
Robert Varga [Mon, 26 Dec 2016 14:05:44 +0000 (15:05 +0100)]
Remove StatementIdentifier

Since we have started identifying children using their declaration
offset, we have no real use for StatementIdentifier. Remove it and
adjust internal users to refer to the raw argument instead.

Change-Id: I7a789935142c8cd63848fb185d6350bfb501e475
Signed-off-by: Robert Varga <rovarga@cisco.com>
7 years agoDo not confuse statement and argument names 18/49818/4
Robert Varga [Mon, 26 Dec 2016 18:28:45 +0000 (19:28 +0100)]
Do not confuse statement and argument names

Our extension handling is still flaky, in that it assumes
that implicit extensions take an argument. As we progress
to make these special-cases handled, the confusion is being
flushed out.

This particular error was found when we made argument name
conditional on whether we actually are seeing an argument
being used in the model.

Change-Id: I4b8a0e3aa133343fc65dca38c1dd9e083113fb00
Signed-off-by: Robert Varga <rovarga@cisco.com>