Skip to content

Commit

Permalink
RID is no longer a native coretype (#689)
Browse files Browse the repository at this point in the history
* Convert RID to a Kotlin coretype
  • Loading branch information
CedNaru committed Sep 14, 2024
1 parent 5784336 commit 359d785
Show file tree
Hide file tree
Showing 11 changed files with 38 additions and 167 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ const val bitfieldPrefix = "bitfield::"

fun TypedTrait.isCoreType() = isTypedArray() || GodotTypes.coreTypes.find { s -> s == this.type } != null
fun TypedTrait.isPrimitive() = GodotTypes.primitives.find { s -> s == this.type } != null
fun TypedTrait.isCoreTypeReimplementedInKotlin() = GodotTypes.coreTypesReimplementedInKotlin.find { s ->
fun TypedTrait.isLocalCopyCoreTypes() = GodotTypes.localCopyCoreTypes.find { s ->
s == this.type
} != null
fun TypedTrait.isEnum() = type?.startsWith(enumPrefix) ?: false
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,8 +25,8 @@ import godot.codegen.extensions.applyJvmNameIfNecessary
import godot.codegen.extensions.getDefaultValueKotlinString
import godot.codegen.extensions.getTypeClassName
import godot.codegen.extensions.isBitField
import godot.codegen.extensions.isCoreTypeReimplementedInKotlin
import godot.codegen.extensions.isEnum
import godot.codegen.extensions.isLocalCopyCoreTypes
import godot.codegen.extensions.jvmVariantTypeValue
import godot.codegen.models.custom.AdditionalImport
import godot.codegen.models.enriched.EnrichedClass
Expand Down Expand Up @@ -167,7 +167,7 @@ class GenerationService(
for (property in enrichedClass.properties) {
val propertySpec = generateProperty(enrichedClass, property) ?: continue
classTypeBuilder.addProperty(propertySpec)
if (property.hasValidSetterInClass && property.isCoreTypeReimplementedInKotlin()) {
if (property.hasValidSetterInClass && property.isLocalCopyCoreTypes()) {
classTypeBuilder.addFunction(generateCoreTypeHelper(enrichedClass, property))
}
}
Expand Down Expand Up @@ -505,7 +505,7 @@ class GenerationService(
)
}

if (property.isCoreTypeReimplementedInKotlin()) {
if (property.isLocalCopyCoreTypes()) {
propertySpecBuilder.addAnnotation(CORE_TYPE_LOCAL_COPY)
}

Expand All @@ -519,7 +519,6 @@ class GenerationService(
val parameterName = property.name
val propertyFunSpec = FunSpec.builder("${parameterName}Mutate").addModifiers(KModifier.FINAL)


return propertyFunSpec
.addParameter(
ParameterSpec.builder(
Expand Down
5 changes: 4 additions & 1 deletion kt/godot-library/src/main/kotlin/godot/core/Variant.kt
Original file line number Diff line number Diff line change
Expand Up @@ -364,7 +364,10 @@ enum class VariantType(override val id: Int) : VariantConverter {
},
_RID(23) {
override fun toUnsafeKotlin(buffer: ByteBuffer) = RID(buffer.long)
override fun toUnsafeGodot(buffer: ByteBuffer, any: Any?) = toGodotNativeCoreType<RID>(buffer, any)
override fun toUnsafeGodot(buffer: ByteBuffer, any: Any?) {
require(any is RID)
buffer.putLong(any.id)
}
},
OBJECT(24) {
override fun toUnsafeKotlin(buffer: ByteBuffer) = buffer.obj
Expand Down
78 changes: 24 additions & 54 deletions kt/godot-library/src/main/kotlin/godot/core/bridge/RID.kt
Original file line number Diff line number Diff line change
@@ -1,88 +1,58 @@
@file:Suppress("PackageDirectoryMismatch")

package godot.core
import godot.core.memory.MemoryManager
import godot.core.memory.TransferContext
import godot.util.VoidPtr

@Suppress("MemberVisibilityCanBePrivate")
class RID : NativeCoreType, Comparable<RID> {
class RID(
/**
* Returns the ID of the referenced low-level resource.
*/
val id: Long
) : Comparable<RID> {

val id: Int
get() = getID()

//INTERNAL
internal constructor(_handle: VoidPtr) {
this._handle = _handle
}

//CONSTRUCTOR
constructor() {
_handle = Bridge.engine_call_constructor()
MemoryManager.registerNativeCoreType(this, VariantType._RID)
}
/**
* Constructs an empty RID with the invalid ID 0.
*/
constructor(): this(0L)

constructor(from: RID) {
_handle = Bridge.engine_call_constructor(from._handle)
MemoryManager.registerNativeCoreType(this, VariantType._RID)
}
/**
* Constructs a RID as a copy of the given RID.
*/
constructor(from: RID): this(from.id)

//API
/**
* Returns the ID of the referenced resource.
* Returns `true` if the RID is not `0`.
*/
fun getID(): Int {
Bridge.engine_call_getID(_handle)
return TransferContext.readReturnValue(VariantCaster.INT) as Int
}
fun isValid() = id != 0L

/**
* Returns `true` if the RID is not `0`.
* Returns `true` if the RID is `0`.
*/
fun isValid(): Boolean {
Bridge.engine_call_isValid(_handle)
return TransferContext.readReturnValue(VariantType.BOOL) as Boolean
}
fun isNull() = id == 0L

//UTILITIES
override fun compareTo(other: RID): Int {
TransferContext.writeArguments(VariantType._RID to other)
Bridge.engine_call_compareTo(_handle)
return when {
this == other -> 0
TransferContext.readReturnValue(VariantType.BOOL) as Boolean -> -1

else -> 1
}
override fun compareTo(other: RID) = when {
this == other -> 0
this.id < other.id -> -1
else -> 1
}

override fun equals(other: Any?): Boolean {
return when (other) {
is RID -> {
TransferContext.writeArguments(VariantType._RID to other)
Bridge.engine_call_equals(_handle)
TransferContext.readReturnValue(VariantType.BOOL) as Boolean
id == other.id
}

else -> false
}
}

override fun hashCode(): Int {
return _handle.hashCode()
return id.toInt()
}

override fun toString(): String {
return "RID($id)"
}

@Suppress("FunctionName")
private object Bridge {
external fun engine_call_constructor(): VoidPtr
external fun engine_call_constructor(from: VoidPtr): VoidPtr
external fun engine_call_getID(_handle: VoidPtr)
external fun engine_call_isValid(_handle: VoidPtr)
external fun engine_call_compareTo(_handle: VoidPtr)
external fun engine_call_equals(_handle: VoidPtr)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -228,20 +228,6 @@
{ "name" : "engine_call_equals", "parameterTypes" : ["long"] }
]
},
{
"name" : "godot.core.RID$Bridge",
"fields" : [
{ "name" : "INSTANCE" }
],
"methods" : [
{ "name" : "engine_call_constructor", "parameterTypes" : [] },
{ "name" : "engine_call_constructor", "parameterTypes" : ["long"] },
{ "name" : "engine_call_getID", "parameterTypes" : ["long"] },
{ "name" : "engine_call_isValid", "parameterTypes" : ["long"] },
{ "name" : "engine_call_compareTo", "parameterTypes" : ["long"] },
{ "name" : "engine_call_equals", "parameterTypes" : ["long"] }
]
},
{
"name" : "godot.core.NodePath$Bridge",
"fields" : [
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -161,7 +161,8 @@ object GodotTypes {
variant
)

val coreTypesReimplementedInKotlin = listOf(
// We don't include RID because this core type can't be modified anyway and is a simple wrapper around Long.
val localCopyCoreTypes = listOf(
aabb,
basis,
color,
Expand All @@ -177,7 +178,7 @@ object GodotTypes {
vector3i,
vector4,
vector4i,
projection
projection,
)

val primitives = listOf(
Expand Down
48 changes: 0 additions & 48 deletions src/jvm_wrapper/bridge/rid_bridge.cpp

This file was deleted.

33 changes: 0 additions & 33 deletions src/jvm_wrapper/bridge/rid_bridge.h

This file was deleted.

4 changes: 1 addition & 3 deletions src/jvm_wrapper/memory/memory_manager.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -44,9 +44,6 @@ void MemoryManager::unref_native_core_types(JNIEnv* p_raw_env, jobject p_instanc

Variant::Type variant_type {static_cast<Variant::Type>(var_type)};
switch (variant_type) {
case Variant::RID:
memdelete(reinterpret_cast<RID*>(p_raw_ptr));
break;
case Variant::CALLABLE:
memdelete(reinterpret_cast<Callable*>(p_raw_ptr));
break;
Expand Down Expand Up @@ -227,3 +224,4 @@ void MemoryManager::direct_object_deletion(jni::Env& p_env, Object* p_obj) {
}

MemoryManager::~MemoryManager() = default;

4 changes: 2 additions & 2 deletions src/kt_variant.h
Original file line number Diff line number Diff line change
Expand Up @@ -130,7 +130,7 @@ namespace ktvariant {
&Variant::operator StringName>;
to_kt_array[Variant::NODE_PATH] = to_kvariant_fromNATIVECORETYPE < Variant::NODE_PATH, NodePath,
&Variant::operator NodePath>;
to_kt_array[Variant::RID] = to_kvariant_fromNATIVECORETYPE < Variant::RID, RID, &Variant::operator ::RID>;
to_kt_array[Variant::RID] = to_kvariant_fromCORETYPE<Variant::RID, RID>;
to_kt_array[Variant::PACKED_BYTE_ARRAY] = to_kvariant_fromNATIVECORETYPE < Variant::PACKED_BYTE_ARRAY,
PackedByteArray, &Variant::operator PackedByteArray>;
to_kt_array[Variant::PACKED_INT32_ARRAY] = to_kvariant_fromNATIVECORETYPE < Variant::PACKED_INT32_ARRAY,
Expand Down Expand Up @@ -260,7 +260,7 @@ namespace ktvariant {
to_gd_array[Variant::ARRAY] = from_kvariant_tokVariantNativeCoreTypeValue<Array>;
to_gd_array[Variant::STRING_NAME] = from_kvariant_tokVariantNativeCoreTypeValue<StringName>;
to_gd_array[Variant::NODE_PATH] = from_kvariant_tokVariantNativeCoreTypeValue<NodePath>;
to_gd_array[Variant::RID] = from_kvariant_tokVariantNativeCoreTypeValue<RID>;
to_gd_array[Variant::RID] = from_kvariant_to_kVariantCoreTypeValue<RID>;
to_gd_array[Variant::PACKED_BYTE_ARRAY] = from_kvariant_tokVariantNativeCoreTypeValue<PackedByteArray>;
to_gd_array[Variant::PACKED_INT32_ARRAY] = from_kvariant_tokVariantNativeCoreTypeValue<PackedInt32Array>;
to_gd_array[Variant::PACKED_INT64_ARRAY] = from_kvariant_tokVariantNativeCoreTypeValue<PackedInt64Array>;
Expand Down
5 changes: 0 additions & 5 deletions src/lifecycle/jvm_manager.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -15,12 +15,9 @@
#include "jvm_wrapper/bridge/packed_string_array_bridge.h"
#include "jvm_wrapper/bridge/packed_vector2_array_bridge.h"
#include "jvm_wrapper/bridge/packed_vector3_array_bridge.h"
#include "jvm_wrapper/bridge/rid_bridge.h"
#include "jvm_wrapper/bridge/string_name_bridge.h"
#include "jvm_wrapper/bridge/variant_array_bridge.h"
#include "jvm_wrapper/memory/memory_manager.h"
#include "jvm_wrapper/memory/transfer_context.h"
#include "jvm_wrapper/registration/kt_class.h"
#include "kotlin_callable_custom.h"
#include "jvm_wrapper/bridge/kt_callable_bridge.h"
#include "jvm_wrapper/bridge/packed_vector4_array_bridge.h"
Expand Down Expand Up @@ -117,7 +114,6 @@ bool JvmManager::initialize_jni_classes(jni::Env& p_env, ClassLoader* class_load
&& bridges::CallableBridge::initialize(p_env, class_loader)
&& bridges::KtCallableBridge::initialize(p_env, class_loader)
&& bridges::DictionaryBridge::initialize(p_env, class_loader)
&& bridges::RidBridge::initialize(p_env, class_loader)
&& bridges::StringNameBridge::initialize(p_env, class_loader)
&& bridges::NodePathBridge::initialize(p_env, class_loader)
&& bridges::VariantArrayBridge::initialize(p_env, class_loader)
Expand All @@ -144,7 +140,6 @@ void JvmManager::destroy_jni_classes() {

bridges::CallableBridge::destroy();
bridges::DictionaryBridge::destroy();
bridges::RidBridge::destroy();
bridges::StringNameBridge::destroy();
bridges::NodePathBridge::destroy();
bridges::VariantArrayBridge::destroy();
Expand Down

0 comments on commit 359d785

Please sign in to comment.