1
1
using System ;
2
2
using System . Linq ;
3
3
using System . Text . RegularExpressions ;
4
+ using System . Xml ;
4
5
using System . Xml . Linq ;
5
6
using Java . Interop . Tools . JavaCallableWrappers ;
6
7
using MonoDroid . Utils ;
@@ -26,6 +27,7 @@ public static ClassGen CreateClass (XElement pkg, XElement elem, CodeGenerationO
26
27
} ;
27
28
28
29
FillApiSince ( klass , pkg , elem ) ;
30
+ SetLineInfo ( klass , elem , options ) ;
29
31
30
32
foreach ( var child in elem . Elements ( ) ) {
31
33
switch ( child . Name . LocalName ) {
@@ -35,26 +37,26 @@ public static ClassGen CreateClass (XElement pkg, XElement elem, CodeGenerationO
35
37
klass . AddImplementedInterface ( iname ) ;
36
38
break ;
37
39
case "method" :
38
- klass . AddMethod ( CreateMethod ( klass , child ) ) ;
40
+ klass . AddMethod ( CreateMethod ( klass , child , options ) ) ;
39
41
break ;
40
42
case "constructor" :
41
- klass . Ctors . Add ( CreateCtor ( klass , child ) ) ;
43
+ klass . Ctors . Add ( CreateCtor ( klass , child , options ) ) ;
42
44
break ;
43
45
case "field" :
44
- klass . AddField ( CreateField ( klass , child ) ) ;
46
+ klass . AddField ( CreateField ( klass , child , options ) ) ;
45
47
break ;
46
48
case "typeParameters" :
47
49
break ; // handled at GenBaseSupport
48
50
default :
49
- Report . LogCodedWarning ( 0 , Report . WarningUnexpectedChild , child . Name . ToString ( ) ) ;
51
+ Report . LogCodedWarning ( 0 , Report . WarningUnexpectedChild , klass , child . Name . ToString ( ) ) ;
50
52
break ;
51
53
}
52
54
}
53
55
54
56
return klass ;
55
57
}
56
58
57
- public static Ctor CreateCtor ( GenBase declaringType , XElement elem )
59
+ public static Ctor CreateCtor ( GenBase declaringType , XElement elem , CodeGenerationOptions options = null )
58
60
{
59
61
var ctor = new Ctor ( declaringType ) {
60
62
ApiAvailableSince = declaringType . ApiAvailableSince ,
@@ -65,6 +67,8 @@ public static Ctor CreateCtor (GenBase declaringType, XElement elem)
65
67
Visibility = elem . Visibility ( )
66
68
} ;
67
69
70
+ SetLineInfo ( ctor , elem , options ) ;
71
+
68
72
var idx = ctor . Name . LastIndexOf ( '.' ) ;
69
73
70
74
if ( idx > 0 )
@@ -81,14 +85,14 @@ public static Ctor CreateCtor (GenBase declaringType, XElement elem)
81
85
82
86
if ( enclosingType == null ) {
83
87
ctor . MissingEnclosingClass = true ;
84
- Report . LogCodedWarning ( 0 , Report . WarningMissingClassForConstructor , ctor . Name , expectedEnclosingName ) ;
88
+ Report . LogCodedWarning ( 0 , Report . WarningMissingClassForConstructor , ctor , ctor . Name , expectedEnclosingName ) ;
85
89
} else
86
- ctor . Parameters . AddFirst ( CreateParameterFromClassElement ( enclosingType ) ) ;
90
+ ctor . Parameters . AddFirst ( CreateParameterFromClassElement ( enclosingType , options ) ) ;
87
91
}
88
92
89
93
foreach ( var child in elem . Elements ( ) ) {
90
94
if ( child . Name == "parameter" )
91
- ctor . Parameters . Add ( CreateParameter ( child ) ) ;
95
+ ctor . Parameters . Add ( CreateParameter ( child , options ) ) ;
92
96
}
93
97
94
98
ctor . Name = EnsureValidIdentifer ( ctor . Name ) ;
@@ -98,7 +102,7 @@ public static Ctor CreateCtor (GenBase declaringType, XElement elem)
98
102
return ctor ;
99
103
}
100
104
101
- public static Field CreateField ( GenBase declaringType , XElement elem )
105
+ public static Field CreateField ( GenBase declaringType , XElement elem , CodeGenerationOptions options = null )
102
106
{
103
107
var field = new Field {
104
108
ApiAvailableSince = declaringType . ApiAvailableSince ,
@@ -110,7 +114,7 @@ public static Field CreateField (GenBase declaringType, XElement elem)
110
114
IsStatic = elem . XGetAttribute ( "static" ) == "true" ,
111
115
JavaName = elem . XGetAttribute ( "name" ) ,
112
116
NotNull = elem . XGetAttribute ( "not-null" ) == "true" ,
113
- SetterParameter = CreateParameter ( elem ) ,
117
+ SetterParameter = CreateParameter ( elem , options ) ,
114
118
TypeName = elem . XGetAttribute ( "type" ) ,
115
119
Value = elem . XGetAttribute ( "value" ) , // do not trim
116
120
Visibility = elem . XGetAttribute ( "visibility" )
@@ -131,6 +135,7 @@ public static Field CreateField (GenBase declaringType, XElement elem)
131
135
}
132
136
133
137
FillApiSince ( field , elem ) ;
138
+ SetLineInfo ( field , elem , options ) ;
134
139
135
140
return field ;
136
141
}
@@ -214,6 +219,7 @@ public static InterfaceGen CreateInterface (XElement pkg, XElement elem, CodeGen
214
219
} ;
215
220
216
221
FillApiSince ( iface , pkg , elem ) ;
222
+ SetLineInfo ( iface , elem , options ) ;
217
223
218
224
foreach ( var child in elem . Elements ( ) ) {
219
225
switch ( child . Name . LocalName ) {
@@ -223,23 +229,23 @@ public static InterfaceGen CreateInterface (XElement pkg, XElement elem, CodeGen
223
229
iface . AddImplementedInterface ( iname ) ;
224
230
break ;
225
231
case "method" :
226
- iface . AddMethod ( CreateMethod ( iface , child ) ) ;
232
+ iface . AddMethod ( CreateMethod ( iface , child , options ) ) ;
227
233
break ;
228
234
case "field" :
229
- iface . AddField ( CreateField ( iface , child ) ) ;
235
+ iface . AddField ( CreateField ( iface , child , options ) ) ;
230
236
break ;
231
237
case "typeParameters" :
232
238
break ; // handled at GenBaseSupport
233
239
default :
234
- Report . LogCodedWarning ( 0 , Report . WarningUnexpectedInterfaceChild , child . ToString ( ) ) ;
240
+ Report . LogCodedWarning ( 0 , Report . WarningUnexpectedInterfaceChild , iface , child . ToString ( ) ) ;
235
241
break ;
236
242
}
237
243
}
238
244
239
245
return iface ;
240
246
}
241
247
242
- public static Method CreateMethod ( GenBase declaringType , XElement elem )
248
+ public static Method CreateMethod ( GenBase declaringType , XElement elem , CodeGenerationOptions options = null )
243
249
{
244
250
var method = new Method ( declaringType ) {
245
251
ApiAvailableSince = declaringType . ApiAvailableSince ,
@@ -284,19 +290,20 @@ public static Method CreateMethod (GenBase declaringType, XElement elem)
284
290
285
291
foreach ( var child in elem . Elements ( ) ) {
286
292
if ( child . Name == "parameter" )
287
- method . Parameters . Add ( CreateParameter ( child ) ) ;
293
+ method . Parameters . Add ( CreateParameter ( child , options ) ) ;
288
294
}
289
295
290
296
method . Name = EnsureValidIdentifer ( method . Name ) ;
291
297
292
298
method . FillReturnType ( ) ;
293
299
294
300
FillApiSince ( method , elem ) ;
301
+ SetLineInfo ( method , elem , options ) ;
295
302
296
303
return method ;
297
304
}
298
305
299
- public static Parameter CreateParameter ( XElement elem )
306
+ public static Parameter CreateParameter ( XElement elem , CodeGenerationOptions options = null )
300
307
{
301
308
string managedName = elem . XGetAttribute ( "managedName" ) ;
302
309
string name = ! string . IsNullOrEmpty ( managedName ) ? managedName : TypeNameUtilities . MangleName ( EnsureValidIdentifer ( elem . XGetAttribute ( "name" ) ) ) ;
@@ -308,15 +315,19 @@ public static Parameter CreateParameter (XElement elem)
308
315
var result = new Parameter ( name , enum_type ?? java_type , enum_type ?? managed_type , enum_type != null , java_type , not_null ) ;
309
316
if ( elem . Attribute ( "sender" ) != null )
310
317
result . IsSender = true ;
318
+ SetLineInfo ( result , elem , options ) ;
311
319
return result ;
312
320
}
313
321
314
- public static Parameter CreateParameterFromClassElement ( XElement elem )
322
+ public static Parameter CreateParameterFromClassElement ( XElement elem , CodeGenerationOptions options )
315
323
{
316
324
string name = "__self" ;
317
325
string java_type = elem . XGetAttribute ( "name" ) ;
318
326
string java_package = elem . Parent . XGetAttribute ( "name" ) ;
319
- return new Parameter ( name , java_package + "." + java_type , null , false ) ;
327
+ var p = new Parameter ( name , java_package + "." + java_type , null , false ) ;
328
+
329
+ SetLineInfo ( p , elem , options ) ;
330
+ return p ;
320
331
}
321
332
322
333
static string EnsureValidIdentifer ( string name )
@@ -403,5 +414,15 @@ static bool IsPrefixableName (string name)
403
414
// IBlahBlah is not prefixed with 'I'
404
415
return name . Length <= 2 || name [ 0 ] != 'I' || ! char . IsUpper ( name [ 1 ] ) ;
405
416
}
417
+
418
+ static void SetLineInfo ( ISourceLineInfo model , XNode node , CodeGenerationOptions options )
419
+ {
420
+ model . SourceFile = options ? . ApiXmlFile ;
421
+
422
+ if ( node is IXmlLineInfo info && info . HasLineInfo ( ) ) {
423
+ model . LineNumber = info . LineNumber ;
424
+ model . LinePosition = info . LinePosition ;
425
+ }
426
+ }
406
427
}
407
428
}
0 commit comments