Changelog History
Page 1
-
v0.4.1 Changes
January 01, 2022๐ Changed
- ๐ Improved generated code formatting.
- โ Removed explicit retention annotation to get rid of kotlin js warnings.
๐ Fixed
- ๐ Fixes conflicting declarations when scoped
@Provides
functions returned the same type with different generic args. - ๐ Fixes default parameter handling with lambda or lazy values.
- ๐ Fixes to kotlin native implementation that should make it more usable across threads. Note: the new memory model limitation is still present, but you can use https://github.com/touchlab/Stately to wrap the access when using the legacy memory model.
-
v0.4.0 Changes
November 12, 2021๐ Changed
- โก๏ธ Updated kotlin to 1.5.31
- โก๏ธ Updated ksp to 1.5.31-1.0.1
- Several improvements to code generation which often means less code is generated.
โ Added
- ๐ Multiple rounds handling: This includes support for using types generated by other ksp processors. As a side effect there is better error reporting for unresolved types.
- ๐ Support for multiplatform/native. Check out the sample project.
Note: components are thread-safe, however you will run into issues actually using them from other threads unless you enable the new memory model.
- โ Added support for default args when injecting. If the type is present in the graph, it'll be injected, otherwise the default will be used.
@Inject class MyClass(val dep: Dep = Dep("default")) @Component abstract ComponentWithDep { abstract val myClass: MyClass @Provides fun dep(): Dep = Dep("injected") } @Component abstract ComponentWithoutDep { abstract val myClass: MyClass } ComponentWithDep::class.create().myClass.dep // Dep("injected") ComponentWithoutDep::class.create().myClass.dep // Dep("default")
-
v0.3.7-RC Changes
October 29, 2021๐ Changed
- โก๏ธ Updated kotlin to 1.6.0-RC
- โก๏ธ Updated ksp to 1.6.0-RC-1.0.1-RC
- Several improvements to code generation which often means less code is generated.
โ Added
- ๐ Multiple rounds handling: This includes support for using types generated by other ksp processors. As a side effect there is better error reporting for unresolved types.
- ๐ Support for multiplatform/native. Check out the sample project.
-
v0.3.6 Changes
July 16, 2021๐ Changed
- โก๏ธ Updated kotlin to 1.5.20
- ๐ Experimental kotlin js support
๐ Fixed
- ๐ Fix generated code for @Inject functions with a receiver
ex:
@Inject fun Foo.bar() = ...
- ๐ Fix not using the typealias for function return types
-
v0.3.5 Changes
June 02, 2021๐ Changed
- โก๏ธ Updated kotlin to 1.5.10
- โก๏ธ Updated ksp to beta01
-
v0.3.4 Changes
May 30, 2021๐ Fixed
- ๐ Fix metata parsing issue with kapt on kotlin 1.5.0
- ๐ Fix declaring function injection in another module in ksp
๐ Changed
- โก๏ธ Updated kotlin to 1.5.0
- โก๏ธ Updated ksp to alpha10
-
v0.3.3 Changes
April 20, 2021โ Added
- ๐ Allow cycles when there is delayed construction
You can now break cycles by using
Lazy
or a function. For example,@Inject class Foo(bar: Bar) @Inject class Bar(foo: Foo)
will fail with a cycle error, but you can fix it by doing
@Inject class Foo(bar: Lazy<Bar>) @Inject class Bar(foo: Foo)
or
@Inject class Foo(bar: () -> Bar) @Inject class Bar(foo: Foo)
This uses
lateinit
under the hood. You will get a runtime exception if you try to use the dependency before construction completes.- Added option
me.tatarka.inject.dumpGraph
to print the dependency graph while building. This can be useful for debugging issues.- ๐ Allow type-alias usage with
@IntoMap
.
- ๐ Allow type-alias usage with
You can now do
typealias Entry = Pair<String, MyValue> @Component { @Provides @IntoMap fun entry1(): Entry = "1" to MyValue(1) @Provides @IntoMap fun entry2(): Entry = "2" to MyValue(2) }
๐ Changed
- Code-gen optimization to reduce code size
- ๐ ksp performance improvements
- Made handling of nullable and platform types consistent on the different backends.
It is now an error to return a platform type from a
@Provides
methods, you must declare the return type explicitly.๐ Fixed
- ๐ Fix using
@Qualifier
on scoped dependencies - ๐ Fix declaring components as an inner class
- ๐ Fix annotating java class constructors with
@Inject
- ๐ Fix
@Inject
on a companion object
-
v0.3.2 Changes
April 05, 2021๐ Changed
- ๐ Updated ksp to 1.4.30-1.0.0-alpha05
-
v0.3.1 Changes
February 25, 2021๐ Changed
- ๐ Updated ksp to 1.4.30-1.0.0-alpha03
- ๐ Minimum supported kotlin version is now 1.4.30
-
v0.3.0 Changes
January 14, 2021๐ Changed
- โก๏ธ Updated ksp to 1.4.20-dev-experimental-20210111
Key changes: - You no longer have to define
resolutionStrategy
in yoursettings.gradle
. - The plugin id has changed fromsymbol-processing
tocom.google.devtools.ksp
.- ๐ Minimum supported kotlin version is now 1.4.20
โ Added
- ๐ Support injecting suspend functions
You can now define
suspend
component and provides methods@Component abstract class MyComponent { abstract val foo: suspend () -> IFoo val providesFoo: suspend () -> IFoo @Provides get() = { Foo() } }
- ๐ Support default args in component constructors
If you define any default args, you will get an overload
create
function that provides default values. Due to processor limitations, you only get a single overload (i.e. you cannot pass defaults from some args but not other). This can be useful for more conveniently defining parent components.@Component abstract class MyComponent(@Component val parent: ParentComponent = ParentComponent()) { ... } val component = MyComponent::class.create()
- ๐ Support annotating constructors with
@Inject
Sometimes you don't want to use the primary constructor to construct an object. You can now annotate a more specific constructor instead.
class MyClass { @Inject constructor(arg: String) // use this one for injection constructor(arg: Int) }
- ๐ Support injecting objects
While you can use an object directly, it may be useful to inject it so that you can switch it to an instance at a later point without updating the consuming code.
@Inject object Foo { ... } @Inject MyClass(dep: Foo) { ... }
๐ Fixed
- Respect component's class visibility
- ๐ Fix generating incorrect code for fun providers