@@ -34,7 +34,7 @@ private static void OnContainerResized()
34
34
}
35
35
36
36
// Blacklists
37
- private static readonly HashSet < string > s_typeAndMemberBlacklist = new HashSet < string >
37
+ private static readonly HashSet < string > bl_typeAndMember = new HashSet < string >
38
38
{
39
39
#if CPP
40
40
// these cause a crash in IL2CPP
@@ -45,14 +45,14 @@ private static void OnContainerResized()
45
45
"Texture2D.SetPixelDataImpl" ,
46
46
#endif
47
47
} ;
48
- private static readonly HashSet < string > s_methodStartsWithBlacklist = new HashSet < string >
48
+ private static readonly HashSet < string > bl_memberNameStartsWith = new HashSet < string >
49
49
{
50
50
// these are redundant
51
51
"get_" ,
52
52
"set_" ,
53
53
} ;
54
54
55
- #endregion
55
+ #endregion
56
56
57
57
#region INSTANCE
58
58
@@ -132,24 +132,99 @@ private void OnPageTurned()
132
132
RefreshDisplay ( ) ;
133
133
}
134
134
135
- private void OnMemberFilterClicked ( MemberTypes type , Button button )
135
+ internal bool IsBlacklisted ( string sig ) => bl_typeAndMember . Any ( it => sig . Contains ( it ) ) ;
136
+ internal bool IsBlacklisted ( MethodInfo method ) => bl_memberNameStartsWith . Any ( it => method . Name . StartsWith ( it ) ) ;
137
+
138
+ internal string GetSig ( MemberInfo member ) => $ "{ member . DeclaringType . Name } .{ member . Name } ";
139
+ internal string AppendArgsToSig ( ParameterInfo [ ] args )
136
140
{
137
- if ( m_lastActiveMemButton )
141
+ string ret = " (" ;
142
+ foreach ( var param in args )
143
+ ret += $ "{ param . ParameterType . Name } { param . Name } , ";
144
+ ret += ")" ;
145
+ return ret ;
146
+ }
147
+
148
+ public void CacheMembers ( Type type )
149
+ {
150
+ var list = new List < CacheMember > ( ) ;
151
+ var cachedSigs = new HashSet < string > ( ) ;
152
+
153
+ var types = ReflectionHelpers . GetAllBaseTypes ( type ) ;
154
+
155
+ var flags = BindingFlags . NonPublic | BindingFlags . Public | BindingFlags . Static ;
156
+ if ( this is InstanceInspector )
157
+ flags |= BindingFlags . Instance ;
158
+
159
+ foreach ( var declaringType in types )
138
160
{
139
- var lastColors = m_lastActiveMemButton . colors ;
140
- lastColors . normalColor = new Color ( 0.2f , 0.2f , 0.2f ) ;
141
- m_lastActiveMemButton . colors = lastColors ;
161
+ var target = Target ;
162
+ #if CPP
163
+ target = target . Il2CppCast ( declaringType ) ;
164
+ #endif
165
+ IEnumerable < MemberInfo > infos = declaringType . GetMethods ( flags ) ;
166
+ infos = infos . Concat ( declaringType . GetProperties ( flags ) ) ;
167
+ infos = infos . Concat ( declaringType . GetFields ( flags ) ) ;
168
+
169
+ foreach ( var member in infos )
170
+ {
171
+ try
172
+ {
173
+ //ExplorerCore.Log($"Trying to cache member {sig}...");
174
+ //ExplorerCore.Log(member.DeclaringType.FullName + "." + member.Name);
175
+
176
+ var sig = GetSig ( member ) ;
177
+
178
+ var mi = member as MethodInfo ;
179
+ var pi = member as PropertyInfo ;
180
+ var fi = member as FieldInfo ;
181
+
182
+ if ( IsBlacklisted ( sig ) || mi != null && IsBlacklisted ( mi ) )
183
+ continue ;
184
+
185
+ var args = mi ? . GetParameters ( ) ?? pi ? . GetIndexParameters ( ) ;
186
+ if ( args != null )
187
+ {
188
+ if ( ! CacheMember . CanProcessArgs ( args ) )
189
+ continue ;
190
+
191
+ sig += AppendArgsToSig ( args ) ;
192
+ }
193
+
194
+ if ( cachedSigs . Contains ( sig ) )
195
+ continue ;
196
+
197
+ cachedSigs . Add ( sig ) ;
198
+
199
+ if ( mi != null )
200
+ list . Add ( new CacheMethod ( mi , target , m_scrollContent ) ) ;
201
+ else if ( pi != null )
202
+ list . Add ( new CacheProperty ( pi , target , m_scrollContent ) ) ;
203
+ else
204
+ list . Add ( new CacheField ( fi , target , m_scrollContent ) ) ;
205
+ }
206
+ catch ( Exception e )
207
+ {
208
+ ExplorerCore . LogWarning ( $ "Exception caching member { member . DeclaringType . FullName } .{ member . Name } !") ;
209
+ ExplorerCore . Log ( e . ToString ( ) ) ;
210
+ }
211
+ }
142
212
}
143
213
144
- m_memberFilter = type ;
145
- m_lastActiveMemButton = button ;
214
+ var typeList = types . ToList ( ) ;
146
215
147
- var colors = m_lastActiveMemButton . colors ;
148
- colors . normalColor = new Color ( 0.2f , 0.6f , 0.2f ) ;
149
- m_lastActiveMemButton . colors = colors ;
216
+ var sorted = new List < CacheMember > ( ) ;
217
+ sorted . AddRange ( list . Where ( it => it is CacheMethod )
218
+ . OrderBy ( it => typeList . IndexOf ( it . DeclaringType ) )
219
+ . ThenBy ( it => it . NameForFiltering ) ) ;
220
+ sorted . AddRange ( list . Where ( it => it is CacheProperty )
221
+ . OrderBy ( it => typeList . IndexOf ( it . DeclaringType ) )
222
+ . ThenBy ( it => it . NameForFiltering ) ) ;
223
+ sorted . AddRange ( list . Where ( it => it is CacheField )
224
+ . OrderBy ( it => typeList . IndexOf ( it . DeclaringType ) )
225
+ . ThenBy ( it => it . NameForFiltering ) ) ;
150
226
151
- FilterMembers ( null , true ) ;
152
- m_sliderScroller . m_slider . value = 1f ;
227
+ m_allMembers = sorted . ToArray ( ) ;
153
228
}
154
229
155
230
public override void Update ( )
@@ -178,6 +253,26 @@ public override void Update()
178
253
}
179
254
}
180
255
256
+ private void OnMemberFilterClicked ( MemberTypes type , Button button )
257
+ {
258
+ if ( m_lastActiveMemButton )
259
+ {
260
+ var lastColors = m_lastActiveMemButton . colors ;
261
+ lastColors . normalColor = new Color ( 0.2f , 0.2f , 0.2f ) ;
262
+ m_lastActiveMemButton . colors = lastColors ;
263
+ }
264
+
265
+ m_memberFilter = type ;
266
+ m_lastActiveMemButton = button ;
267
+
268
+ var colors = m_lastActiveMemButton . colors ;
269
+ colors . normalColor = new Color ( 0.2f , 0.6f , 0.2f ) ;
270
+ m_lastActiveMemButton . colors = colors ;
271
+
272
+ FilterMembers ( null , true ) ;
273
+ m_sliderScroller . m_slider . value = 1f ;
274
+ }
275
+
181
276
public void FilterMembers ( string nameFilter = null , bool force = false )
182
277
{
183
278
int lastCount = m_membersFiltered . Count ;
@@ -200,7 +295,7 @@ public void FilterMembers(string nameFilter = null, bool force = false)
200
295
}
201
296
202
297
// name filter
203
- if ( ! string . IsNullOrEmpty ( nameFilter ) && ! mem . NameForFiltering . Contains ( nameFilter ) )
298
+ if ( ! string . IsNullOrEmpty ( nameFilter ) && ! mem . NameForFiltering . Contains ( nameFilter ) )
204
299
continue ;
205
300
206
301
m_membersFiltered . Add ( mem ) ;
@@ -266,137 +361,6 @@ internal void UpdateWidths()
266
361
}
267
362
}
268
363
269
- public void CacheMembers ( Type type )
270
- {
271
- var list = new List < CacheMember > ( ) ;
272
- var cachedSigs = new HashSet < string > ( ) ;
273
-
274
- var types = ReflectionHelpers . GetAllBaseTypes ( type ) ;
275
-
276
- foreach ( var declaringType in types )
277
- {
278
- MemberInfo [ ] infos ;
279
- try
280
- {
281
- infos = declaringType . GetMembers ( ReflectionHelpers . CommonFlags ) ;
282
- }
283
- catch
284
- {
285
- ExplorerCore . Log ( $ "Exception getting members for type: { declaringType . FullName } ") ;
286
- continue ;
287
- }
288
-
289
- var target = Target ;
290
- #if CPP
291
- try
292
- {
293
- target = target . Il2CppCast ( declaringType ) ;
294
- }
295
- catch //(Exception e)
296
- {
297
- //ExplorerCore.LogWarning("Excepting casting " + target.GetType().FullName + " to " + declaringType.FullName);
298
- }
299
- #endif
300
-
301
- foreach ( var member in infos )
302
- {
303
- try
304
- {
305
- // make sure member type is Field, Method or Property (4 / 8 / 16)
306
- int m = ( int ) member . MemberType ;
307
- if ( m < 4 || m > 16 )
308
- continue ;
309
-
310
- //ExplorerCore.Log($"Trying to cache member {sig}...");
311
- //ExplorerCore.Log(member.DeclaringType.FullName + "." + member.Name);
312
-
313
- var pi = member as PropertyInfo ;
314
- var mi = member as MethodInfo ;
315
-
316
- if ( this is StaticInspector )
317
- {
318
- if ( member is FieldInfo fi && ! fi . IsStatic ) continue ;
319
- else if ( pi != null && ! pi . GetAccessors ( true ) [ 0 ] . IsStatic ) continue ;
320
- else if ( mi != null && ! mi . IsStatic ) continue ;
321
- }
322
-
323
- // check blacklisted members
324
- var sig = $ "{ member . DeclaringType . Name } .{ member . Name } ";
325
-
326
- if ( s_typeAndMemberBlacklist . Any ( it => sig . Contains ( it ) ) )
327
- continue ;
328
-
329
- if ( s_methodStartsWithBlacklist . Any ( it => member . Name . StartsWith ( it ) ) )
330
- continue ;
331
-
332
- if ( mi != null )
333
- AppendParams ( mi . GetParameters ( ) ) ;
334
- else if ( pi != null )
335
- AppendParams ( pi . GetIndexParameters ( ) ) ;
336
-
337
- void AppendParams ( ParameterInfo [ ] _args )
338
- {
339
- sig += " (" ;
340
- foreach ( var param in _args )
341
- sig += $ "{ param . ParameterType . Name } { param . Name } , ";
342
- sig += ")" ;
343
- }
344
-
345
- if ( cachedSigs . Contains ( sig ) )
346
- continue ;
347
-
348
- try
349
- {
350
- CacheMember cached ;
351
- if ( mi != null && CacheMember . CanProcessArgs ( mi . GetParameters ( ) ) )
352
- cached = new CacheMethod ( mi , target ) ;
353
- else if ( pi != null && CacheMember . CanProcessArgs ( pi . GetIndexParameters ( ) ) )
354
- cached = new CacheProperty ( pi , target ) ;
355
- else if ( member is FieldInfo fi )
356
- cached = new CacheField ( fi , target ) ;
357
- else
358
- continue ;
359
-
360
- cached . m_parentContent = m_scrollContent ;
361
-
362
- if ( cached != null )
363
- {
364
- cachedSigs . Add ( sig ) ;
365
- list . Add ( cached ) ;
366
- }
367
- }
368
- catch ( Exception e )
369
- {
370
- ExplorerCore . LogWarning ( $ "Exception caching member { sig } !") ;
371
- ExplorerCore . Log ( e . ToString ( ) ) ;
372
- }
373
- }
374
- catch ( Exception e )
375
- {
376
- ExplorerCore . LogWarning ( $ "Exception caching member { member . DeclaringType . FullName } .{ member . Name } !") ;
377
- ExplorerCore . Log ( e . ToString ( ) ) ;
378
- }
379
- }
380
- }
381
-
382
- var typeList = types . ToList ( ) ;
383
-
384
- var sorted = new List < CacheMember > ( ) ;
385
- sorted . AddRange ( list . Where ( it => it is CacheMethod )
386
- . OrderBy ( it => typeList . IndexOf ( it . DeclaringType ) )
387
- . ThenBy ( it => it . NameForFiltering ) ) ;
388
- sorted . AddRange ( list . Where ( it => it is CacheProperty )
389
- . OrderBy ( it => typeList . IndexOf ( it . DeclaringType ) )
390
- . ThenBy ( it => it . NameForFiltering ) ) ;
391
- sorted . AddRange ( list . Where ( it => it is CacheField )
392
- . OrderBy ( it => typeList . IndexOf ( it . DeclaringType ) )
393
- . ThenBy ( it => it . NameForFiltering ) ) ;
394
-
395
- m_allMembers = sorted . ToArray ( ) ;
396
-
397
- // ExplorerCore.Log("Cached " + m_allMembers.Length + " members");
398
- }
399
-
400
364
#region UI CONSTRUCTION
401
365
402
366
internal void ConstructUI ( )
@@ -578,7 +542,7 @@ private void AddFilterButton(GameObject parent, MemberTypes type, bool setEnable
578
542
579
543
internal void ConstructOptionsArea ( )
580
544
{
581
- var optionsRowObj = UIFactory . CreateHorizontalGroup ( Content , new Color ( 1 , 1 , 1 , 0 ) ) ;
545
+ var optionsRowObj = UIFactory . CreateHorizontalGroup ( Content , new Color ( 1 , 1 , 1 , 0 ) ) ;
582
546
var optionsLayout = optionsRowObj . AddComponent < LayoutElement > ( ) ;
583
547
optionsLayout . minHeight = 25 ;
584
548
var optionsGroup = optionsRowObj . GetComponent < HorizontalLayoutGroup > ( ) ;
@@ -596,7 +560,7 @@ internal void ConstructOptionsArea()
596
560
var updateText = updateButtonObj . GetComponentInChildren < Text > ( ) ;
597
561
updateText . text = "Update Values" ;
598
562
var updateBtn = updateButtonObj . GetComponent < Button > ( ) ;
599
- updateBtn . onClick . AddListener ( ( ) =>
563
+ updateBtn . onClick . AddListener ( ( ) =>
600
564
{
601
565
bool orig = m_autoUpdate ;
602
566
m_autoUpdate = true ;
0 commit comments