Skip to content

Commit 7d19352

Browse files
committed
Fix registration of overridden functions, annotation classes and fix recursive registration annotations resolving
1 parent a30b22c commit 7d19352

File tree

3 files changed

+161
-152
lines changed

3 files changed

+161
-152
lines changed

harness/tests/scripts/godot/tests/Invocation.gdj

Lines changed: 147 additions & 147 deletions
Original file line numberDiff line numberDiff line change
@@ -7,159 +7,159 @@ relativeSourcePath = src/main/kotlin/godot/tests/Invocation.kt
77
baseType = Node3D
88
supertypes = [
99
godot.Node3D,
10-
godot.Node,
11-
godot.Object,
12-
godot.core.KtObject,
13-
kotlin.Any
10+
godot.Node,
11+
godot.Object,
12+
godot.core.KtObject,
13+
kotlin.Any
1414
]
1515
signals = [
1616

1717
]
1818
properties = [
1919
button,
20-
enum_list,
21-
vector_list,
22-
enum_list_mutable,
23-
register_object,
24-
register_object_nullable,
25-
register_object_nullable_pre_init,
26-
register_object_non_nullable_pre_init,
27-
vector,
28-
x,
29-
y,
30-
z,
31-
custom_name,
32-
invocation,
33-
enum_test,
34-
resource_test,
35-
jvm_id,
36-
test_array_any,
37-
nav_meshes,
38-
nullable_array,
39-
any_to_any_dictionary,
40-
nav_meshes_dictionary,
41-
nullable_dictionary,
42-
color,
43-
rid,
44-
packed_byte_array,
45-
packed_int32_array,
46-
packed_float64_array,
47-
packed_color_array,
48-
packed_string_array,
49-
packed_vector2_array,
50-
packed_vector3_array,
51-
p1,
52-
p1_1,
53-
p2,
54-
p3,
55-
p4,
56-
p5,
57-
p6,
58-
p7,
59-
p8,
60-
p9,
61-
p10,
62-
p11,
63-
p12,
64-
p13,
65-
p14,
66-
p15,
67-
p16,
68-
p17,
69-
stringtemplation,
70-
test_string,
71-
ascii_string,
72-
utf8_string
20+
enum_list,
21+
vector_list,
22+
enum_list_mutable,
23+
register_object,
24+
register_object_nullable,
25+
register_object_nullable_pre_init,
26+
register_object_non_nullable_pre_init,
27+
vector,
28+
x,
29+
y,
30+
z,
31+
custom_name,
32+
invocation,
33+
enum_test,
34+
resource_test,
35+
jvm_id,
36+
test_array_any,
37+
nav_meshes,
38+
nullable_array,
39+
any_to_any_dictionary,
40+
nav_meshes_dictionary,
41+
nullable_dictionary,
42+
color,
43+
rid,
44+
packed_byte_array,
45+
packed_int32_array,
46+
packed_float64_array,
47+
packed_color_array,
48+
packed_string_array,
49+
packed_vector2_array,
50+
packed_vector3_array,
51+
p1,
52+
p1_1,
53+
p2,
54+
p3,
55+
p4,
56+
p5,
57+
p6,
58+
p7,
59+
p8,
60+
p9,
61+
p10,
62+
p11,
63+
p12,
64+
p13,
65+
p14,
66+
p15,
67+
p16,
68+
p17,
69+
stringtemplation,
70+
test_string,
71+
ascii_string,
72+
utf8_string
7373
]
7474
functions = [
7575
int_value,
76-
long_value,
77-
float_value,
78-
double_value,
79-
boolean_value,
80-
string_value,
81-
int_addition,
82-
init_nullables,
83-
_enter_tree,
84-
_ready,
85-
_on_destroy,
86-
get_rid_id,
87-
get_nav_mesh_rid,
88-
append_to_any_dict,
89-
remove_from_any_dict,
90-
get_from_any_dict,
91-
any_dict_size,
92-
append_to_string_nav_mesh_dict,
93-
remove_from_string_nav_mesh_dict,
94-
get_from_string_nav_mesh_dict,
95-
string_nav_mesh_dict_size,
96-
append_to_string_nav_mesh_nullable_dict,
97-
remove_from_string_nav_mesh_nullable_dict,
98-
string_nav_mesh_nullable_dict_size,
99-
append_nullable_standard_nav_mesh,
100-
append_nullable_nav_mesh,
101-
remove_nullable_nav_mesh,
102-
remove_nullable_nav_mesh_with_index,
103-
nullable_nav_meshes_size,
104-
append_standard_nav_mesh,
105-
append_nav_mesh,
106-
remove_nav_mesh,
107-
remove_nav_mesh_with_index,
108-
get_nav_mesh_from_array,
109-
nav_meshes_size,
110-
append_any_to_array,
111-
remove_any_from_array,
112-
get_any_from_array,
113-
array_any_size,
114-
count_namesh_instance,
115-
get_nav_mesh_count,
116-
parent_is_node3_d,
117-
is_object_node3_d,
118-
other_jvm_id,
119-
has_camera_node,
120-
add_byte_to_packed_array,
121-
add_byte_array_to_packed_array,
122-
delete_byte_from_packed_array,
123-
get_byte_from_packed_array,
124-
set_byte_in_packed_array,
125-
resize_byte_packed_array,
126-
add_color_to_packed_array,
127-
add_color_array_to_packed_array,
128-
delete_color_from_packed_array,
129-
get_color_from_packed_array,
130-
set_color_in_packed_array,
131-
resize_color_packed_array,
132-
add_int_to_packed_array,
133-
add_int_array_to_packed_array,
134-
delete_int_from_packed_array,
135-
get_int_from_packed_array,
136-
set_int_in_packed_array,
137-
resize_int_packed_array,
138-
add_real_to_packed_array,
139-
add_real_array_to_packed_array,
140-
read_string_from_byte_array,
141-
delete_real_from_packed_array,
142-
get_real_from_packed_array,
143-
set_real_in_packed_array,
144-
resize_real_packed_array,
145-
add_string_to_packed_array,
146-
add_string_array_to_packed_array,
147-
delete_string_from_packed_array,
148-
get_string_from_packed_array,
149-
set_string_in_packed_array,
150-
resize_string_packed_array,
151-
add_vector2_to_packed_array,
152-
add_vector2_array_to_packed_array,
153-
delete_vector2_from_packed_array,
154-
get_vector2_from_packed_array,
155-
set_vector2_in_packed_array,
156-
resize_vector2_packed_array,
157-
add_vector3_to_packed_array,
158-
add_vector3_array_to_packed_array,
159-
delete_vector3_from_packed_array,
160-
get_vector3_from_packed_array,
161-
set_vector3_in_packed_array,
162-
resize_vector3_packed_array,
163-
is_sent_xr_same_instance_as_jvm_singleton,
164-
create_variant_array_of_user_type
165-
]
76+
long_value,
77+
float_value,
78+
double_value,
79+
boolean_value,
80+
string_value,
81+
int_addition,
82+
init_nullables,
83+
_enter_tree,
84+
_ready,
85+
_on_destroy,
86+
get_rid_id,
87+
get_nav_mesh_rid,
88+
append_to_any_dict,
89+
remove_from_any_dict,
90+
get_from_any_dict,
91+
any_dict_size,
92+
append_to_string_nav_mesh_dict,
93+
remove_from_string_nav_mesh_dict,
94+
get_from_string_nav_mesh_dict,
95+
string_nav_mesh_dict_size,
96+
append_to_string_nav_mesh_nullable_dict,
97+
remove_from_string_nav_mesh_nullable_dict,
98+
string_nav_mesh_nullable_dict_size,
99+
append_nullable_standard_nav_mesh,
100+
append_nullable_nav_mesh,
101+
remove_nullable_nav_mesh,
102+
remove_nullable_nav_mesh_with_index,
103+
nullable_nav_meshes_size,
104+
append_standard_nav_mesh,
105+
append_nav_mesh,
106+
remove_nav_mesh,
107+
remove_nav_mesh_with_index,
108+
get_nav_mesh_from_array,
109+
nav_meshes_size,
110+
append_any_to_array,
111+
remove_any_from_array,
112+
get_any_from_array,
113+
array_any_size,
114+
count_namesh_instance,
115+
get_nav_mesh_count,
116+
parent_is_node3_d,
117+
is_object_node3_d,
118+
other_jvm_id,
119+
has_camera_node,
120+
add_byte_to_packed_array,
121+
add_byte_array_to_packed_array,
122+
delete_byte_from_packed_array,
123+
get_byte_from_packed_array,
124+
set_byte_in_packed_array,
125+
resize_byte_packed_array,
126+
add_color_to_packed_array,
127+
add_color_array_to_packed_array,
128+
delete_color_from_packed_array,
129+
get_color_from_packed_array,
130+
set_color_in_packed_array,
131+
resize_color_packed_array,
132+
add_int_to_packed_array,
133+
add_int_array_to_packed_array,
134+
delete_int_from_packed_array,
135+
get_int_from_packed_array,
136+
set_int_in_packed_array,
137+
resize_int_packed_array,
138+
add_real_to_packed_array,
139+
add_real_array_to_packed_array,
140+
read_string_from_byte_array,
141+
delete_real_from_packed_array,
142+
get_real_from_packed_array,
143+
set_real_in_packed_array,
144+
resize_real_packed_array,
145+
add_string_to_packed_array,
146+
add_string_array_to_packed_array,
147+
delete_string_from_packed_array,
148+
get_string_from_packed_array,
149+
set_string_in_packed_array,
150+
resize_string_packed_array,
151+
add_vector2_to_packed_array,
152+
add_vector2_array_to_packed_array,
153+
delete_vector2_from_packed_array,
154+
get_vector2_from_packed_array,
155+
set_vector2_in_packed_array,
156+
resize_vector2_packed_array,
157+
add_vector3_to_packed_array,
158+
add_vector3_array_to_packed_array,
159+
delete_vector3_from_packed_array,
160+
get_vector3_from_packed_array,
161+
set_vector3_in_packed_array,
162+
resize_vector3_packed_array,
163+
is_sent_xr_same_instance_as_jvm_singleton,
164+
create_variant_array_of_user_type
165+
]

