mirror of
https://github.com/InsanusMokrassar/MicroUtils.git
synced 2025-09-07 09:09:26 +00:00
1
.gitignore
vendored
1
.gitignore
vendored
@@ -1,4 +1,5 @@
|
|||||||
.idea
|
.idea
|
||||||
|
.vscode
|
||||||
.kotlin
|
.kotlin
|
||||||
out/*
|
out/*
|
||||||
*.iml
|
*.iml
|
||||||
|
14
CHANGELOG.md
14
CHANGELOG.md
@@ -1,5 +1,19 @@
|
|||||||
# Changelog
|
# Changelog
|
||||||
|
|
||||||
|
## 0.26.0
|
||||||
|
|
||||||
|
**WARNING!!! SINCE THIS VERSION IF YOU WANT TO USE SOME OF KSP MODULES, SET `ksp.useKSP2=false` IN YOUR `gradle.properties`** (see [gh issue 2491](https://github.com/google/ksp/issues/2491))
|
||||||
|
|
||||||
|
* `Versions`:
|
||||||
|
* `Kotlin`: `2.1.21` -> `2.2.0`
|
||||||
|
* `Serialization`: `1.8.1` -> `1.9.0`
|
||||||
|
* `KSLog`: `1.4.2` -> `1.5.0`
|
||||||
|
* `Ktor`: `3.1.3` -> `3.2.1`
|
||||||
|
* `Koin`: `4.0.4` -> `4.1.0`
|
||||||
|
* `Okio`: `3.12.0` -> `3.15.0`
|
||||||
|
* `KSP`: `2.1.20-1.0.31` -> `2.2.0-2.0.2`
|
||||||
|
* `kotlin-poet`: `1.18.1` -> `2.2.0`
|
||||||
|
|
||||||
## 0.25.8
|
## 0.25.8
|
||||||
|
|
||||||
* `Pagination`:
|
* `Pagination`:
|
||||||
|
@@ -28,7 +28,7 @@ if ((project.hasProperty('SONATYPE_USER') || System.getenv('SONATYPE_USER') != n
|
|||||||
centralPortal {
|
centralPortal {
|
||||||
username = project.hasProperty('SONATYPE_USER') ? project.property('SONATYPE_USER') : System.getenv('SONATYPE_USER')
|
username = project.hasProperty('SONATYPE_USER') ? project.property('SONATYPE_USER') : System.getenv('SONATYPE_USER')
|
||||||
password = project.hasProperty('SONATYPE_PASSWORD') ? project.property('SONATYPE_PASSWORD') : System.getenv('SONATYPE_PASSWORD')
|
password = project.hasProperty('SONATYPE_PASSWORD') ? project.property('SONATYPE_PASSWORD') : System.getenv('SONATYPE_PASSWORD')
|
||||||
verificationTimeout = Duration.ofHours(4)
|
validationTimeout = Duration.ofHours(4)
|
||||||
publishingType = System.getenv('PUBLISHING_TYPE') != "" ? System.getenv('PUBLISHING_TYPE') : "USER_MANAGED"
|
publishingType = System.getenv('PUBLISHING_TYPE') != "" ? System.getenv('PUBLISHING_TYPE') : "USER_MANAGED"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -8,6 +8,9 @@ android.useAndroidX=true
|
|||||||
android.enableJetifier=true
|
android.enableJetifier=true
|
||||||
org.gradle.jvmargs=-Xmx2g -XX:MaxMetaspaceSize=2g
|
org.gradle.jvmargs=-Xmx2g -XX:MaxMetaspaceSize=2g
|
||||||
|
|
||||||
|
# https://github.com/google/ksp/issues/2491
|
||||||
|
ksp.useKSP2=false
|
||||||
|
|
||||||
# JS NPM
|
# JS NPM
|
||||||
|
|
||||||
crypto_js_version=4.1.1
|
crypto_js_version=4.1.1
|
||||||
@@ -15,5 +18,5 @@ crypto_js_version=4.1.1
|
|||||||
# Project data
|
# Project data
|
||||||
|
|
||||||
group=dev.inmo
|
group=dev.inmo
|
||||||
version=0.25.8
|
version=0.26.0
|
||||||
android_code_version=298
|
android_code_version=299
|
||||||
|
@@ -1,12 +1,12 @@
|
|||||||
[versions]
|
[versions]
|
||||||
|
|
||||||
kt = "2.1.21"
|
kt = "2.2.0"
|
||||||
kt-serialization = "1.8.1"
|
kt-serialization = "1.9.0"
|
||||||
kt-coroutines = "1.10.2"
|
kt-coroutines = "1.10.2"
|
||||||
|
|
||||||
kotlinx-browser = "0.3"
|
kotlinx-browser = "0.3"
|
||||||
|
|
||||||
kslog = "1.4.2"
|
kslog = "1.5.0"
|
||||||
|
|
||||||
jb-compose = "1.8.1"
|
jb-compose = "1.8.1"
|
||||||
jb-exposed = "0.61.0"
|
jb-exposed = "0.61.0"
|
||||||
@@ -17,19 +17,19 @@ sqlite = "3.50.1.0"
|
|||||||
korlibs = "5.4.0"
|
korlibs = "5.4.0"
|
||||||
uuid = "0.8.4"
|
uuid = "0.8.4"
|
||||||
|
|
||||||
ktor = "3.1.3"
|
ktor = "3.2.1"
|
||||||
|
|
||||||
gh-release = "2.5.2"
|
gh-release = "2.5.2"
|
||||||
|
|
||||||
koin = "4.0.4"
|
koin = "4.1.0"
|
||||||
|
|
||||||
okio = "3.12.0"
|
okio = "3.15.0"
|
||||||
|
|
||||||
ksp = "2.1.20-1.0.31"
|
ksp = "2.2.0-2.0.2"
|
||||||
kotlin-poet = "1.18.1"
|
kotlin-poet = "2.2.0"
|
||||||
|
|
||||||
versions = "0.51.0"
|
versions = "0.51.0"
|
||||||
nmcp = "0.1.5"
|
nmcp = "1.0.1"
|
||||||
|
|
||||||
android-gradle = "8.9.+"
|
android-gradle = "8.9.+"
|
||||||
dexcount = "4.0.0"
|
dexcount = "4.0.0"
|
||||||
|
@@ -10,6 +10,7 @@ repositories {
|
|||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
api project(":micro_utils.koin")
|
api project(":micro_utils.koin")
|
||||||
|
api project(":micro_utils.ksp.generator")
|
||||||
api libs.kotlin.poet
|
api libs.kotlin.poet
|
||||||
api libs.ksp
|
api libs.ksp
|
||||||
}
|
}
|
||||||
|
@@ -26,6 +26,7 @@ import com.squareup.kotlinpoet.asTypeName
|
|||||||
import com.squareup.kotlinpoet.ksp.toClassName
|
import com.squareup.kotlinpoet.ksp.toClassName
|
||||||
import com.squareup.kotlinpoet.ksp.toTypeName
|
import com.squareup.kotlinpoet.ksp.toTypeName
|
||||||
import com.squareup.kotlinpoet.ksp.writeTo
|
import com.squareup.kotlinpoet.ksp.writeTo
|
||||||
|
import dev.inmo.micro_ksp.generator.safeClassName
|
||||||
import dev.inmo.micro_utils.koin.annotations.GenerateGenericKoinDefinition
|
import dev.inmo.micro_utils.koin.annotations.GenerateGenericKoinDefinition
|
||||||
import dev.inmo.micro_utils.koin.annotations.GenerateKoinDefinition
|
import dev.inmo.micro_utils.koin.annotations.GenerateKoinDefinition
|
||||||
import org.koin.core.Koin
|
import org.koin.core.Koin
|
||||||
@@ -237,15 +238,7 @@ class Processor(
|
|||||||
""".trimIndent()
|
""".trimIndent()
|
||||||
)
|
)
|
||||||
ksFile.getAnnotationsByType(GenerateKoinDefinition::class).forEach {
|
ksFile.getAnnotationsByType(GenerateKoinDefinition::class).forEach {
|
||||||
val type = runCatching {
|
val type = safeClassName { it.type }
|
||||||
it.type.asTypeName()
|
|
||||||
}.getOrElse { e ->
|
|
||||||
if (e is KSTypeNotPresentException) {
|
|
||||||
e.ksType.toClassName()
|
|
||||||
} else {
|
|
||||||
throw e
|
|
||||||
}
|
|
||||||
}
|
|
||||||
val targetType = runCatching {
|
val targetType = runCatching {
|
||||||
type.parameterizedBy(*(it.typeArgs.takeIf { it.isNotEmpty() } ?.map { it.asTypeName() } ?.toTypedArray() ?: return@runCatching type))
|
type.parameterizedBy(*(it.typeArgs.takeIf { it.isNotEmpty() } ?.map { it.asTypeName() } ?.toTypedArray() ?: return@runCatching type))
|
||||||
}.getOrElse { e ->
|
}.getOrElse { e ->
|
||||||
|
@@ -5,7 +5,6 @@ package dev.inmo.micro_utils.koin.generator.test
|
|||||||
|
|
||||||
import kotlin.Any
|
import kotlin.Any
|
||||||
import kotlin.Boolean
|
import kotlin.Boolean
|
||||||
import kotlin.Deprecated
|
|
||||||
import kotlin.String
|
import kotlin.String
|
||||||
import org.koin.core.Koin
|
import org.koin.core.Koin
|
||||||
import org.koin.core.definition.Definition
|
import org.koin.core.definition.Definition
|
||||||
@@ -30,95 +29,59 @@ public val Koin.sampleInfo: Test<String>
|
|||||||
/**
|
/**
|
||||||
* @return Definition by key "sampleInfo" with [parameters]
|
* @return Definition by key "sampleInfo" with [parameters]
|
||||||
*/
|
*/
|
||||||
public inline fun Scope.sampleInfo(noinline parameters: ParametersDefinition): Test<String> =
|
public inline fun Scope.sampleInfo(noinline parameters: ParametersDefinition): Test<String> = get(named("sampleInfo"), parameters)
|
||||||
get(named("sampleInfo"), parameters)
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return Definition by key "sampleInfo" with [parameters]
|
* @return Definition by key "sampleInfo" with [parameters]
|
||||||
*/
|
*/
|
||||||
public inline fun Koin.sampleInfo(noinline parameters: ParametersDefinition): Test<String> =
|
public inline fun Koin.sampleInfo(noinline parameters: ParametersDefinition): Test<String> = get(named("sampleInfo"), parameters)
|
||||||
get(named("sampleInfo"), parameters)
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Will register [definition] with [org.koin.core.module.Module.single] and key "sampleInfo"
|
* Will register [definition] with [org.koin.core.module.Module.single] and key "sampleInfo"
|
||||||
*/
|
*/
|
||||||
@Deprecated(
|
public fun Module.singleSampleInfo(createdAtStart: Boolean = false, definition: Definition<Test<String>>): KoinDefinition<Test<String>> = single(named("sampleInfo"), createdAtStart = createdAtStart, definition = definition)
|
||||||
"This definition is old style and should not be used anymore. Use singleSampleInfo instead",
|
|
||||||
ReplaceWith("singleSampleInfo"),
|
|
||||||
)
|
|
||||||
public fun Module.sampleInfoSingle(createdAtStart: Boolean = false,
|
|
||||||
definition: Definition<Test<String>>): KoinDefinition<Test<String>> =
|
|
||||||
single(named("sampleInfo"), createdAtStart = createdAtStart, definition = definition)
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Will register [definition] with [org.koin.core.module.Module.single] and key "sampleInfo"
|
|
||||||
*/
|
|
||||||
public fun Module.singleSampleInfo(createdAtStart: Boolean = false,
|
|
||||||
definition: Definition<Test<String>>): KoinDefinition<Test<String>> =
|
|
||||||
single(named("sampleInfo"), createdAtStart = createdAtStart, definition = definition)
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Will register [definition] with [org.koin.core.module.Module.factory] and key "sampleInfo"
|
* Will register [definition] with [org.koin.core.module.Module.factory] and key "sampleInfo"
|
||||||
*/
|
*/
|
||||||
@Deprecated(
|
public fun Module.factorySampleInfo(definition: Definition<Test<String>>): KoinDefinition<Test<String>> = factory(named("sampleInfo"), definition = definition)
|
||||||
"This definition is old style and should not be used anymore. Use factorySampleInfo instead",
|
|
||||||
ReplaceWith("factorySampleInfo"),
|
|
||||||
)
|
|
||||||
public fun Module.sampleInfoFactory(definition: Definition<Test<String>>):
|
|
||||||
KoinDefinition<Test<String>> = factory(named("sampleInfo"), definition = definition)
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Will register [definition] with [org.koin.core.module.Module.factory] and key "sampleInfo"
|
|
||||||
*/
|
|
||||||
public fun Module.factorySampleInfo(definition: Definition<Test<String>>):
|
|
||||||
KoinDefinition<Test<String>> = factory(named("sampleInfo"), definition = definition)
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return Definition by key "test" with [parameters]
|
* @return Definition by key "test" with [parameters]
|
||||||
*/
|
*/
|
||||||
public inline fun <reified T : Any> Scope.test(noinline parameters: ParametersDefinition? = null): T
|
public inline fun <reified T : Any> Scope.test(noinline parameters: ParametersDefinition? = null): T = get(named("test"), parameters)
|
||||||
= get(named("test"), parameters)
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return Definition by key "test" with [parameters]
|
* @return Definition by key "test" with [parameters]
|
||||||
*/
|
*/
|
||||||
public inline fun <reified T : Any> Koin.test(noinline parameters: ParametersDefinition? = null): T
|
public inline fun <reified T : Any> Koin.test(noinline parameters: ParametersDefinition? = null): T = get(named("test"), parameters)
|
||||||
= get(named("test"), parameters)
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Will register [definition] with [org.koin.core.module.Module.single] and key "test"
|
* Will register [definition] with [org.koin.core.module.Module.single] and key "test"
|
||||||
*/
|
*/
|
||||||
public inline fun <reified T : Any> Module.singleTest(createdAtStart: Boolean = false, noinline
|
public inline fun <reified T : Any> Module.singleTest(createdAtStart: Boolean = false, noinline definition: Definition<T>): KoinDefinition<T> = single(named("test"), createdAtStart = createdAtStart, definition = definition)
|
||||||
definition: Definition<T>): KoinDefinition<T> = single(named("test"), createdAtStart =
|
|
||||||
createdAtStart, definition = definition)
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Will register [definition] with [org.koin.core.module.Module.factory] and key "test"
|
* Will register [definition] with [org.koin.core.module.Module.factory] and key "test"
|
||||||
*/
|
*/
|
||||||
public inline fun <reified T : Any> Module.factoryTest(noinline definition: Definition<T>):
|
public inline fun <reified T : Any> Module.factoryTest(noinline definition: Definition<T>): KoinDefinition<T> = factory(named("test"), definition = definition)
|
||||||
KoinDefinition<T> = factory(named("test"), definition = definition)
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return Definition by key "testNullable" with [parameters]
|
* @return Definition by key "testNullable" with [parameters]
|
||||||
*/
|
*/
|
||||||
public inline fun <reified T : Any> Scope.testNullable(noinline parameters: ParametersDefinition? =
|
public inline fun <reified T : Any> Scope.testNullable(noinline parameters: ParametersDefinition? = null): T? = getOrNull(named("testNullable"), parameters)
|
||||||
null): T? = getOrNull(named("testNullable"), parameters)
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @return Definition by key "testNullable" with [parameters]
|
* @return Definition by key "testNullable" with [parameters]
|
||||||
*/
|
*/
|
||||||
public inline fun <reified T : Any> Koin.testNullable(noinline parameters: ParametersDefinition? =
|
public inline fun <reified T : Any> Koin.testNullable(noinline parameters: ParametersDefinition? = null): T? = getOrNull(named("testNullable"), parameters)
|
||||||
null): T? = getOrNull(named("testNullable"), parameters)
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Will register [definition] with [org.koin.core.module.Module.single] and key "testNullable"
|
* Will register [definition] with [org.koin.core.module.Module.single] and key "testNullable"
|
||||||
*/
|
*/
|
||||||
public inline fun <reified T : Any> Module.singleTestNullable(createdAtStart: Boolean = false,
|
public inline fun <reified T : Any> Module.singleTestNullable(createdAtStart: Boolean = false, noinline definition: Definition<T>): KoinDefinition<T> = single(named("testNullable"), createdAtStart = createdAtStart, definition = definition)
|
||||||
noinline definition: Definition<T>): KoinDefinition<T> = single(named("testNullable"),
|
|
||||||
createdAtStart = createdAtStart, definition = definition)
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Will register [definition] with [org.koin.core.module.Module.factory] and key "testNullable"
|
* Will register [definition] with [org.koin.core.module.Module.factory] and key "testNullable"
|
||||||
*/
|
*/
|
||||||
public inline fun <reified T : Any> Module.factoryTestNullable(noinline definition: Definition<T>):
|
public inline fun <reified T : Any> Module.factoryTestNullable(noinline definition: Definition<T>): KoinDefinition<T> = factory(named("testNullable"), definition = definition)
|
||||||
KoinDefinition<T> = factory(named("testNullable"), definition = definition)
|
|
||||||
|
23
ksp/generator/src/main/kotlin/KClassTypeName.kt
Normal file
23
ksp/generator/src/main/kotlin/KClassTypeName.kt
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
package dev.inmo.micro_ksp.generator
|
||||||
|
|
||||||
|
import com.google.devtools.ksp.KSTypeNotPresentException
|
||||||
|
import com.google.devtools.ksp.KspExperimental
|
||||||
|
import com.squareup.kotlinpoet.ClassName
|
||||||
|
import com.squareup.kotlinpoet.asTypeName
|
||||||
|
import kotlin.reflect.KClass
|
||||||
|
|
||||||
|
@Suppress("NOTHING_TO_INLINE")
|
||||||
|
@OptIn(KspExperimental::class)
|
||||||
|
inline fun safeClassName(classnameGetter: () -> KClass<*>) = runCatching {
|
||||||
|
classnameGetter().asTypeName()
|
||||||
|
}.getOrElse { e ->
|
||||||
|
if (e is KSTypeNotPresentException) {
|
||||||
|
ClassName(
|
||||||
|
e.ksType.declaration.packageName.asString(),
|
||||||
|
e.ksType.declaration.qualifiedName ?.asString() ?.replaceFirst(e.ksType.declaration.packageName.asString(), "")
|
||||||
|
?: e.ksType.declaration.simpleName.asString()
|
||||||
|
)
|
||||||
|
} else {
|
||||||
|
throw e
|
||||||
|
}
|
||||||
|
}
|
Reference in New Issue
Block a user