Added SealableList which provides a List (or List wrapper) that will make it read-only (sealed) or read-write (unsealed), controllable via a Supplier<Boolean>. This moves the immutability control outside the list and ensures that all views on the List respect the sealed-ness. One master supplier can control the immutability of many collections.
Added SealableSet similar to SealableList but with Set nature.
Added SealableMap similar to SealableList but with Map nature.
Added SealableNavigableSet similar to SealableList but with NavigableSet nature.
Added SealableNavigableMap similar to SealableList but with NavigableMap nature.
Updated ConcurrentList to support wrapping any List and making it thread-safe, including all view APIs: iterator(),listIterator(),listIterator(index). The no-arg constructor creates a ConcurrentList ready-to-go. The constructor that takes a List parameter constructor wraps the passed in list and makes it thread-safe.
Renamed ConcurrentHashSet to ConcurrentSet.
2.8.0
Added ClassUtilities.doesOneWrapTheOther() API so that it is easy to test if one class is wrapping the other.
Added StringBuilder and StringBuffer to Strings to the Converter. Eliminates special cases for .toString() calls where generalized convert(src, type) is being used.
2.7.0
Added ConcurrentList, which implements a thread-safe List. Provides all API support except for listIterator(), however, it implements iterator() which returns an iterator to a snapshot copy of the List.
Added ConcurrentHashSet, a true Set which is a bit easier to use than ConcurrentSkipListSet, which as a NavigableSet and SortedSet, requires each element to be Comparable.
Performance improvement: On LRUCache, removed unnecessary Collections.SynchronizedMap surrounding the internal LinkedHashMap as the concurrent protection offered by ReentrantReadWriteLock is all that is needed.
2.6.0
Performance improvement: Converter instance creation is faster due to the code no longer copying the static default table. Overrides are kept in separate variable.
New capability added: MathUtilities.parseToMinimalNumericType() which will parse a String number into a Long, BigInteger, Double, or BigDecimal, choosing the "smallest" datatype to represent the number without loss of precision.
New conversions added to convert from Map to StringBuilder and StringBuffer.
2.5.0
pom.xml file updated to support both OSGi Bundle and JPMS Modules.
module-info.class resides in the root of the .jar but it is not referenced.
2.4.9
Updated to allow the project to be compiled by versions of JDK > 1.8 yet still generate class file format 52 .class files so that they can be executed on JDK 1.8+ and up.
Incorporated @AxataDarji GraphComparator changes that reduce cyclomatic code complexity (refactored to smaller methods)
2.4.8
Performance improvement: DeepEquals.deepHashCode() - now using IdentityHashMap() for cycle (visited) detection.
Modernization: UniqueIdGenerator - updated to use Lock.lock() and Lock.unlock() instead of synchronized keyword.
Using json-io 4.14.1 for cloning object in "test" scope, eliminates cycle depedencies when building both json-io and java-util.
2.4.7
All 687 conversions supported are now 100% cross-product tested. Converter test suite is complete.
2.4.6
All 686 conversions supported are now 100% cross-product tested. There will be more exception tests coming.
2.4.5
Added ReflectionUtils.getDeclaredFields() which gets fields from a Class, including an Enum, and special handles enum so that system fields are not returned.
2.4.4
Converter - Enum test added. 683 combinations.
2.4.3
DateUtilities - now supports timezone offset with seconds component (rarer than seeing a bald eagle in your backyard).
Converter - many more tests added...682 combinations.
2.4.2
Fixed compatibility issues with StringUtilities. Method parameters changed from String to CharSequence broke backward compatibility. Linked jars are bound to method signature at compile time, not at runtime. Added both methods where needed. Removed methods with "Not" in the name.
Fixed compatibility issue with FastByteArrayOutputStream. The .getBuffer() API was removed in favor of toByteArray(). Now both methods exist, leaving getBuffer() for backward compatibility.
The Converter "Everything" test updated to track which pairs are tested (fowarded or reverse) and then outputs in order what tests combinations are left to write.
2.4.1
Converter has had significant expansion in the types that it can convert between, about 670 combinations. In addition, you can add your own conversions to it as well. Call the Converter.getSupportedConversions() to see all the combinations supported. Also, you can use Converter instance-based now, allowing it to have different conversion tables if needed.
DateUtilities has had performance improvements (> 35%), and adds a new .parseDate() API that allows it to return a ZonedDateTime. See the updated Javadoc on the class for a complete description of all the formats it supports. Normally, you do not need to use this class directly, as you can use Converter to convert between Dates, Calendars, and the new Temporal classes like ZonedDateTime,Duration,Instance, as well as Strings.
FastByteArrayOutputStream updated to match ByteArrayOutputStream API. This means that .getBuffer() is .toByteArray() and .clear() is now .reset().
Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.
Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
- `@dependabot show ignore conditions` will show all of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
Bumps com.cedarsoftware:java-util from 1.68.0 to 2.9.0.
Changelog
Sourced from com.cedarsoftware:java-util's changelog.
... (truncated)
Commits
f6892d8
updated commentsf175031
- Added the SealableXXX collection classes.8fb9827
updated readmebc1d644
- Added the SealableXXX collection classes.f3ec068
- New Sealable Collections added.d446ddb
updated readme5c551ff
added test for StringBuilder/StringBuffer to String50d5f85
- Added new Converter conversions for StringBuffer to StringBuilder to String.9467d14
Added ConcurrentHashSet and CurrentHahsList, appropriate tests, and update ve...6b33d32
Updated to 2.6.0 for pom, readme, and changelogDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting
@dependabot rebase
.Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot show