@@ -5,6 +5,7 @@ import 'package:build/build.dart';
5
5
import 'package:godot_dart/godot_dart.dart' ;
6
6
import 'package:source_gen/source_gen.dart' ;
7
7
8
+ const _godotScriptChecker = TypeChecker .fromRuntime (GodotScript );
8
9
const _godotExportChecker = TypeChecker .fromRuntime (GodotExport );
9
10
const _godotSignalChecker = TypeChecker .fromRuntime (GodotSignal );
10
11
const _godotPropertyChecker = TypeChecker .fromRuntime (GodotProperty );
@@ -22,11 +23,14 @@ class GodotScriptAnnotationGenerator
22
23
);
23
24
}
24
25
26
+ final packageName = buildStep.inputId.package;
27
+
25
28
log.info ('Trying to write output for ${element .name }' );
26
- yield _createTypeInfo (element, annotation);
29
+ yield _createTypeInfo (element, annotation, packageName );
27
30
}
28
31
29
- String _createTypeInfo (ClassElement element, ConstantReader annotation) {
32
+ String _createTypeInfo (
33
+ ClassElement element, ConstantReader annotation, String packageName) {
30
34
final buffer = StringBuffer ();
31
35
32
36
// Find the first superclass that has nativeTypeName defined
@@ -98,7 +102,8 @@ class GodotScriptAnnotationGenerator
98
102
for (final propertyField in propertyFields) {
99
103
final propertyAnnotation =
100
104
_godotPropertyChecker.firstAnnotationOf (propertyField);
101
- buffer.write (_generatePropertyInfo (propertyField, propertyAnnotation));
105
+ buffer.write (_generatePropertyInfo (
106
+ propertyField, propertyAnnotation, packageName));
102
107
buffer.writeln (',' );
103
108
}
104
109
buffer.writeln (' ],' );
@@ -169,7 +174,7 @@ class GodotScriptAnnotationGenerator
169
174
}
170
175
171
176
String _generatePropertyInfo (
172
- FieldElement field, DartObject ? propertyAnnotation) {
177
+ FieldElement field, DartObject ? propertyAnnotation, String packageName ) {
173
178
final buffer = StringBuffer ();
174
179
175
180
final reader = ConstantReader (propertyAnnotation);
@@ -185,7 +190,7 @@ class GodotScriptAnnotationGenerator
185
190
if (propertyHint != null ) {
186
191
buffer.writeln (' hint: ${propertyHint .toString ()},' );
187
192
buffer.writeln (
188
- ' hintString: \' ${field .type . getDisplayString ( withNullability : false )}\' ,' );
193
+ ' hintString: \' ${_getPropertyHintString ( field .type , packageName )}\' ,' );
189
194
}
190
195
191
196
buffer.write (')' );
@@ -207,6 +212,20 @@ class GodotScriptAnnotationGenerator
207
212
return null ;
208
213
}
209
214
215
+ String _getPropertyHintString (DartType type, String packageName) {
216
+ final element = type.element;
217
+ if (element is ClassElement &&
218
+ _godotScriptChecker.hasAnnotationOf (element,
219
+ throwOnUnresolved: false )) {
220
+ final relativeName = element.library.librarySource.fullName
221
+ .replaceFirst ('/$packageName /' , '' );
222
+ return 'res://src/$relativeName ' ;
223
+ }
224
+
225
+ // Else, return its type
226
+ return '${type .getDisplayString (withNullability : false )}' ;
227
+ }
228
+
210
229
String _typeInfoForType (DartType type) {
211
230
bool isPrimitive (DartType type) {
212
231
return type.isDartCoreBool ||
0 commit comments