* Revert to using guava port cache by depending on jar
* Apply suggestions from code review
* revert code to old cache
* clean up build.gradle
* manually remove cache4 entries that are regenerated locally because of some dirty cache?
* bump gradle
* rerun tasks
* try to deflake rx tests
* cache builder tests
* api dump
* bump ktlint to work with 1.4 features
* formatting
Co-authored-by: Mike Nakhimovich <digitalbuddha@users.noreply.github.com>
It currently breaks consumers compiling with Kotlin
1.4-M3 (not sure why).
Added some TODOs to revert back to using Duration.INFINITE
once Store is compiled with Kotlin 1.4
Closes#188
* Remove unnecessary Collections.unmodifiableMap since we already return a defensive copy. Also write test to verify we returns a copy
* Update cache/src/test/kotlin/com/dropbox/android/external/cache4/DefaultCacheTest.kt
Co-authored-by: Mike Nakhimovich <digitalbuddha@users.noreply.github.com>
* Migrate cache library to use kotlin.time APIs
* Fix docs and inline durations in tests
* Migrate cache library to use kotlin.time APIs
* Only require ExperimentalTime when setting cache expiration
* Set ExperimentalTime on RealStore to use it on MemoryPolicy
* Set ExperimentalTime on Cache interface and not on functions
* Avoid ExperimentalTime annotation in filesystem module
* Remove unneeded ExpirationTime annotation
* Remove unneeded ExpirationTime annotation
* [WIP] Add code coverage
* Get multi-module and merging working
* Add CodeCov
* Update location of report.xml
* Check instead of build depends on Jacoco
* Do not merge coverage
* Ignore tests
* update comment
* Fix a ConcurrentModificationException by synchronizing the accessQueue (MutableSet) before iterating over it.
* Add test to verify ConcurrentModificationException is not thrown when performing evictions concurrently.
* Fix typos.
* Gradle 6.1, AGP 4.0.0-alpha09, lifecycle 2.2.0.
* Add experimental invalidateAll() support and @ExperimentalStoreAPI annotation.
* Update sample with deleteAll function.
* Update README.md with deleteAll function.
* Add a section to README.md on clearing store entries.
* Rewrite tests without mocking. Move test utils / helpers to a single package.
* Code formatting and cleanups.
* Use StoreResponse.Data instead of DataWithOrigin in ClearAllStoreTest and ClearStoreByKeyTest.
* Simplified samples. Refactor tests.
* Gradle 6.1.1.
* Rewrite cache module in Kotlin.
* Migrate RealStore to use new cache.
* Migrate FileSystemImpl to use new cache.
* Migrate StoreTest to new cache.
* Remove Guava Cache.
* Migrate remaining Java file to Kotlin.
* Fix ktlint error.
* Fix package.
* Add support for CacheLoader.
* Remove unnecessary mockito-inline.
* Remove volatile keyword from CacheEntry fields and add docs re. cache entry reuse and thread-safty assumption.
* - Refactor CacheBuilder.
- Update docs.
- Update Key, Value, Input, Output generic types to be bound by Any.
- Replace spy with TestLoader for asserting invocation.
* Support key-based synchronization for get(key: Key, loader: () -> Value): Value.
* Document loader exception propagation.
* Small clean ups.
* Make CacheEntry's Key and Value bound to Any, move CacheEntry to RealCache.kt as a private class.
* Add reference counting key-based synchronization for cache loader.
* Improve KeyedSynchronizer and docs.
* Refactor tests and add a missing test case to reach 100% coverage.
* Add memory barrier after updating access time in cache entry.
* Only process access queue if expiresAfterAccess == true.
* Support configurable concurrency level.
* Increase delay for concurrency test.
* Explicitly set concurrency level for concurrency tests.
* Only add memory barrier after recordRead if expiresAfterAccess is enabled.
* Fix a potential memory leak caused by thread preemption.
* Allow retries (3 times) for concurrency tests.
* Move performMaintenance function to bottom of the class.
* Fix typos, rename performMaintenance() to cleanUpDeadEntries(), improve docs.
* Fix more typos.
* Only remove entries in map but not in queue.
* Replace memory barrier with @Volatile fields in CacheEntry.
* Fix deadlock while iterating sets.
* Remove stale cache/README.md, remove commented out java file.
* Add kotlin plugin to cache module
* Remove custom accessors in StoreDefaults as default values are effectively constant.
* Update JUnit to 4.13 RC2 to enable asserting specific error message on expected exception.
* Remove custom accessors in MemoryPolicy as all values are calculated from constants.
* Remove checkstyle and pmd as the codebase will be 100% Kotlin.
* Fix IDE warning in build.gradle by removing static imports.
* Remove unused guava dependencies.
* Improve StoreDefaults docs.
* Gradle Wrapper (all) 3.3 -> 4.1
* Gradle plugin for Android 2.3.2 -> 3.0.0-beta2
This requires upgrading the errorprone plugin to 0.0.11. Also, see
https://stackoverflow.com/questions/44196672/aapt2-compile-failed-invalid-dimen-on-android-3-0-canary-1
gradle plugin
* SDK Build Tools 25.0.2 -> 26.0.1
* Remove retrolambda
* Log error from subscription on PersistingStoreActivity for consistency
* Update dependency inclusion directives to those of the 3.0 plugin
Also, jsr305 and javax usages have been taken from compile to compileOnly
since they are not required beyond.
* Add dependencies that previously were resolved through leaked ones from other artifacts
Now dependency leaks are eliminated thanks to 'implementation' from the 3.0 version of the gradle plugin.
* Remove coupling between middlewares and cache
* Replace mockito-all by mockito-core
mockito-all causes problems related to hamcrest when used with JUnit. See
https://tedvinke.wordpress.com/2013/12/17/mixing-junit-hamcrest-and-mockito-explaining-nosuchmethoderror/
* Remove unused dependency.
* Build Tools 26.0.1 on Travis
* Suppress PMD.AvoidThrowingNullPointerException for the time being
* Avoid PMD synthetic accessor warning
* Update README.md
* Update README.md
* Update README.md (#175)
* Update README.md
* Close source after write to filesystem
* Refactor FSFileTest to rx2 package
* remove null check on source and annotate arg with NonNull
* Standardize store.stream() to only emit new items
* Standardize store.stream() to only emit new items
* Remove unneeded call to asObservable()
* Update README.md
* Update README.md
* Fixed PMD violation God Class for RealInternalStore (#179)
* Update README.md
* Fixing dependency importation typo (#186)
* Mike/test (#195)
* new test
* Refactor NoNetworkTest to rx2 package
* Typo fixed (#202)
* Typo fixed
* Simplified by removing generics
* Update build.gradle (#193)
rename app id for sample app
* Add a missing Source.close() call (#200)
* Add Retrolambda plugin on the rest modules (#205)
* Add Retrolambda plugin on the rest modules and modify sample app for new config
* Suppress PMD violation on equals()
* Add Raw to BufferedSource transformer (#198)
* expireAfterAccess added to MemoryPolicy (#199)
* Add test coverage for MemoryPolicyBuilder (#210)
* Add test coverage for MemoryPolicyBuilder
* Checkstyle new line at EOF
* Fix PMD
* Refactor MemoryPolicyBuilderTest to rx2 package
* Deprecate setExpireAfter and getExpireAfter (#211)
* Fixed a race condition that would appear when the read was called but not immediately subscribed to. Defer the whole file check till subscription.
* Diamonds
* General cleanup, missing nullity annotations, missing override annotations
* More key naming conventions
* Dependency update
* More key naming conventions
* Parser, not func
* Name outer key different so cache can be evicted correctly
* Another missing override