From 64fd1d9958ba51fa44df639b29a9688bd092415f Mon Sep 17 00:00:00 2001 From: Andrew Golovashevich Date: Sun, 18 May 2025 16:29:48 +0300 Subject: [PATCH] Additional reflection properties --- .../AccessWhileInitializationException.kt | 26 ++++++-- .../errors/ScopeAlreadyFinishedException.kt | 62 +++++++++++++++++++ .../db/skeleton1/api/module/Module.kt | 24 ++++++- .../api/module/ModuleScopedObject.kt | 6 ++ .../db/skeleton1/api/table/Column.kt | 5 ++ .../db/skeleton1/api/table/Table.kt | 15 +++++ .../skeleton1/api/table/TableScopedObject.kt | 6 ++ .../skeleton1/api/table/TableUpgradeScope.kt | 3 +- 8 files changed, 139 insertions(+), 8 deletions(-) create mode 100644 src/commonMain/kotlin/ru/landgrafhomyak/db/skeleton1/api/errors/ScopeAlreadyFinishedException.kt diff --git a/src/commonMain/kotlin/ru/landgrafhomyak/db/skeleton1/api/errors/AccessWhileInitializationException.kt b/src/commonMain/kotlin/ru/landgrafhomyak/db/skeleton1/api/errors/AccessWhileInitializationException.kt index 9a8ad11..bde5565 100644 --- a/src/commonMain/kotlin/ru/landgrafhomyak/db/skeleton1/api/errors/AccessWhileInitializationException.kt +++ b/src/commonMain/kotlin/ru/landgrafhomyak/db/skeleton1/api/errors/AccessWhileInitializationException.kt @@ -1,41 +1,50 @@ package ru.landgrafhomyak.db.skeleton1.api.errors +import kotlin.jvm.JvmStatic import kotlinx.coroutines.CopyableThrowable import kotlinx.coroutines.ExperimentalCoroutinesApi import ru.landgrafhomyak.db.skeleton1.api.ReflectionApi +import ru.landgrafhomyak.db.skeleton1.api.statement.InputParam +import ru.landgrafhomyak.db.skeleton1.api.statement._Statement @ReflectionApi @OptIn(ExperimentalCoroutinesApi::class) public class AccessWhileInitializationException : IllegalStateException, CopyableThrowable { + public val scope: Any public val `object`: Any public val member: Any - public constructor(`object`: Any, member: Any) : super() { + public constructor(scope: Any, `object`: Any, member: Any) : super() { + this.scope = scope this.`object` = `object` this.member = member } - public constructor(`object`: Any, member: Any, message: String) : super(message) { + public constructor(scope: Any, `object`: Any, member: Any, customMessage: String) : super(customMessage) { + this.scope = scope this.`object` = `object` this.member = member } - public constructor(`object`: Any, member: Any, message: String, cause: Throwable) : super(message, cause) { + public constructor(scope: Any, `object`: Any, member: Any, customMessage: String, cause: Throwable) : super(customMessage, cause) { + this.scope = scope this.`object` = `object` this.member = member } - public constructor(`object`: Any, member: Any, cause: Throwable) : super(cause) { + public constructor(scope: Any, `object`: Any, member: Any, cause: Throwable) : super(cause) { + this.scope = scope this.`object` = `object` this.member = member } public constructor( - `object`: Any, member: Any, + scope: Any, `object`: Any, member: Any, message: String?, cause: Throwable?, @Suppress("unused", "LocalVariableName") _marker: Unit ) : super(message, cause) { + this.scope = scope this.`object` = `object` this.member = member } @@ -43,6 +52,7 @@ public class AccessWhileInitializationException : IllegalStateException, Copyabl override fun createCopy(): AccessWhileInitializationException? { return AccessWhileInitializationException( + scope = this.scope, `object` = this.`object`, member = this.member, message = this.message, @@ -50,4 +60,10 @@ public class AccessWhileInitializationException : IllegalStateException, Copyabl _marker = Unit ) } + + public companion object { + @JvmStatic + public fun formatMessage(scope: Any, `object`: Any, member: Any): String = + "Attempt to access $member of $`object` before it's producer scope $scope not finished" + } } \ No newline at end of file diff --git a/src/commonMain/kotlin/ru/landgrafhomyak/db/skeleton1/api/errors/ScopeAlreadyFinishedException.kt b/src/commonMain/kotlin/ru/landgrafhomyak/db/skeleton1/api/errors/ScopeAlreadyFinishedException.kt new file mode 100644 index 0000000..5967784 --- /dev/null +++ b/src/commonMain/kotlin/ru/landgrafhomyak/db/skeleton1/api/errors/ScopeAlreadyFinishedException.kt @@ -0,0 +1,62 @@ +package ru.landgrafhomyak.db.skeleton1.api.errors + +import kotlin.jvm.JvmStatic +import kotlinx.coroutines.CopyableThrowable +import kotlinx.coroutines.ExperimentalCoroutinesApi +import ru.landgrafhomyak.db.skeleton1.api.ReflectionApi +import ru.landgrafhomyak.db.skeleton1.api.statement.InputParam +import ru.landgrafhomyak.db.skeleton1.api.statement._Statement + +@ReflectionApi +@OptIn(ExperimentalCoroutinesApi::class) +public class ScopeAlreadyFinishedException : IllegalStateException, CopyableThrowable { + public val scope: Any + public val member: Any + + public constructor(scope: Any, member: Any) : super() { + this.scope = scope + this.member = member + } + + public constructor(scope: Any, member: Any, customMessage: String) : super(customMessage) { + this.scope = scope + this.member = member + } + + public constructor(scope: Any, member: Any, customMessage: String, cause: Throwable) : super(customMessage, cause) { + this.scope = scope + this.member = member + } + + public constructor(scope: Any, member: Any, cause: Throwable) : super(cause) { + this.scope = scope + this.member = member + } + + public constructor( + scope: Any, member: Any, + message: String?, + cause: Throwable?, + @Suppress("unused", "LocalVariableName") _marker: Unit + ) : super(message, cause) { + this.scope = scope + this.member = member + } + + + override fun createCopy(): ScopeAlreadyFinishedException? { + return ScopeAlreadyFinishedException( + scope = this.scope, + member = this.member, + message = this.message, + cause = this.cause, + _marker = Unit + ) + } + + public companion object { + @JvmStatic + public fun formatMessage(scope: Any, member: Any): String = + "Attempt to access $member of $scope after it was closed" + } +} \ No newline at end of file diff --git a/src/commonMain/kotlin/ru/landgrafhomyak/db/skeleton1/api/module/Module.kt b/src/commonMain/kotlin/ru/landgrafhomyak/db/skeleton1/api/module/Module.kt index 3fe9162..aa1ac98 100644 --- a/src/commonMain/kotlin/ru/landgrafhomyak/db/skeleton1/api/module/Module.kt +++ b/src/commonMain/kotlin/ru/landgrafhomyak/db/skeleton1/api/module/Module.kt @@ -35,8 +35,28 @@ public interface Module { @ReflectionApi @Suppress("INAPPLICABLE_JVM_NAME") - @get:JvmName("getMemberModules") - public val memberModules: Collection> + @get:JvmName("getMemberSubmodules") + public val memberSubmodules: Collection> + + @ReflectionApi + @Suppress("INAPPLICABLE_JVM_NAME") + @get:JvmName("getMemberTablesWhileUpgrade") + public val memberTablesWhileUpgrade: Collection> + + @ReflectionApi + @Suppress("INAPPLICABLE_JVM_NAME") + @get:JvmName("getMemberObjectsWhileUpgrade") + public val memberObjectsWhileUpgrade: Collection> + + @ReflectionApi + @Suppress("INAPPLICABLE_JVM_NAME") + @get:JvmName("getMemberSubmodulesWhileUpgrade") + public val memberSubmodulesWhileUpgrade: Collection> + + @ReflectionApi + @Suppress("INAPPLICABLE_JVM_NAME") + @get:JvmName("willBeDeletedAfterUpgrade") + public val willBeDeletedAfterUpgrade: Boolean public interface Constructor { @Suppress("INAPPLICABLE_JVM_NAME") diff --git a/src/commonMain/kotlin/ru/landgrafhomyak/db/skeleton1/api/module/ModuleScopedObject.kt b/src/commonMain/kotlin/ru/landgrafhomyak/db/skeleton1/api/module/ModuleScopedObject.kt index 3a19eb3..a085977 100644 --- a/src/commonMain/kotlin/ru/landgrafhomyak/db/skeleton1/api/module/ModuleScopedObject.kt +++ b/src/commonMain/kotlin/ru/landgrafhomyak/db/skeleton1/api/module/ModuleScopedObject.kt @@ -1,5 +1,6 @@ package ru.landgrafhomyak.db.skeleton1.api.module +import kotlin.jvm.JvmName import ru.landgrafhomyak.db.skeleton1.api.ReflectionApi import ru.landgrafhomyak.db.skeleton1.api.ObjectOperations @@ -17,4 +18,9 @@ public interface ModuleScopedObject { @ReflectionApi public val meta: ObjectOperations.ImplementationsProvider + + @ReflectionApi + @Suppress("INAPPLICABLE_JVM_NAME") + @get:JvmName("willBeDeletedAfterUpgrade") + public val willBeDeletedAfterUpgrade: Boolean } \ No newline at end of file diff --git a/src/commonMain/kotlin/ru/landgrafhomyak/db/skeleton1/api/table/Column.kt b/src/commonMain/kotlin/ru/landgrafhomyak/db/skeleton1/api/table/Column.kt index 09a0f55..6d57404 100644 --- a/src/commonMain/kotlin/ru/landgrafhomyak/db/skeleton1/api/table/Column.kt +++ b/src/commonMain/kotlin/ru/landgrafhomyak/db/skeleton1/api/table/Column.kt @@ -18,4 +18,9 @@ public interface Column { @Suppress("INAPPLICABLE_JVM_NAME") @get:JvmName("getTable") public val table: Table + + @ReflectionApi + @Suppress("INAPPLICABLE_JVM_NAME") + @get:JvmName("willBeDeletedAfterUpgrade") + public val willBeDeletedAfterUpgrade: Boolean } \ No newline at end of file diff --git a/src/commonMain/kotlin/ru/landgrafhomyak/db/skeleton1/api/table/Table.kt b/src/commonMain/kotlin/ru/landgrafhomyak/db/skeleton1/api/table/Table.kt index c94025f..77a524d 100644 --- a/src/commonMain/kotlin/ru/landgrafhomyak/db/skeleton1/api/table/Table.kt +++ b/src/commonMain/kotlin/ru/landgrafhomyak/db/skeleton1/api/table/Table.kt @@ -47,6 +47,21 @@ public interface Table { @get:JvmName("getMemberObjects") public val memberObjects: Collection> + @ReflectionApi + @Suppress("INAPPLICABLE_JVM_NAME") + @get:JvmName("getMemberColumnsWhileUpgrade") + public val memberColumnsWhileUpgrade: Collection> + + @ReflectionApi + @Suppress("INAPPLICABLE_JVM_NAME") + @get:JvmName("getMemberObjectsWhileUpgrade") + public val memberObjectsWhileUpgrade: Collection> + + @ReflectionApi + @Suppress("INAPPLICABLE_JVM_NAME") + @get:JvmName("willBeDeletedAfterUpgrade") + public val willBeDeletedAfterUpgrade: Boolean + public interface Constructor { public fun createTable(context: TableConstructorScope): tUE } diff --git a/src/commonMain/kotlin/ru/landgrafhomyak/db/skeleton1/api/table/TableScopedObject.kt b/src/commonMain/kotlin/ru/landgrafhomyak/db/skeleton1/api/table/TableScopedObject.kt index cafa595..8c4c13b 100644 --- a/src/commonMain/kotlin/ru/landgrafhomyak/db/skeleton1/api/table/TableScopedObject.kt +++ b/src/commonMain/kotlin/ru/landgrafhomyak/db/skeleton1/api/table/TableScopedObject.kt @@ -1,5 +1,6 @@ package ru.landgrafhomyak.db.skeleton1.api.table +import kotlin.jvm.JvmName import ru.landgrafhomyak.db.skeleton1.api.ReflectionApi import ru.landgrafhomyak.db.skeleton1.api.ObjectOperations @@ -14,4 +15,9 @@ public interface TableScopedObject { @ReflectionApi public val meta: ObjectOperations.ImplementationsProvider + + @ReflectionApi + @Suppress("INAPPLICABLE_JVM_NAME") + @get:JvmName("willBeDeletedAfterUpgrade") + public val willBeDeletedAfterUpgrade: Boolean } \ No newline at end of file diff --git a/src/commonMain/kotlin/ru/landgrafhomyak/db/skeleton1/api/table/TableUpgradeScope.kt b/src/commonMain/kotlin/ru/landgrafhomyak/db/skeleton1/api/table/TableUpgradeScope.kt index 759a577..85d0524 100644 --- a/src/commonMain/kotlin/ru/landgrafhomyak/db/skeleton1/api/table/TableUpgradeScope.kt +++ b/src/commonMain/kotlin/ru/landgrafhomyak/db/skeleton1/api/table/TableUpgradeScope.kt @@ -13,7 +13,8 @@ public interface TableUpgradeScope : TableCons public fun keepTableScopedObject(obj: TableScopedObject): TableScopedObject public fun renameTableScopedObject(obj: TableScopedObject, newName: String): TableScopedObject - public fun deleteTableScopedObject(obj: TableScopedObject): TableScopedObject + public fun deleteTableScopedObject(obj: TableScopedObject) + public fun deleteTableScopedObjectAfterUpgrade(obj: TableScopedObject): TableScopedObject public fun addAlterStatementAfterUpgrade(stmt: _Statement.Void2Void<*, IK>) public fun addAlterStatementAfterUpgrade(stmt: RawStatement.Void2Void.ImplementationsProvider<*>)