Avg Release Cycle
326 days ago
- Adding method getRootScope to Toothpick and KTP. Thanks to @code-twister for the this contribution!
- Fixing issue #362: Improving IDE autocompletion for Binding API.
- Improving KTP class autocompletion.
- Trigger member injection even when delegates are used. This will allow to use method injection and inject parent dependencies on roots using KTP.
- Fixing issue #360: Member injectors contains and invalid reference to the parent member injector if it contains a generic. Thanks to @zawadz88 for the this contribution!
- Enable field injection with qualifiers for KTP
- Adding toothpick-sample
- TP3 specs can be find at https://github.com/stephanenicolas/toothpick/issues/225
- KTP specs can be found at https://github.com/stephanenicolas/toothpick/issues/316. Thx to @chenthorne and @dpreussler for their contributions to the Kotlin extensions of TP.
- Scope annotations are not backward compatible with version 2. In version 2, scope annotations had 2 meaning: @ActivitySingleton meant both that a class could only be injected in a scope that supported this annotation and that the class would provide singletons of this scope. In TP 3, it is now more fine grained: @ActivityScope means a class can only be injected in a scope that supports this annotation and it can be combined with @Singleton or not to denote that a class produces singletons of this scope or not.
- The scope API is now a fluent API. It is possible to define all scopes and sub scope in the same method chain, and to configure them at the same time. See the new samples. https://github.com/stephanenicolas/toothpick/issues/217 and https://github.com/stephanenicolas/toothpick/issues/218
- Kotlin is now a first class citizen of TP 3. KTP supports both field and constructor injection. Extensions are published to make things even more kotlin friendly. KTP doesn't offer method injections. KTP and TP are compatible. You can migrate classes to Kotlin incrementally in a java app using TP3.
- Support for releasable singletons. TP can release @Releasable annotated singletons under memory pressure to save memory.
- TP (java) supports method injections for methods throwing exceptions https://github.com/stephanenicolas/toothpick/issues/200
- Support for package-protected classes https://github.com/stephanenicolas/toothpick/issues/227
- Extension package for AndroidX life cycle allow to close a scope automatically when a FragmentActivity is closed. See sample.
- Extension package for AndroidX view models allow to inject a view model and get things injected in a view model automatically. See sample.
- The binding API now is absolutely equivalent to the expressivity of the annotations. The 2 are strictly compatible.
- ➕ Add Toothpick.isScopeOpen method to check whether a scope is already open. Thx to terrakok for this.
- 👌 support incremental annotation processing. All processors are now incremental and isolating.
- ✂ remove all registries, TP 2.x doesn't use registries any more. They were actually slower than not using them after we reworked on registries to enable obfuscation. Reflection is now used to load the factories and member injectors, 🐎 this is normal (and all other annotation processor based libs do that too) and there is no impact on performance.
- 👌 support multiple rounds of annotation processing.
- generated classes now use
$$to make TP more compliant with some tools.
- ✂ removed the generate ContextSingleton annotation
- 🔀 smoothie now binds the ClipClipboardManager service. Thx to Cody Henthrone for this. Sorry we were late merging this !
- 👍 smoothie now contains non support and non android x bindings. We have introduced 2 new artifacts: 👍 smoothie-support and smoothie-androidx that respectively support the old legacy support library and the new android X libs).
- ✅ toothpick-testing now only contains core testing classes. New artifacts have been introduced to support junit 4 nd junit 5 (resp. : toothpick-testing-junit4, toothpick-testing-junit5)
- ➕ added a consumer proguard file
- 🛠 Fix issue 146: generate registries in a way that is compatible with obfuscation. Obfuscated apps can now use TP registries. Thx to Pavel Shmakov for this contribution !
- 🛠 Fix issue #283: Registries are not deterministic and it breaks compilation caching (for gradle)
- 🛠 Fix issue #261. Better handling of non supported injected types (like primitives). Thx to Alexey Ershov for the detailed bug report.
- 🛠 Fix issue #258, #256, #253: remove dependency to JSR 250 annotations, fix missing overrides.