diff --git a/CHANGELOG.md b/CHANGELOG.md index 52b8d18a78..337f8512ff 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,7 @@ ## Unreleased * Kotlin: use `@JvmSynthetic` annotation for Kotlin internal elements whenever possible to hide them from Java code. * Kotlin: allow the usage of 'RequiresOptIn' and 'OptIn' annotations for internal API via CLI parameters. This way error is generated when the code, which is not intended to access the internal API uses it. Three new CLI parameters are available: 'androidrequiresoptinannotation', 'androidoptinannotation' and 'androidinternalapiannotationname'. + * Kotlin: for external types usage in Kotlin, use 'internal' keyword for the types, which are generated by Gluecodium as their 'internal' representation. ## 14.0.0 Release date 2025-12-01 diff --git a/functional-tests/functional/android-kotlin/src/test/kotlin/com/here/android/test/ExternalTypesTest.kt b/functional-tests/functional/android-kotlin/src/test/kotlin/com/here/android/test/ExternalTypesTest.kt index 184accd60b..de55e6f8af 100644 --- a/functional-tests/functional/android-kotlin/src/test/kotlin/com/here/android/test/ExternalTypesTest.kt +++ b/functional-tests/functional/android-kotlin/src/test/kotlin/com/here/android/test/ExternalTypesTest.kt @@ -137,6 +137,7 @@ class ExternalTypesTest { assertEquals(77, result) } + @OptIn(com.here.android.lorem.ipsum.FunctionalTestsInternalAPI::class) @org.junit.Test fun createSomeSerializableExternalStruct() { val struct = ExternalMarkedAsSerializable(42) diff --git a/functional-tests/functional/input/src/android-kotlin/kotlin/com/here/android/BooleanConverter.kt b/functional-tests/functional/input/src/android-kotlin/kotlin/com/here/android/BooleanConverter.kt index 45fcaa24ba..e2f01c3535 100644 --- a/functional-tests/functional/input/src/android-kotlin/kotlin/com/here/android/BooleanConverter.kt +++ b/functional-tests/functional/input/src/android-kotlin/kotlin/com/here/android/BooleanConverter.kt @@ -18,14 +18,17 @@ */ package com.here.android.test -object BooleanConverter { - @JvmStatic - fun convertFromInternal(internalBoolean: VeryBoolean) : Boolean? { +import com.here.android.lorem.ipsum.FunctionalTestsInternalAPI + +@FunctionalTestsInternalAPI +internal object BooleanConverter { + @JvmStatic @JvmSynthetic @JvmName("convertFromInternal") + internal fun convertFromInternal(internalBoolean: VeryBoolean) : Boolean? { return internalBoolean.value } - @JvmStatic - fun convertToInternal(systemBoolean: Boolean?) : VeryBoolean { + @JvmStatic @JvmSynthetic @JvmName("convertToInternal") + internal fun convertToInternal(systemBoolean: Boolean?) : VeryBoolean { return VeryBoolean(systemBoolean!!) } } \ No newline at end of file diff --git a/functional-tests/functional/input/src/android-kotlin/kotlin/com/here/android/ColorConverter.kt b/functional-tests/functional/input/src/android-kotlin/kotlin/com/here/android/ColorConverter.kt index a1570809c5..f343ed4033 100644 --- a/functional-tests/functional/input/src/android-kotlin/kotlin/com/here/android/ColorConverter.kt +++ b/functional-tests/functional/input/src/android-kotlin/kotlin/com/here/android/ColorConverter.kt @@ -18,11 +18,13 @@ */ package com.here.android.test +import com.here.android.lorem.ipsum.FunctionalTestsInternalAPI import kotlin.math.round -object ColorConverter { - @JvmStatic - fun convertFromInternal(internalColor: SystemColor): Int? { +@FunctionalTestsInternalAPI +internal object ColorConverter { + @JvmStatic @JvmSynthetic @JvmName("convertFromInternal") + internal fun convertFromInternal(internalColor: SystemColor): Int? { return android.graphics.Color.argb( round(internalColor.alpha * 255).toInt(), round(internalColor.red * 255).toInt(), @@ -31,8 +33,8 @@ object ColorConverter { ) } - @JvmStatic - fun convertToInternal(color: Int?): SystemColor { + @JvmStatic @JvmSynthetic @JvmName("convertToInternal") + internal fun convertToInternal(color: Int?): SystemColor { val systemColor: Int = color!! return SystemColor( android.graphics.Color.red(systemColor) / 255.0f, diff --git a/functional-tests/functional/input/src/android-kotlin/kotlin/com/here/android/ExternalStructMarkedAsSerializableConverter.kt b/functional-tests/functional/input/src/android-kotlin/kotlin/com/here/android/ExternalStructMarkedAsSerializableConverter.kt index 57ddee936e..c6aacdd4c4 100644 --- a/functional-tests/functional/input/src/android-kotlin/kotlin/com/here/android/ExternalStructMarkedAsSerializableConverter.kt +++ b/functional-tests/functional/input/src/android-kotlin/kotlin/com/here/android/ExternalStructMarkedAsSerializableConverter.kt @@ -18,10 +18,13 @@ */ package com.here.android.test -object ExternalStructMarkedAsSerializableConverter { - @JvmStatic - fun convertFromInternal(struct: ExternalMarkedAsSerializable) = AnExternalStruct(struct.field) +import com.here.android.lorem.ipsum.FunctionalTestsInternalAPI - @JvmStatic - fun convertToInternal(s: com.here.android.test.AnExternalStruct) = ExternalMarkedAsSerializable(s.mData) +@FunctionalTestsInternalAPI +internal object ExternalStructMarkedAsSerializableConverter { + @JvmStatic @JvmSynthetic @JvmName("convertFromInternal") + internal fun convertFromInternal(struct: ExternalMarkedAsSerializable) = AnExternalStruct(struct.field) + + @JvmStatic @JvmSynthetic @JvmName("convertToInternal") + internal fun convertToInternal(s: com.here.android.test.AnExternalStruct) = ExternalMarkedAsSerializable(s.mData) } diff --git a/functional-tests/functional/input/src/android-kotlin/kotlin/com/here/android/SeasonConverter.kt b/functional-tests/functional/input/src/android-kotlin/kotlin/com/here/android/SeasonConverter.kt index 8caf9b82f1..89899f185c 100644 --- a/functional-tests/functional/input/src/android-kotlin/kotlin/com/here/android/SeasonConverter.kt +++ b/functional-tests/functional/input/src/android-kotlin/kotlin/com/here/android/SeasonConverter.kt @@ -18,10 +18,13 @@ */ package com.here.android.test +import com.here.android.lorem.ipsum.FunctionalTestsInternalAPI + +@FunctionalTestsInternalAPI object SeasonConverter { - @JvmStatic - fun convertFromInternal(season: Season) = season.name + @JvmStatic @JvmSynthetic @JvmName("convertFromInternal") + internal fun convertFromInternal(season: Season) = season.name - @JvmStatic - fun convertToInternal(seasonString: String) = Season.valueOf(seasonString) + @JvmStatic @JvmSynthetic @JvmName("convertToInternal") + internal fun convertToInternal(seasonString: String) = Season.valueOf(seasonString) } \ No newline at end of file diff --git a/gluecodium/src/main/java/com/here/gluecodium/generator/kotlin/KotlinImportResolver.kt b/gluecodium/src/main/java/com/here/gluecodium/generator/kotlin/KotlinImportResolver.kt index 077d3bdc21..9608e2c566 100644 --- a/gluecodium/src/main/java/com/here/gluecodium/generator/kotlin/KotlinImportResolver.kt +++ b/gluecodium/src/main/java/com/here/gluecodium/generator/kotlin/KotlinImportResolver.kt @@ -89,7 +89,8 @@ internal class KotlinImportResolver( private fun resolveInternalTypeImport(limeType: LimeType): List { return when { - internalApiAnnotation != null && CommonGeneratorPredicates.isInternal(limeType, KOTLIN) -> listOf(internalApiAnnotationImport) + internalApiAnnotation != null && (CommonGeneratorPredicates.isInternal(limeType, KOTLIN) || limeType.external?.kotlin != null) + -> listOf(internalApiAnnotationImport) else -> emptyList() } } diff --git a/gluecodium/src/main/resources/templates/kotlin/KotlinEnumeration.mustache b/gluecodium/src/main/resources/templates/kotlin/KotlinEnumeration.mustache index 58e94daa6f..65f30c9ba9 100644 --- a/gluecodium/src/main/resources/templates/kotlin/KotlinEnumeration.mustache +++ b/gluecodium/src/main/resources/templates/kotlin/KotlinEnumeration.mustache @@ -19,7 +19,11 @@ ! !}} {{>kotlin/KotlinDocComment}}{{>kotlin/KotlinAttributes}} -{{>kotlin/KotlinTypeVisibility}}{{!! +{{#if external.kotlin.converter}}{{!! +}}{{#internalApiAnnotation}}{{#unless this.isEmpty}}@{{this}} +{{/unless}}{{/internalApiAnnotation}}internal {{!! +}}{{/if}}{{!! +}}{{#unless external.kotlin.converter}}{{>kotlin/KotlinTypeVisibility}}{{/unless}}{{!! }}enum class {{resolveName}}(@JvmField {{resolveName "visibility"}}val value: Int) { {{joinPartial uniqueEnumerators "kotlin/KotlinEnumerator" ", "}}{{#if uniqueEnumerators}};{{/if}}{{#if aliasEnumerators}} diff --git a/gluecodium/src/main/resources/templates/kotlin/KotlinFunction.mustache b/gluecodium/src/main/resources/templates/kotlin/KotlinFunction.mustache index 9ea78ad444..c41e8ab9ad 100644 --- a/gluecodium/src/main/resources/templates/kotlin/KotlinFunction.mustache +++ b/gluecodium/src/main/resources/templates/kotlin/KotlinFunction.mustache @@ -24,7 +24,11 @@ }}{{#resolveName "visibility"}}{{#unless this.isEmpty}}@JvmSynthetic {{/unless}}{{/resolveName}}{{!! }}{{#unless override}}{{#unless isInterface}}{{#ifPredicate "isInternal"}}@JvmName("{{resolveName}}") {{/ifPredicate}}{{/unless}}{{/unless}}{{!! }}{{#if override}}override {{/if}}{{!! -}}{{#unless isInterface}}{{resolveName "visibility"}}external {{/unless}}fun {{resolveName}}({{!! +}}{{#unless isInterface}}{{!! +}}{{#unless this.isConstructor}}{{resolveName "visibility"}}{{/unless}}{{!! +}}{{#if this.isConstructor}}private {{/if}}{{!! +}}external {{!! +}}{{/unless}}fun {{resolveName}}({{!! }}{{#parameters}}{{!! }}{{>kotlin/KotlinAttributesInline}}{{resolveName}}: {{resolveName typeRef}}{{#if iter.hasNext}}, {{/if}}{{!! }}{{/parameters}}) : {{!! diff --git a/gluecodium/src/main/resources/templates/kotlin/KotlinNativeBase.mustache b/gluecodium/src/main/resources/templates/kotlin/KotlinNativeBase.mustache index e83cd9d5c6..56a8193398 100644 --- a/gluecodium/src/main/resources/templates/kotlin/KotlinNativeBase.mustache +++ b/gluecodium/src/main/resources/templates/kotlin/KotlinNativeBase.mustache @@ -47,7 +47,7 @@ import java.util.concurrent.ConcurrentHashMap import java.util.logging.Level import java.util.logging.Logger -/* +/** * Internal base class for public non-POD objects to manage the lifecycle of underlying C++ objects. * While the class is public for technical reasons, but should be considered **internal** and not * part of the public API and thus not used directly. @@ -68,7 +68,12 @@ import java.util.logging.Logger public abstract class NativeBase { private val nativeHandle: Long - constructor(nativeHandle: Long, disposer: (Long) -> Unit) { + /** + * @suppress + * @param nativeHandle The native handle + * @param disposer The disposer + */ + protected constructor(nativeHandle: Long, disposer: (Long) -> Unit) { this.nativeHandle = nativeHandle REFERENCES.add(DisposableReference(this, nativeHandle, disposer)) } @@ -91,7 +96,13 @@ public abstract class NativeBase { } companion object { + /** + * Controls whether exceptions related to cleanup of C++ objects tied with Kotlin objects + * are propagated to the user application. + * @suppress + */ @JvmField public var propagateCleanupException: Boolean = false + private val LOGGER = Logger.getLogger(NativeBase::class.java.name) // The set is to keep DisposableReference itself from being garbage-collected. diff --git a/gluecodium/src/main/resources/templates/kotlin/KotlinStruct.mustache b/gluecodium/src/main/resources/templates/kotlin/KotlinStruct.mustache index 9642ef4b0a..16bd4ff7a0 100644 --- a/gluecodium/src/main/resources/templates/kotlin/KotlinStruct.mustache +++ b/gluecodium/src/main/resources/templates/kotlin/KotlinStruct.mustache @@ -19,7 +19,11 @@ ! !}} {{>kotlin/KotlinDocComment}}{{>kotlin/KotlinAttributes}} -{{#unless external.kotlin.converter}}{{>kotlin/KotlinTypeVisibility}}{{/unless}}{{!! +{{#if external.kotlin.converter}}{{!! +}}{{#internalApiAnnotation}}{{#unless this.isEmpty}}@{{this}} +{{/unless}}{{/internalApiAnnotation}}internal {{!! +}}{{/if}}{{!! +}}{{#unless external.kotlin.converter}}{{>kotlin/KotlinTypeVisibility}}{{/unless}}{{!! }}class {{resolveName}}{{!! }}{{#unless external.kotlin.name}}{{!! }}{{#if attributes.serializable}} : Parcelable{{/if}}{{!! diff --git a/gluecodium/src/test/resources/smoke/basic_types/output/android-kotlin/com/example/NativeBase.kt b/gluecodium/src/test/resources/smoke/basic_types/output/android-kotlin/com/example/NativeBase.kt index 8cc4ed6cda..4c48bfc7fe 100644 --- a/gluecodium/src/test/resources/smoke/basic_types/output/android-kotlin/com/example/NativeBase.kt +++ b/gluecodium/src/test/resources/smoke/basic_types/output/android-kotlin/com/example/NativeBase.kt @@ -27,7 +27,7 @@ import java.util.concurrent.ConcurrentHashMap import java.util.logging.Level import java.util.logging.Logger -/* +/** * Internal base class for public non-POD objects to manage the lifecycle of underlying C++ objects. * While the class is public for technical reasons, but should be considered **internal** and not * part of the public API and thus not used directly. @@ -48,7 +48,12 @@ import java.util.logging.Logger public abstract class NativeBase { private val nativeHandle: Long - constructor(nativeHandle: Long, disposer: (Long) -> Unit) { + /** + * @suppress + * @param nativeHandle The native handle + * @param disposer The disposer + */ + protected constructor(nativeHandle: Long, disposer: (Long) -> Unit) { this.nativeHandle = nativeHandle REFERENCES.add(DisposableReference(this, nativeHandle, disposer)) } @@ -71,7 +76,13 @@ public abstract class NativeBase { } companion object { + /** + * Controls whether exceptions related to cleanup of C++ objects tied with Kotlin objects + * are propagated to the user application. + * @suppress + */ @JvmField public var propagateCleanupException: Boolean = false + private val LOGGER = Logger.getLogger(NativeBase::class.java.name) // The set is to keep DisposableReference itself from being garbage-collected. diff --git a/gluecodium/src/test/resources/smoke/comments/output/android-kotlin/com/example/smoke/CtorLinks.kt b/gluecodium/src/test/resources/smoke/comments/output/android-kotlin/com/example/smoke/CtorLinks.kt index e8e440e38f..5496ae77b0 100644 --- a/gluecodium/src/test/resources/smoke/comments/output/android-kotlin/com/example/smoke/CtorLinks.kt +++ b/gluecodium/src/test/resources/smoke/comments/output/android-kotlin/com/example/smoke/CtorLinks.kt @@ -5,6 +5,7 @@ @file:JvmName("CtorLinksExtensions") + package com.example.smoke import com.example.NativeBase @@ -42,10 +43,11 @@ class CtorLinks : NativeBase { companion object { @JvmStatic private external fun disposeNativeHandle(nativeHandle: Long) - @JvmStatic external fun create() : Long + @JvmStatic private external fun create() : Long } } + /** * This class has just one constructor with one argument [com.example.smoke.CtorLinks.SingleCtorWithOneArgument.SingleCtorWithOneArgument]. */ @@ -77,10 +79,11 @@ class CtorLinks : NativeBase { companion object { @JvmStatic private external fun disposeNativeHandle(nativeHandle: Long) - @JvmStatic external fun create(arg: Int) : Long + @JvmStatic private external fun create(arg: Int) : Long } } + /** * This class has just one constructor with two argument [com.example.smoke.CtorLinks.SingleCtorWithTwoArgument.SingleCtorWithTwoArgument]. */ @@ -112,10 +115,11 @@ class CtorLinks : NativeBase { companion object { @JvmStatic private external fun disposeNativeHandle(nativeHandle: Long) - @JvmStatic external fun create(arg: Int, arg2: String) : Long + @JvmStatic private external fun create(arg: Int, arg2: String) : Long } } + class OverloadedCtors : NativeBase { @@ -154,14 +158,15 @@ class CtorLinks : NativeBase { companion object { @JvmStatic private external fun disposeNativeHandle(nativeHandle: Long) - @JvmStatic external fun create(input: String) : Long + @JvmStatic private external fun create(input: String) : Long - @JvmStatic external fun create(input: String, flag: Boolean) : Long + @JvmStatic private external fun create(input: String, flag: Boolean) : Long } } + /** * For internal use only. * @suppress @@ -182,3 +187,4 @@ class CtorLinks : NativeBase { } } + diff --git a/gluecodium/src/test/resources/smoke/constructors/output/android-kotlin/com/example/smoke/ChildConstructors.kt b/gluecodium/src/test/resources/smoke/constructors/output/android-kotlin/com/example/smoke/ChildConstructors.kt index 4d7e06fe45..08ebc2ba61 100644 --- a/gluecodium/src/test/resources/smoke/constructors/output/android-kotlin/com/example/smoke/ChildConstructors.kt +++ b/gluecodium/src/test/resources/smoke/constructors/output/android-kotlin/com/example/smoke/ChildConstructors.kt @@ -5,6 +5,7 @@ @file:JvmName("ChildConstructorsExtensions") + package com.example.smoke @@ -40,9 +41,10 @@ class ChildConstructors : Constructors { companion object { - @JvmStatic external fun createNoArgsChild() : Long + @JvmStatic private external fun createNoArgsChild() : Long - @JvmStatic external fun createCopyFromParent(other: Constructors) : Long + @JvmStatic private external fun createCopyFromParent(other: Constructors) : Long } } + diff --git a/gluecodium/src/test/resources/smoke/constructors/output/android-kotlin/com/example/smoke/Constructors.kt b/gluecodium/src/test/resources/smoke/constructors/output/android-kotlin/com/example/smoke/Constructors.kt index 62d283d3ff..153d4ceb49 100644 --- a/gluecodium/src/test/resources/smoke/constructors/output/android-kotlin/com/example/smoke/Constructors.kt +++ b/gluecodium/src/test/resources/smoke/constructors/output/android-kotlin/com/example/smoke/Constructors.kt @@ -5,6 +5,7 @@ @file:JvmName("ConstructorsExtensions") + package com.example.smoke import com.example.NativeBase @@ -70,17 +71,17 @@ open class Constructors : NativeBase { companion object { @JvmStatic private external fun disposeNativeHandle(nativeHandle: Long) - @JvmStatic external fun create() : Long + @JvmStatic private external fun create() : Long - @JvmStatic external fun create(other: Constructors) : Long + @JvmStatic private external fun create(other: Constructors) : Long - @JvmStatic external fun create(foo: String, bar: Long) : Long + @JvmStatic private external fun create(foo: String, bar: Long) : Long @Throws(Constructors.ConstructorExplodedException::class) - @JvmStatic external fun create(input: String) : Long + @JvmStatic private external fun create(input: String) : Long - @JvmStatic external fun create(input: List<@JvmSuppressWildcards Double>) : Long + @JvmStatic private external fun create(input: List<@JvmSuppressWildcards Double>) : Long - @JvmStatic external fun create(input: Long) : Long + @JvmStatic private external fun create(input: Long) : Long } } diff --git a/gluecodium/src/test/resources/smoke/escaped_names/output/android-kotlin/com/example/package/Class.kt b/gluecodium/src/test/resources/smoke/escaped_names/output/android-kotlin/com/example/package/Class.kt index 8cbfa3e701..9cd07f3aec 100644 --- a/gluecodium/src/test/resources/smoke/escaped_names/output/android-kotlin/com/example/package/Class.kt +++ b/gluecodium/src/test/resources/smoke/escaped_names/output/android-kotlin/com/example/package/Class.kt @@ -5,6 +5,7 @@ @file:JvmName("classExtensions") + package com.example.package import com.example.NativeBase @@ -44,7 +45,7 @@ class Class : NativeBase, Interface { companion object { @JvmStatic private external fun disposeNativeHandle(nativeHandle: Long) - @JvmStatic external fun Constructor() : Long + @JvmStatic private external fun Constructor() : Long } } diff --git a/gluecodium/src/test/resources/smoke/external_types/output/android-kotlin/com/example/kotlinsmoke/ExternalMarkedAsSerializable.kt b/gluecodium/src/test/resources/smoke/external_types/output/android-kotlin/com/example/kotlinsmoke/ExternalMarkedAsSerializable.kt index a304323704..4b50f7f67e 100644 --- a/gluecodium/src/test/resources/smoke/external_types/output/android-kotlin/com/example/kotlinsmoke/ExternalMarkedAsSerializable.kt +++ b/gluecodium/src/test/resources/smoke/external_types/output/android-kotlin/com/example/kotlinsmoke/ExternalMarkedAsSerializable.kt @@ -5,12 +5,13 @@ @file:JvmName("ExternalMarkedAsSerializableExtensions") + package com.example.kotlinsmoke import android.os.Parcel import android.os.Parcelable -class ExternalMarkedAsSerializable { +internal class ExternalMarkedAsSerializable { @JvmField var field: Int diff --git a/gluecodium/src/test/resources/smoke/external_types/output/android-kotlin/com/example/kotlinsmoke/Season.kt b/gluecodium/src/test/resources/smoke/external_types/output/android-kotlin/com/example/kotlinsmoke/Season.kt index f79de9424a..23f8f32cac 100644 --- a/gluecodium/src/test/resources/smoke/external_types/output/android-kotlin/com/example/kotlinsmoke/Season.kt +++ b/gluecodium/src/test/resources/smoke/external_types/output/android-kotlin/com/example/kotlinsmoke/Season.kt @@ -5,10 +5,11 @@ @file:JvmName("SeasonExtensions") + package com.example.kotlinsmoke -enum class Season(@JvmField val value: Int) { +internal enum class Season(@JvmField val value: Int) { WINTER(0), SPRING(1), SUMMER(2), diff --git a/gluecodium/src/test/resources/smoke/external_types/output/android-kotlin/com/example/kotlinsmoke/SystemColor.kt b/gluecodium/src/test/resources/smoke/external_types/output/android-kotlin/com/example/kotlinsmoke/SystemColor.kt index 148b8dff0e..a3cc0d1b34 100644 --- a/gluecodium/src/test/resources/smoke/external_types/output/android-kotlin/com/example/kotlinsmoke/SystemColor.kt +++ b/gluecodium/src/test/resources/smoke/external_types/output/android-kotlin/com/example/kotlinsmoke/SystemColor.kt @@ -5,10 +5,11 @@ @file:JvmName("SystemColorExtensions") + package com.example.kotlinsmoke -class SystemColor { +internal class SystemColor { @JvmField var red: Float @JvmField var green: Float @JvmField var blue: Float diff --git a/gluecodium/src/test/resources/smoke/external_types/output/android-kotlin/com/example/kotlinsmoke/VeryBoolean.kt b/gluecodium/src/test/resources/smoke/external_types/output/android-kotlin/com/example/kotlinsmoke/VeryBoolean.kt index 6df535f67d..b7aec23c2e 100644 --- a/gluecodium/src/test/resources/smoke/external_types/output/android-kotlin/com/example/kotlinsmoke/VeryBoolean.kt +++ b/gluecodium/src/test/resources/smoke/external_types/output/android-kotlin/com/example/kotlinsmoke/VeryBoolean.kt @@ -5,10 +5,11 @@ @file:JvmName("VeryBooleanExtensions") + package com.example.kotlinsmoke -class VeryBoolean { +internal class VeryBoolean { @JvmField var value: Boolean @@ -27,7 +28,7 @@ class VeryBoolean { companion object { - @JvmStatic external fun make(value: Boolean) : VeryBoolean + @JvmStatic private external fun make(value: Boolean) : VeryBoolean } } diff --git a/gluecodium/src/test/resources/smoke/field_constructors/output/android-kotlin/com/example/smoke/FieldCustomConstructorsMix.kt b/gluecodium/src/test/resources/smoke/field_constructors/output/android-kotlin/com/example/smoke/FieldCustomConstructorsMix.kt index 3ca560a898..8da9aa33c4 100644 --- a/gluecodium/src/test/resources/smoke/field_constructors/output/android-kotlin/com/example/smoke/FieldCustomConstructorsMix.kt +++ b/gluecodium/src/test/resources/smoke/field_constructors/output/android-kotlin/com/example/smoke/FieldCustomConstructorsMix.kt @@ -5,6 +5,7 @@ @file:JvmName("FieldCustomConstructorsMixExtensions") + package com.example.smoke @@ -38,7 +39,7 @@ class FieldCustomConstructorsMix { companion object { - @JvmStatic external fun createMe(intValue: Int, dummy: Double) : FieldCustomConstructorsMix + @JvmStatic private external fun createMe(intValue: Int, dummy: Double) : FieldCustomConstructorsMix } } diff --git a/gluecodium/src/test/resources/smoke/listeners/output/android-kotlin/com/example/smoke/Thermometer.kt b/gluecodium/src/test/resources/smoke/listeners/output/android-kotlin/com/example/smoke/Thermometer.kt index 4093d1a874..c470103cac 100644 --- a/gluecodium/src/test/resources/smoke/listeners/output/android-kotlin/com/example/smoke/Thermometer.kt +++ b/gluecodium/src/test/resources/smoke/listeners/output/android-kotlin/com/example/smoke/Thermometer.kt @@ -5,6 +5,7 @@ @file:JvmName("ThermometerExtensions") + package com.example.smoke import com.example.NativeBase @@ -125,15 +126,15 @@ class Thermometer : NativeBase { companion object { @JvmStatic private external fun disposeNativeHandle(nativeHandle: Long) - @JvmStatic external fun makeWithDuration(interval: Duration, observers: List<@JvmSuppressWildcards TemperatureObserver>) : Long + @JvmStatic private external fun makeWithDuration(interval: Duration, observers: List<@JvmSuppressWildcards TemperatureObserver>) : Long - @JvmStatic external fun makeWithoutDuration(observers: List<@JvmSuppressWildcards TemperatureObserver>) : Long + @JvmStatic private external fun makeWithoutDuration(observers: List<@JvmSuppressWildcards TemperatureObserver>) : Long @Throws(Thermometer.NotificationException::class) - @JvmStatic external fun throwingMake(id: Int, observers: List<@JvmSuppressWildcards TemperatureObserver>) : Long + @JvmStatic private external fun throwingMake(id: Int, observers: List<@JvmSuppressWildcards TemperatureObserver>) : Long - @JvmStatic external fun nothrowMake(label: String, niceObservers: List<@JvmSuppressWildcards TemperatureObserver>) : Long + @JvmStatic private external fun nothrowMake(label: String, niceObservers: List<@JvmSuppressWildcards TemperatureObserver>) : Long @Throws(Thermometer.AnotherNotificationException::class) - @JvmStatic external fun anotherThrowingMake(dummy: Boolean, observers: List<@JvmSuppressWildcards TemperatureObserver>) : Long + @JvmStatic private external fun anotherThrowingMake(dummy: Boolean, observers: List<@JvmSuppressWildcards TemperatureObserver>) : Long @JvmStatic external fun notifyObservers(thermometer: Thermometer, someObservers: List<@JvmSuppressWildcards TemperatureObserver>) : Unit diff --git a/gluecodium/src/test/resources/smoke/method_overloads/output/android-kotlin/com/example/smoke/SpecialNames.kt b/gluecodium/src/test/resources/smoke/method_overloads/output/android-kotlin/com/example/smoke/SpecialNames.kt index 280a2486a7..f654e9013f 100644 --- a/gluecodium/src/test/resources/smoke/method_overloads/output/android-kotlin/com/example/smoke/SpecialNames.kt +++ b/gluecodium/src/test/resources/smoke/method_overloads/output/android-kotlin/com/example/smoke/SpecialNames.kt @@ -5,6 +5,7 @@ @file:JvmName("SpecialNamesExtensions") + package com.example.smoke import com.example.NativeBase @@ -49,7 +50,8 @@ class SpecialNames : NativeBase { companion object { @JvmStatic private external fun disposeNativeHandle(nativeHandle: Long) - @JvmStatic external fun make(result: String) : Long + @JvmStatic private external fun make(result: String) : Long } } + diff --git a/gluecodium/src/test/resources/smoke/name_rules/output/android-kotlin/com/example/namerules/NAME_RULES_KT.kt b/gluecodium/src/test/resources/smoke/name_rules/output/android-kotlin/com/example/namerules/NAME_RULES_KT.kt index 182ab29967..9b761f3db2 100644 --- a/gluecodium/src/test/resources/smoke/name_rules/output/android-kotlin/com/example/namerules/NAME_RULES_KT.kt +++ b/gluecodium/src/test/resources/smoke/name_rules/output/android-kotlin/com/example/namerules/NAME_RULES_KT.kt @@ -5,6 +5,7 @@ @file:JvmName("NameRulesExtensions") + package com.example.namerules import com.example.NativeBase @@ -76,7 +77,7 @@ class NAME_RULES_KT : NativeBase { companion object { @JvmStatic private external fun disposeNativeHandle(nativeHandle: Long) - @JvmStatic external fun create() : Long + @JvmStatic private external fun create() : Long } } diff --git a/gluecodium/src/test/resources/smoke/namespace_basic/output/android-kotlin/com/example/foo/bar/NativeBase.kt b/gluecodium/src/test/resources/smoke/namespace_basic/output/android-kotlin/com/example/foo/bar/NativeBase.kt index 55c1c6bcfd..9ffd2862ed 100644 --- a/gluecodium/src/test/resources/smoke/namespace_basic/output/android-kotlin/com/example/foo/bar/NativeBase.kt +++ b/gluecodium/src/test/resources/smoke/namespace_basic/output/android-kotlin/com/example/foo/bar/NativeBase.kt @@ -27,7 +27,7 @@ import java.util.concurrent.ConcurrentHashMap import java.util.logging.Level import java.util.logging.Logger -/* +/** * Internal base class for public non-POD objects to manage the lifecycle of underlying C++ objects. * While the class is public for technical reasons, but should be considered **internal** and not * part of the public API and thus not used directly. @@ -48,7 +48,12 @@ import java.util.logging.Logger public abstract class NativeBase { private val nativeHandle: Long - constructor(nativeHandle: Long, disposer: (Long) -> Unit) { + /** + * @suppress + * @param nativeHandle The native handle + * @param disposer The disposer + */ + protected constructor(nativeHandle: Long, disposer: (Long) -> Unit) { this.nativeHandle = nativeHandle REFERENCES.add(DisposableReference(this, nativeHandle, disposer)) } @@ -71,7 +76,13 @@ public abstract class NativeBase { } companion object { + /** + * Controls whether exceptions related to cleanup of C++ objects tied with Kotlin objects + * are propagated to the user application. + * @suppress + */ @JvmField public var propagateCleanupException: Boolean = false + private val LOGGER = Logger.getLogger(NativeBase::class.java.name) // The set is to keep DisposableReference itself from being garbage-collected. diff --git a/gluecodium/src/test/resources/smoke/nesting/output/android-kotlin/com/example/smoke/OuterStruct.kt b/gluecodium/src/test/resources/smoke/nesting/output/android-kotlin/com/example/smoke/OuterStruct.kt index 2714bf314d..8dbb819309 100644 --- a/gluecodium/src/test/resources/smoke/nesting/output/android-kotlin/com/example/smoke/OuterStruct.kt +++ b/gluecodium/src/test/resources/smoke/nesting/output/android-kotlin/com/example/smoke/OuterStruct.kt @@ -5,6 +5,7 @@ @file:JvmName("OuterStructExtensions") + package com.example.smoke import com.example.NativeBase @@ -101,7 +102,7 @@ class OuterStruct { companion object { @JvmStatic private external fun disposeNativeHandle(nativeHandle: Long) - @JvmStatic external fun create() : Long + @JvmStatic private external fun create() : Long } } diff --git a/gluecodium/src/test/resources/smoke/no_cache/output/android-kotlin/com/example/smoke/NoCacheClass.kt b/gluecodium/src/test/resources/smoke/no_cache/output/android-kotlin/com/example/smoke/NoCacheClass.kt index 72bace0a48..cf4e03469c 100644 --- a/gluecodium/src/test/resources/smoke/no_cache/output/android-kotlin/com/example/smoke/NoCacheClass.kt +++ b/gluecodium/src/test/resources/smoke/no_cache/output/android-kotlin/com/example/smoke/NoCacheClass.kt @@ -5,6 +5,7 @@ @file:JvmName("NoCacheClassExtensions") + package com.example.smoke import com.example.NativeBase @@ -38,7 +39,8 @@ class NoCacheClass : NativeBase { companion object { @JvmStatic private external fun disposeNativeHandle(nativeHandle: Long) - @JvmStatic external fun make() : Long + @JvmStatic private external fun make() : Long } } + diff --git a/gluecodium/src/test/resources/smoke/platform_names/output/android-kotlin/com/example/smoke/dodoInterface.kt b/gluecodium/src/test/resources/smoke/platform_names/output/android-kotlin/com/example/smoke/dodoInterface.kt index 80d6ce1f37..40abbd23d6 100644 --- a/gluecodium/src/test/resources/smoke/platform_names/output/android-kotlin/com/example/smoke/dodoInterface.kt +++ b/gluecodium/src/test/resources/smoke/platform_names/output/android-kotlin/com/example/smoke/dodoInterface.kt @@ -5,6 +5,7 @@ @file:JvmName("PlatformNamesInterfaceExtensions") + package com.example.smoke import com.example.NativeBase @@ -46,7 +47,8 @@ class dodoInterface : NativeBase { companion object { @JvmStatic private external fun disposeNativeHandle(nativeHandle: Long) - @JvmStatic external fun make(makeParameter: String) : Long + @JvmStatic private external fun make(makeParameter: String) : Long } } + diff --git a/gluecodium/src/test/resources/smoke/platform_names/output/android-kotlin/com/example/smoke/dodoTypes.kt b/gluecodium/src/test/resources/smoke/platform_names/output/android-kotlin/com/example/smoke/dodoTypes.kt index e92864f831..3c0ccb192c 100644 --- a/gluecodium/src/test/resources/smoke/platform_names/output/android-kotlin/com/example/smoke/dodoTypes.kt +++ b/gluecodium/src/test/resources/smoke/platform_names/output/android-kotlin/com/example/smoke/dodoTypes.kt @@ -5,6 +5,7 @@ @file:JvmName("PlatformNamesExtensions") + package com.example.smoke import com.example.smoke.dodoTypes @@ -33,7 +34,7 @@ class dodoTypes { companion object { - @JvmStatic external fun DodoCreate(DodoParameter: String) : dodoStruct + @JvmStatic private external fun DodoCreate(DodoParameter: String) : dodoStruct } } diff --git a/gluecodium/src/test/resources/smoke/structs/output/android-kotlin/com/example/smoke/Structs.kt b/gluecodium/src/test/resources/smoke/structs/output/android-kotlin/com/example/smoke/Structs.kt index d391fbea12..c91a1e66b1 100644 --- a/gluecodium/src/test/resources/smoke/structs/output/android-kotlin/com/example/smoke/Structs.kt +++ b/gluecodium/src/test/resources/smoke/structs/output/android-kotlin/com/example/smoke/Structs.kt @@ -5,6 +5,7 @@ @file:JvmName("StructsExtensions") + package com.example.smoke import com.example.NativeBase @@ -40,7 +41,7 @@ class Structs : NativeBase { companion object { - @JvmStatic external fun fromPolar(phi: Double, r: Double) : Point + @JvmStatic private external fun fromPolar(phi: Double, r: Double) : Point } } diff --git a/gluecodium/src/test/resources/smoke/structs/output/android-kotlin/com/example/smoke/StructsWithMethods.kt b/gluecodium/src/test/resources/smoke/structs/output/android-kotlin/com/example/smoke/StructsWithMethods.kt index 9ef3bc08c1..b1297acc19 100644 --- a/gluecodium/src/test/resources/smoke/structs/output/android-kotlin/com/example/smoke/StructsWithMethods.kt +++ b/gluecodium/src/test/resources/smoke/structs/output/android-kotlin/com/example/smoke/StructsWithMethods.kt @@ -5,6 +5,7 @@ @file:JvmName("StructsWithMethodsExtensions") + package com.example.smoke @@ -48,9 +49,9 @@ class StructsWithMethods { @JvmStatic external fun validate(x: Double, y: Double) : Boolean - @JvmStatic external fun create(x: Double, y: Double) : Vector + @JvmStatic private external fun create(x: Double, y: Double) : Vector @Throws(ValidationUtils.ValidationException::class) - @JvmStatic external fun create(other: StructsWithMethods.Vector) : Vector + @JvmStatic private external fun create(other: StructsWithMethods.Vector) : Vector } } diff --git a/gluecodium/src/test/resources/smoke/structs/output/android-kotlin/com/example/smoke/StructsWithMethodsInterface.kt b/gluecodium/src/test/resources/smoke/structs/output/android-kotlin/com/example/smoke/StructsWithMethodsInterface.kt index 85ed672ab8..79ffdb660f 100644 --- a/gluecodium/src/test/resources/smoke/structs/output/android-kotlin/com/example/smoke/StructsWithMethodsInterface.kt +++ b/gluecodium/src/test/resources/smoke/structs/output/android-kotlin/com/example/smoke/StructsWithMethodsInterface.kt @@ -5,6 +5,7 @@ @file:JvmName("StructsWithMethodsInterfaceExtensions") + package com.example.smoke import com.example.NativeBase @@ -52,9 +53,9 @@ class StructsWithMethodsInterface : NativeBase { @JvmStatic external fun validate(x: Double, y: Double, z: Double) : Boolean - @JvmStatic external fun create(input: String) : Vector3 + @JvmStatic private external fun create(input: String) : Vector3 @Throws(ValidationUtils.ValidationException::class) - @JvmStatic external fun create(other: StructsWithMethodsInterface.Vector3) : Vector3 + @JvmStatic private external fun create(other: StructsWithMethodsInterface.Vector3) : Vector3 } } @@ -96,3 +97,4 @@ class StructsWithMethodsInterface : NativeBase { } } + diff --git a/gluecodium/src/test/resources/smoke/visibility_attribute/output/android-kotlin/com/example/smoke/InternalClassWithFunctions.kt b/gluecodium/src/test/resources/smoke/visibility_attribute/output/android-kotlin/com/example/smoke/InternalClassWithFunctions.kt index 2ec5d35cf8..d36ae91fe9 100644 --- a/gluecodium/src/test/resources/smoke/visibility_attribute/output/android-kotlin/com/example/smoke/InternalClassWithFunctions.kt +++ b/gluecodium/src/test/resources/smoke/visibility_attribute/output/android-kotlin/com/example/smoke/InternalClassWithFunctions.kt @@ -5,6 +5,7 @@ @file:JvmName("InternalClassWithFunctionsExtensions") + package com.example.smoke import com.example.NativeBase @@ -45,9 +46,10 @@ internal class InternalClassWithFunctions : NativeBase { companion object { @JvmStatic private external fun disposeNativeHandle(nativeHandle: Long) - @JvmStatic external fun make() : Long + @JvmStatic private external fun make() : Long - @JvmStatic external fun make(foo: String) : Long + @JvmStatic private external fun make(foo: String) : Long } } + diff --git a/gluecodium/src/test/resources/smoke/visibility_attribute/output/android-kotlin/com/example/smoke/PublicStructWithInternalConstructors.kt b/gluecodium/src/test/resources/smoke/visibility_attribute/output/android-kotlin/com/example/smoke/PublicStructWithInternalConstructors.kt index 5c94a42cc0..9182da0b88 100644 --- a/gluecodium/src/test/resources/smoke/visibility_attribute/output/android-kotlin/com/example/smoke/PublicStructWithInternalConstructors.kt +++ b/gluecodium/src/test/resources/smoke/visibility_attribute/output/android-kotlin/com/example/smoke/PublicStructWithInternalConstructors.kt @@ -5,6 +5,7 @@ @file:JvmName("PublicStructWithInternalConstructorsExtensions") + package com.example.smoke @@ -32,7 +33,7 @@ class PublicStructWithInternalConstructors { companion object { - @JvmStatic @JvmSynthetic @JvmName("make") internal external fun make() : PublicStructWithInternalConstructors + @JvmStatic @JvmSynthetic @JvmName("make") private external fun make() : PublicStructWithInternalConstructors } }