kt/entry-generation/godot-kotlin-symbol-processor/src/main/kotlin/godot/annotation/processor/ext/ksAnnotatedExt.kt

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,12 +19,16 @@ fun <T : Annotation> KSAnnotated.hasAnnotation(annotationClass: KClass<T>): Bool
1919
}
2020
}
2121

22-
fun <T : Annotation> KSAnnotation.hasAnnotation(annotationClass: KClass<T>): Boolean {
23-
return this.fqNameUnsafe == annotationClass.qualifiedName || this
22+
fun <T : Annotation> KSAnnotation.hasAnnotation(annotationClass: KClass<T>, alreadyEvaluated: MutableList<KSAnnotation> = mutableListOf()): Boolean {
23+
val annotationsOnAnnotation = this
2424
.annotationType
25+
.resolve()
26+
.declaration
2527
.annotations
28+
.filterNot { alreadyEvaluated.contains(it) }
2629
.toList()
27-
.any { it.hasAnnotation(annotationClass) }
30+
31+
return this.fqNameUnsafe == annotationClass.qualifiedName || annotationsOnAnnotation.any { it.hasAnnotation(annotationClass, alreadyEvaluated.apply { add(this@hasAnnotation) }) }
2832
}
2933

3034
fun KSAnnotated.hasRegistrationAnnotation(): Boolean {

kt/entry-generation/godot-kotlin-symbol-processor/src/main/kotlin/godot/annotation/processor/ext/ksClassDeclarationExt.kt

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import com.google.devtools.ksp.getConstructors
55
import com.google.devtools.ksp.getDeclaredProperties
66
import com.google.devtools.ksp.isAbstract
77
import com.google.devtools.ksp.isPublic
8+
import com.google.devtools.ksp.symbol.ClassKind
89
import com.google.devtools.ksp.symbol.KSClassDeclaration
910
import com.google.devtools.ksp.symbol.KSFunctionDeclaration
1011
import com.google.devtools.ksp.symbol.KSPropertyDeclaration
@@ -38,7 +39,7 @@ internal fun KSClassDeclaration.mapToClazz(
3839

3940
val registeredFunctions = getAllFunctions()
4041
.filter { function ->
41-
function.hasAnnotation(GodotMember::class) || function.overridesApiFunction()
42+
function.hasAnnotation(GodotMember::class) || function.overridesApiFunction() || function.overridesRegisteredFunction()
4243
}
4344
.mapNotNull { it.mapToRegisteredFunction(this, settings) }
4445
.toList()
@@ -67,7 +68,7 @@ internal fun KSClassDeclaration.mapToClazz(
6768
.map { it.mapToRegisteredSignal(declaredProperties.toList(), settings) }
6869
.toList()
6970

70-
val shouldBeRegistered = hasRegistrationAnnotation() ||
71+
val shouldBeRegistered = (classKind != ClassKind.ANNOTATION_CLASS && hasRegistrationAnnotation()) ||
7172
isAbstractAndContainsRegisteredMembers(registeredFunctions, registeredProperties, registeredSignals) ||
7273
isAbstractAndInheritsGodotBaseClass()
7374

@@ -152,6 +153,10 @@ private fun KSFunctionDeclaration.overridesApiFunction(isOveridee: Boolean = fal
152153
}
153154
}
154155

156+
private fun KSFunctionDeclaration.overridesRegisteredFunction(): Boolean {
157+
return hasAnnotation(GodotMember::class) || (findOverridee() as? KSFunctionDeclaration)?.overridesRegisteredFunction() == true
158+
}
159+
155160
private fun KSPropertyDeclaration.overridesRegisteredProperty(): Boolean {
156161
return hasAnnotation(GodotMember::class) || findOverridee()?.overridesRegisteredProperty() == true
157162
}

0 commit comments

Comments
 (0)