This repository was archived by the owner on Aug 27, 2026. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 64
Expand file tree
/
Copy pathInterfaceEventArgsClass.cs
More file actions
111 lines (88 loc) · 2.68 KB
/
Copy pathInterfaceEventArgsClass.cs
File metadata and controls
111 lines (88 loc) · 2.68 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using MonoDroid.Generation;
using Xamarin.SourceWriter;
namespace generator.SourceWriters
{
public class InterfaceEventArgsClass : ClassWriter
{
public InterfaceEventArgsClass (InterfaceGen iface, Method method)
{
Name = iface.GetArgsName (method);
Inherits = "global::System.EventArgs";
IsPublic = true;
IsPartial = true;
UsePriorityOrder = true;
Comments.Add ($"// event args for {iface.JavaName}.{method.JavaName}");
if (method.IsEventHandlerWithHandledProperty)
Properties.Add (new HandledProperty ());
}
public void AddMembersFromMethod (InterfaceGen iface, Method method, CodeGenerationOptions opt)
{
AddConstructor (iface, method, opt);
AddProperties (method, opt);
}
void AddConstructor (InterfaceGen iface, Method method, CodeGenerationOptions opt)
{
var ctor = new ConstructorWriter {
Name = iface.GetArgsName (method),
IsPublic = true
};
if (method.IsEventHandlerWithHandledProperty) {
ctor.Parameters.Add (new MethodParameterWriter ("handled", TypeReferenceWriter.Bool));
ctor.Body.Add ("this.handled = handled;");
}
foreach (var p in method.Parameters) {
if (p.IsSender)
continue;
ctor.Parameters.Add (new MethodParameterWriter (p.Name, new TypeReferenceWriter (opt.GetTypeReferenceName (p))));
ctor.Body.Add ($"this.{opt.GetSafeIdentifier (p.Name)} = {opt.GetSafeIdentifier (p.Name)};");
}
Constructors.Add (ctor);
}
void AddProperties (Method method, CodeGenerationOptions opt)
{
foreach (var p in method.Parameters) {
if (p.IsSender)
continue;
// We've already added this property from a different overload
if (Properties.Any (prop => prop.Name == p.PropertyName))
continue;
Fields.Add (new FieldWriter {
Name = opt.GetSafeIdentifier (p.Name),
Type = new TypeReferenceWriter (opt.GetTypeReferenceName (p))
});
var prop = new PropertyWriter {
Name = p.PropertyName,
PropertyType = new TypeReferenceWriter (opt.GetTypeReferenceName (p)),
IsPublic = true,
HasGet = true
};
prop.GetBody.Add ($"return {opt.GetSafeIdentifier (p.Name)};");
Properties.Add (prop);
}
}
}
public class HandledProperty : PropertyWriter
{
public HandledProperty ()
{
Name = "Handled";
PropertyType = TypeReferenceWriter.Bool;
IsPublic = true;
HasGet = true;
GetBody.Add ("return handled;");
HasSet = true;
SetBody.Add ("handled = value;");
}
public override void Write (CodeWriter writer)
{
writer.WriteLine ("bool handled;");
writer.WriteLine ();
base.Write (writer);
}
}
}