Here's another attempt to enable Gradle dependency verification. I've
tried to do this a couple of times before, but always ran into issues.
With a helper script borrowed from a different project, hopefully this
will finally work reliably.
Every time we update Gradle or a dependency, the script I mentioned
needs to be run to update the list of checksums. The script runs the
build, the tests and the instrumented tests. This is necessary
because apparently Gradle is not able to discover all dependencies
without actually running the build tasks.
It's a little bit annoying that this Gradle feature is so half-baked
that we need a helper script to make things work, but I think it's worth
it.
This patch introduces the new ``UUIDMap`` type, reducing code duplication and
making UUID lookups faster. We currently already use UUIDs as the identifier for
the ``DatabaseEntry`` and ``Slot`` types, but the way lookups by UUID work are
kind of ugly, as we simply iterate over the list until we find a match. As we're
probably going to have more types like this soon (groups and icons, for
example), I figured it'd be good to abstract this away into a separate type and
make it a map instead of a list.
The only thing that has gotten slower is the ``swap`` method. The internal
``LinkedHashMap`` retains insertion order with a linked list, but does not know
about the position of the values, so we basically have to copy the entire map to
simply swap two values. I don't think it's too big of a deal, because swap
operations still take less than a millisecond even with large vaults, but
suggestions for improving this are welcome.
I had to update gradle and JUnit to be able to use the new ``assertThrows``
assertion method, so this patch includes that as well.