Skip to content
Merged
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
* 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.
* Kotlin: minimize the usage of 'JvmSuppressWildcards' annotation for collection parameters. This annotation was used for all generated collection types. It needs to be used only when collection type holds another open type e.g.: 'open class', 'interface' or 'fun interface'.

## 14.0.0
Release date 2025-12-01
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ import com.here.gluecodium.model.lime.LimeAttributeValueType.FUNCTION_NAME
import com.here.gluecodium.model.lime.LimeBasicType
import com.here.gluecodium.model.lime.LimeBasicType.TypeId
import com.here.gluecodium.model.lime.LimeComment
import com.here.gluecodium.model.lime.LimeContainerWithInheritance
import com.here.gluecodium.model.lime.LimeDirectTypeRef
import com.here.gluecodium.model.lime.LimeElement
import com.here.gluecodium.model.lime.LimeExternalDescriptor.Companion.NAME_NAME
Expand Down Expand Up @@ -164,14 +165,28 @@ internal class KotlinNameResolver(

private fun resolveGenericTypeRef(limeType: LimeGenericType) =
when (limeType) {
is LimeList -> "List<@JvmSuppressWildcards ${resolveTypeRef(limeType.elementType)}>"
is LimeSet -> "Set<@JvmSuppressWildcards ${resolveTypeRef(limeType.elementType)}>"
is LimeMap -> "Map<@JvmSuppressWildcards ${resolveTypeRef(
limeType.keyType,
)}, @JvmSuppressWildcards ${resolveTypeRef(limeType.valueType)}>"
is LimeList -> "List<${resolveContainerParamType(limeType.elementType)}>"
is LimeSet -> "Set<${resolveContainerParamType(limeType.elementType)}>"
is LimeMap -> "Map<${resolveContainerParamType(limeType.keyType)}, ${resolveContainerParamType(limeType.valueType)}>"
else -> throw GluecodiumExecutionException("Unsupported element type ${limeType.javaClass.name}")
}

private fun resolveContainerParamType(typeRef: LimeTypeRef) =
if (needsToSuppressWildcards(typeRef.type)) {
"@JvmSuppressWildcards ${resolveTypeRef(typeRef)}"
} else {
resolveTypeRef(typeRef)
}

// The parameters of generic types (List, Set, Map) must use '@JvmSuppressWildcards'
// for 'open' types to avoid compilation problems when accessed from Java code.
private fun needsToSuppressWildcards(type: LimeType) =
when (type) {
is LimeContainerWithInheritance -> type.isOpen
is LimeLambda -> true
else -> false
}

