1 |
#Region "Microsoft.VisualBasic::2d59ebd95f37f0df7d1cbc8d957319a0, Microsoft.VisualBasic.Core\ApplicationServices\VBDev\XmlDoc\ProjectType.vb"
|
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 |
#End Region
|
49 |
|
50 |
|
51 |
|
52 |
|
53 |
|
54 |
Imports System.Runtime.CompilerServices
|
55 |
Imports System.Xml
|
56 |
Imports Microsoft.VisualBasic.ApplicationServices.Development.XmlDoc.Serialization
|
57 |
Imports Microsoft.VisualBasic.Text
|
58 |
Imports Microsoft.VisualBasic.Linq
|
59 |
|
60 |
Namespace ApplicationServices.Development.XmlDoc.Assembly
|
61 |
|
62 |
|
63 |
|
64 |
|
65 |
|
66 |
|
67 |
|
68 |
Public Class ProjectType
|
69 |
|
70 |
Protected projectNamespace As ProjectNamespace
|
71 |
|
72 |
Protected fields As Dictionary(Of String, ProjectMember)
|
73 |
Protected events As Dictionary(Of String, ProjectMember)
|
74 |
|
75 |
|
76 |
|
77 |
|
78 |
Protected Friend properties As Dictionary(Of String, List(Of ProjectMember))
|
79 |
|
80 |
|
81 |
|
82 |
Protected Friend methods As Dictionary(Of String, List(Of ProjectMember))
|
83 |
|
84 |
Public ReadOnly Property [Namespace]() As ProjectNamespace
|
85 |
<MethodImpl(MethodImplOptions.AggressiveInlining)>
|
86 |
Get
|
87 |
Return Me.projectNamespace
|
88 |
End Get
|
89 |
End Property
|
90 |
|
91 |
Public Property Name As String
|
92 |
Public Property Summary As String
|
93 |
Public Property Remarks As String
|
94 |
|
95 |
Friend Sub New()
|
96 |
properties = New Dictionary(Of String, List(Of ProjectMember))
|
97 |
methods = New Dictionary(Of String, List(Of ProjectMember))
|
98 |
End Sub
|
99 |
|
100 |
Public Sub New(projectNamespace As ProjectNamespace)
|
101 |
Me.projectNamespace = projectNamespace
|
102 |
|
103 |
Me.fields = New Dictionary(Of String, ProjectMember)()
|
104 |
Me.properties = New Dictionary(Of String, List(Of ProjectMember))()
|
105 |
Me.methods = New Dictionary(Of String, List(Of ProjectMember))()
|
106 |
Me.events = New Dictionary(Of String, ProjectMember)
|
107 |
End Sub
|
108 |
|
109 |
Protected Sub New(type As ProjectType)
|
110 |
projectNamespace = type.projectNamespace
|
111 |
events = type.events
|
112 |
fields = type.fields
|
113 |
properties = type.properties
|
114 |
methods = type.methods
|
115 |
Name = type.Name
|
116 |
Summary = type.Summary
|
117 |
Remarks = type.Remarks
|
118 |
End Sub
|
119 |
|
120 |
Friend Sub New(t1 As ProjectType, t2 As ProjectType)
|
121 |
projectNamespace = t1.projectNamespace
|
122 |
fields = (t1.fields.Values.AsList + t2.fields.Values).GroupBy(Function(f) f.Name.ToLower).ToDictionary(Function(g) g.Key, Function(g) g.Sum(Me))
|
123 |
events = (t1.events.Values.AsList + t2.events.Values).GroupBy(Function(f) f.Name.ToLower).ToDictionary(Function(g) g.Key, Function(g) g.Sum(Me))
|
124 |
properties = (t1.properties.Values.AsList + t2.properties.Values).IteratesALL.GroupBy(Function(f) f.Name.ToLower).ToDictionary(Function(g) g.Key, Function(g) g.ToList)
|
125 |
methods = (t1.methods.Values.AsList + t2.methods.Values).IteratesALL.GroupBy(Function(f) f.Name.ToLower).ToDictionary(Function(g) g.Key, Function(g) g.ToList)
|
126 |
End Sub
|
127 |
|
128 |
Public Overrides Function ToString() As String
|
129 |
Return Name
|
130 |
End Function
|
131 |
|
132 |
<MethodImpl(MethodImplOptions.AggressiveInlining)>
|
133 |
Public Function GetMethods(methodName As String) As List(Of ProjectMember)
|
134 |
Return getInternal(methods, methodName.ToLower)
|
135 |
End Function
|
136 |
|
137 |
Public Function EnsureMethod(methodName As String) As ProjectMember
|
138 |
Dim pmlist As List(Of ProjectMember) = Me.GetMethods(methodName)
|
139 |
Dim pm As New ProjectMember(Me) With {
|
140 |
.Name = methodName
|
141 |
}
|
142 |
|
143 |
Call pmlist.Add(pm)
|
144 |
|
145 |
Return pm
|
146 |
End Function
|
147 |
|
148 |
Private Shared Function getInternal(ByRef table As Dictionary(Of String, List(Of ProjectMember)), name$) As List(Of ProjectMember)
|
149 |
If table.ContainsKey(name) Then
|
150 |
Return table(name)
|
151 |
Else
|
152 |
Dim list As New List(Of ProjectMember)
|
153 |
table.Add(name, list)
|
154 |
Return list
|
155 |
End If
|
156 |
End Function
|
157 |
|
158 |
<MethodImpl(MethodImplOptions.AggressiveInlining)>
|
159 |
Public Function GetProperties(propertyName As String) As List(Of ProjectMember)
|
160 |
Return getInternal(properties, propertyName.ToLower)
|
161 |
End Function
|
162 |
|
163 |
Public Function EnsureProperty(propertyName As String) As ProjectMember
|
164 |
Dim pmlist As List(Of ProjectMember) = Me.GetProperties(propertyName)
|
165 |
Dim pm As New ProjectMember(Me) With {
|
166 |
.Name = propertyName
|
167 |
}
|
168 |
|
169 |
Call pmlist.Add(pm)
|
170 |
|
171 |
Return pm
|
172 |
End Function
|
173 |
|
174 |
Public Function GetField(fieldName As String) As ProjectMember
|
175 |
If Me.fields.ContainsKey(fieldName.ToLower()) Then
|
176 |
Return Me.fields(fieldName.ToLower())
|
177 |
End If
|
178 |
|
179 |
Return Nothing
|
180 |
End Function
|
181 |
|
182 |
Public Function EnsureField(fieldName As String) As ProjectMember
|
183 |
Dim pm As ProjectMember = Me.GetField(fieldName)
|
184 |
|
185 |
If pm Is Nothing Then
|
186 |
pm = New ProjectMember(Me) With {
|
187 |
.Name = fieldName
|
188 |
}
|
189 |
|
190 |
Me.fields.Add(fieldName.ToLower(), pm)
|
191 |
End If
|
192 |
|
193 |
Return pm
|
194 |
End Function
|
195 |
|
196 |
Public Function GetEvent(eventName As String) As ProjectMember
|
197 |
If Me.events.ContainsKey(eventName.ToLower()) Then
|
198 |
Return Me.events(eventName.ToLower())
|
199 |
End If
|
200 |
|
201 |
Return Nothing
|
202 |
End Function
|
203 |
|
204 |
Public Function EnsureEvent(eventName As String) As ProjectMember
|
205 |
Dim pm As ProjectMember = Me.GetField(eventName)
|
206 |
|
207 |
If pm Is Nothing Then
|
208 |
pm = New ProjectMember(Me) With {
|
209 |
.Name = eventName
|
210 |
}
|
211 |
|
212 |
Me.fields.Add(eventName.ToLower(), pm)
|
213 |
End If
|
214 |
|
215 |
Return pm
|
216 |
End Function
|
217 |
|
218 |
Public Sub LoadFromNode(xn As XmlNode)
|
219 |
Dim summaryNode As XmlNode = xn.SelectSingleNode("summary")
|
220 |
|
221 |
If summaryNode IsNot Nothing Then
|
222 |
Me.Summary = summaryNode.InnerText.Trim(ASCII.CR, ASCII.LF, " ")
|
223 |
End If
|
224 |
|
225 |
summaryNode = xn.SelectSingleNode("remarks")
|
226 |
|
227 |
If Not summaryNode Is Nothing Then
|
228 |
Remarks = summaryNode.InnerText.Trim(ASCII.CR, ASCII.LF, " ")
|
229 |
End If
|
230 |
End Sub
|
231 |
End Class
|
232 |
End Namespace
|