private fun resolveNestedNames(limeElement: LimeNamedElement): List<String> {
val elementName = kotlinNameRules.getName(limeElement)
val parentElement = if (limeElement.path.hasParent) getParentElement(limeElement) else null
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@

@file:JvmName("CollectionConstantsExtensions")


package com.example.smoke

import com.example.NativeBase
Expand All @@ -29,10 +30,10 @@ class CollectionConstants : NativeBase {


companion object {
@JvmField final val LIST_CONSTANT: List<@JvmSuppressWildcards String> = mutableListOf("foo", "bar")
@JvmField final val SET_CONSTANT: Set<@JvmSuppressWildcards String> = mutableSetOf("foo", "bar")
@JvmField final val MAP_CONSTANT: Map<@JvmSuppressWildcards String, @JvmSuppressWildcards String> = mutableMapOf("foo" to "bar")
@JvmField final val MIXED_CONSTANT: Map<@JvmSuppressWildcards List<@JvmSuppressWildcards String>, @JvmSuppressWildcards Set<@JvmSuppressWildcards String>> = mutableMapOf(mutableListOf("foo") to mutableSetOf("bar"))
@JvmField final val LIST_CONSTANT: List<String> = mutableListOf("foo", "bar")
@JvmField final val SET_CONSTANT: Set<String> = mutableSetOf("foo", "bar")
@JvmField final val MAP_CONSTANT: Map<String, String> = mutableMapOf("foo" to "bar")
@JvmField final val MIXED_CONSTANT: Map<List<String>, Set<String>> = mutableMapOf(mutableListOf("foo") to mutableSetOf("bar"))
@JvmStatic private external fun disposeNativeHandle(nativeHandle: Long)
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ open class Constructors : NativeBase {
}


constructor(input: List<@JvmSuppressWildcards Double>) : this(create(input), null as Any?) {
constructor(input: List<Double>) : this(create(input), null as Any?) {
cacheThisInstance();
}

Expand Down Expand Up @@ -79,7 +79,7 @@ open class Constructors : NativeBase {
@Throws(Constructors.ConstructorExplodedException::class)
@JvmStatic private external fun create(input: String) : Long

@JvmStatic private external fun create(input: List<@JvmSuppressWildcards Double>) : Long
@JvmStatic private external fun create(input: List<Double>) : Long

@JvmStatic private external fun create(input: Long) : Long
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@

@file:JvmName("DatesExtensions")


package com.example.smoke

import com.example.NativeBase
Expand Down Expand Up @@ -53,7 +54,7 @@ class Dates : NativeBase {
external get
external set

var dateSet: Set<@JvmSuppressWildcards Date>
var dateSet: Set<Date>
external get
external set

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@

@file:JvmName("DefaultValuesExtensions")


package com.example.smoke

import com.example.NativeBase
Expand Down Expand Up @@ -85,11 +86,11 @@ class DefaultValues : NativeBase {
}

class StructWithEmptyDefaults {
@JvmField var intsField: List<@JvmSuppressWildcards Int>
@JvmField var floatsField: List<@JvmSuppressWildcards Float>
@JvmField var mapField: Map<@JvmSuppressWildcards Long, @JvmSuppressWildcards String>
@JvmField var intsField: List<Int>
@JvmField var floatsField: List<Float>
@JvmField var mapField: Map<Long, String>
@JvmField var structField: DefaultValues.StructWithDefaults
@JvmField var setTypeField: Set<@JvmSuppressWildcards String>
@JvmField var setTypeField: Set<String>



Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@

@file:JvmName("EnumCollectionDefaultsExtensions")


package com.example.smoke

import com.example.fire.Enum1
Expand All @@ -14,9 +15,9 @@ import com.example.fire.Enum4
import java.util.EnumSet

class EnumCollectionDefaults {
@JvmField var listField: List<@JvmSuppressWildcards Enum1>
@JvmField var setField: Set<@JvmSuppressWildcards Enum2>
@JvmField var mapField: Map<@JvmSuppressWildcards Enum3, @JvmSuppressWildcards Enum4>
@JvmField var listField: List<Enum1>
@JvmField var setField: Set<Enum2>
@JvmField var mapField: Map<Enum3, Enum4>



Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,14 +5,15 @@

@file:JvmName("EnumCollectionDefaultsExternalExtensions")


package com.example.smoke

import java.util.EnumSet

class EnumCollectionDefaultsExternal {
@JvmField var listField: List<@JvmSuppressWildcards foo.AlienEnum1>
@JvmField var setField: Set<@JvmSuppressWildcards foo.AlienEnum2>
@JvmField var mapField: Map<@JvmSuppressWildcards foo.AlienEnum3, @JvmSuppressWildcards foo.AlienEnum4>
@JvmField var listField: List<foo.AlienEnum1>
@JvmField var setField: Set<foo.AlienEnum2>
@JvmField var mapField: Map<foo.AlienEnum3, foo.AlienEnum4>



Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,14 +5,15 @@

@file:JvmName("InternalEnumDefaultsExtensions")


package com.example.smoke


class InternalEnumDefaults {
@JvmField var publicField: FooBarEnum
@JvmField var publicListField: List<@JvmSuppressWildcards FooBarEnum>
@JvmField var publicListField: List<FooBarEnum>
@JvmField @JvmSynthetic internal var internalField: FooBarEnum
@JvmField @JvmSynthetic internal var internalListField: List<@JvmSuppressWildcards FooBarEnum>
@JvmField @JvmSynthetic internal var internalListField: List<FooBarEnum>



Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@

@file:JvmName("EquatableExtensions")


package com.example.smoke


Expand All @@ -23,12 +24,12 @@ class Equatable {
@JvmField var stringField: String
@JvmField var structField: Equatable.NestedEquatableStruct
@JvmField var enumField: Equatable.SomeEnum
@JvmField var arrayField: List<@JvmSuppressWildcards String>
@JvmField var mapField: Map<@JvmSuppressWildcards Int, @JvmSuppressWildcards String>
@JvmField var arrayField: List<String>
@JvmField var mapField: Map<Int, String>



constructor(boolField: Boolean, intField: Int, longField: Long, floatField: Float, doubleField: Double, stringField: String, structField: Equatable.NestedEquatableStruct, enumField: Equatable.SomeEnum, arrayField: List<@JvmSuppressWildcards String>, mapField: Map<@JvmSuppressWildcards Int, @JvmSuppressWildcards String>) {
constructor(boolField: Boolean, intField: Int, longField: Long, floatField: Float, doubleField: Double, stringField: String, structField: Equatable.NestedEquatableStruct, enumField: Equatable.SomeEnum, arrayField: List<String>, mapField: Map<Int, String>) {
this.boolField = boolField
this.intField = intField
this.longField = longField
Expand Down Expand Up @@ -91,8 +92,8 @@ class Equatable {
@JvmField var stringField: String?
@JvmField var structField: Equatable.NestedEquatableStruct?
@JvmField var enumField: Equatable.SomeEnum?
@JvmField var arrayField: List<@JvmSuppressWildcards String>?
@JvmField var mapField: Map<@JvmSuppressWildcards Int, @JvmSuppressWildcards String>?
@JvmField var arrayField: List<String>?
@JvmField var mapField: Map<Int, String>?



Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,19 +5,20 @@

@file:JvmName("EquatableStructWithInternalFieldsExtensions")


package com.example.smoke


class EquatableStructWithInternalFields {
@JvmField var publicField: String
@JvmField @JvmSynthetic internal var internalField: String
@JvmField @JvmSynthetic internal var internalListField: List<@JvmSuppressWildcards String>
@JvmField @JvmSynthetic internal var internalMapField: Map<@JvmSuppressWildcards String, @JvmSuppressWildcards String>
@JvmField @JvmSynthetic internal var internalSetField: Set<@JvmSuppressWildcards String>
@JvmField @JvmSynthetic internal var internalListField: List<String>
@JvmField @JvmSynthetic internal var internalMapField: Map<String, String>
@JvmField @JvmSynthetic internal var internalSetField: Set<String>



internal constructor(publicField: String, internalField: String, internalListField: List<@JvmSuppressWildcards String>, internalMapField: Map<@JvmSuppressWildcards String, @JvmSuppressWildcards String>, internalSetField: Set<@JvmSuppressWildcards String>) {
internal constructor(publicField: String, internalField: String, internalListField: List<String>, internalMapField: Map<String, String>, internalSetField: Set<String>) {
this.publicField = publicField
this.internalField = internalField
this.internalListField = internalListField
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ class Class : NativeBase, Interface {


@Throws(Types.ExceptionException::class)
external fun Fun(double: List<@JvmSuppressWildcards Types.Struct>) : Types.Struct
external fun Fun(double: List<Types.Struct>) : Types.Struct

var Property: Types.Enum
external get
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@

@file:JvmName("StructsExtensions")


package com.example.smoke

import com.example.NativeBase
Expand All @@ -14,12 +15,12 @@ class Structs : NativeBase {
class ExternalStruct {
@JvmField var stringField: String
@JvmField var externalStringField: String
@JvmField var externalArrayField: List<@JvmSuppressWildcards Byte>
@JvmField var externalArrayField: List<Byte>
@JvmField var externalStructField: Structs.AnotherExternalStruct



constructor(stringField: String, externalStringField: String, externalArrayField: List<@JvmSuppressWildcards Byte>, externalStructField: Structs.AnotherExternalStruct) {
constructor(stringField: String, externalStringField: String, externalArrayField: List<Byte>, externalStructField: Structs.AnotherExternalStruct) {
this.stringField = stringField
this.externalStringField = externalStringField
this.externalArrayField = externalArrayField
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,13 @@

@file:JvmName("EnumSetsExtensions")


package com.example.smoke

import java.util.EnumSet

class EnumSets {
@JvmField var enumSetField: Set<@JvmSuppressWildcards GenericTypesWithCompoundTypes.SomeEnum>
@JvmField var enumSetField: Set<GenericTypesWithCompoundTypes.SomeEnum>



Expand All @@ -23,7 +24,7 @@ class EnumSets {


companion object {
@JvmField final val ENUM_SET_CONST: Set<@JvmSuppressWildcards GenericTypesWithCompoundTypes.SomeEnum> = EnumSet.of(GenericTypesWithCompoundTypes.SomeEnum.FOO, GenericTypesWithCompoundTypes.SomeEnum.BAR)
@JvmField final val ENUM_SET_CONST: Set<GenericTypesWithCompoundTypes.SomeEnum> = EnumSet.of(GenericTypesWithCompoundTypes.SomeEnum.FOO, GenericTypesWithCompoundTypes.SomeEnum.BAR)
}
}

Original file line number Diff line number Diff line change
Expand Up @@ -5,20 +5,21 @@

@file:JvmName("GenericTypesWithBasicTypesExtensions")


package com.example.smoke

import com.example.NativeBase

class GenericTypesWithBasicTypes : NativeBase {

class StructWithGenerics {
@JvmField var numbersList: List<@JvmSuppressWildcards Short>
@JvmField var numbersMap: Map<@JvmSuppressWildcards Short, @JvmSuppressWildcards String>
@JvmField var numbersSet: Set<@JvmSuppressWildcards Short>
@JvmField var numbersList: List<Short>
@JvmField var numbersMap: Map<Short, String>
@JvmField var numbersSet: Set<Short>



constructor(numbersList: List<@JvmSuppressWildcards Short>, numbersMap: Map<@JvmSuppressWildcards Short, @JvmSuppressWildcards String>, numbersSet: Set<@JvmSuppressWildcards Short>) {
constructor(numbersList: List<Short>, numbersMap: Map<Short, String>, numbersSet: Set<Short>) {
this.numbersList = numbersList
this.numbersMap = numbersMap
this.numbersSet = numbersSet
Expand All @@ -45,32 +46,32 @@ class GenericTypesWithBasicTypes : NativeBase {



external fun methodWithList(input: List<@JvmSuppressWildcards Int>) : List<@JvmSuppressWildcards Int>
external fun methodWithList(input: List<Int>) : List<Int>


external fun methodWithMap(input: Map<@JvmSuppressWildcards Int, @JvmSuppressWildcards Boolean>) : Map<@JvmSuppressWildcards Int, @JvmSuppressWildcards Boolean>
external fun methodWithMap(input: Map<Int, Boolean>) : Map<Int, Boolean>


external fun methodWithSet(input: Set<@JvmSuppressWildcards Int>) : Set<@JvmSuppressWildcards Int>
external fun methodWithSet(input: Set<Int>) : Set<Int>


external fun methodWithListTypeAlias(input: List<@JvmSuppressWildcards String>) : List<@JvmSuppressWildcards String>
external fun methodWithListTypeAlias(input: List<String>) : List<String>


external fun methodWithMapTypeAlias(input: Map<@JvmSuppressWildcards String, @JvmSuppressWildcards String>) : Map<@JvmSuppressWildcards String, @JvmSuppressWildcards String>
external fun methodWithMapTypeAlias(input: Map<String, String>) : Map<String, String>


external fun methodWithSetTypeAlias(input: Set<@JvmSuppressWildcards String>) : Set<@JvmSuppressWildcards String>
external fun methodWithSetTypeAlias(input: Set<String>) : Set<String>

var listProperty: List<@JvmSuppressWildcards Float>
var listProperty: List<Float>
external get
external set

var mapProperty: Map<@JvmSuppressWildcards Float, @JvmSuppressWildcards Double>
var mapProperty: Map<Float, Double>
external get
external set

var setProperty: Set<@JvmSuppressWildcards Float>
var setProperty: Set<Float>
external get
external set

Expand Down
Loading