1- using System . Reflection ;
2- using System . Runtime . InteropServices ;
1+ using System . Runtime . InteropServices ;
32using TypeTreeGeneratorAPI . TypeTreeGenerator ;
43
54namespace TypeTreeGeneratorAPI
65{
76 public static class NativeAPI
87 {
8+ private static bool addMonoBehaviourRootNodes = true ;
9+
10+ [ UnmanagedCallersOnly ( EntryPoint = "TypeTreeGenerator_setAddMonoBehaviourRootNodes" ) ]
11+ public static int TypeTreeGenerator_Config_setAddMonoBehaviourRootNodes ( byte value )
12+ {
13+ switch ( value )
14+ {
15+ case 0 :
16+ addMonoBehaviourRootNodes = false ;
17+ break ;
18+ case 1 :
19+ addMonoBehaviourRootNodes = true ;
20+ break ;
21+ default :
22+ Console . WriteLine ( $ "Expected True(1)/False(0), but got { value } for TypeTreeGenerator_setAddMonoBehaviourRootNodes") ;
23+ return - 1 ;
24+ }
25+ return 0 ;
26+ }
27+
928 [ UnmanagedCallersOnly ( EntryPoint = "TypeTreeGenerator_init" ) ]
1029 public static IntPtr TypeTreeGenerator_init ( IntPtr unityVersionPtr , IntPtr generatorName )
1130 {
@@ -130,14 +149,36 @@ public static IntPtr TypeTreeGenerator_getLoadedDLLNames(IntPtr typeTreeGenerato
130149 var json = string . Join ( "," , names . Select ( name => $ "\" { name } \" ") ) ;
131150 return Marshal . StringToCoTaskMemUTF8 ( $ "[{ json } ]") ;
132151 }
133-
152+
134153 public enum GenerateTreeNodesResult
135154 {
136155 Ok = 0 ,
137156 Error = - 1 ,
138157 NotFound = - 2 ,
139158 }
140159
160+ private static List < TypeTreeNode > ? GenerateTypeTreeNodes ( TypeTreeGeneratorHandle handle , string assemblyName , string fullName )
161+ {
162+ var typeTreeNodes = handle . Instance . GenerateTreeNodes ( assemblyName , fullName ) ;
163+ if ( addMonoBehaviourRootNodes && typeTreeNodes != null && fullName != "UnityEngine.MonoBehaviour" )
164+ {
165+ var monoBehaviourRootNodes = handle . Instance . GetMonoBehaviourRootNodes ( ) ;
166+ if ( typeTreeNodes . Count == 0 )
167+ {
168+ return monoBehaviourRootNodes ;
169+ }
170+ if ( typeTreeNodes [ 0 ] . m_Level == 0 )
171+ {
172+ // move head to MonoBehaviour head
173+ monoBehaviourRootNodes [ 0 ] = typeTreeNodes [ 0 ] ;
174+ typeTreeNodes = typeTreeNodes . Slice ( 0 , typeTreeNodes . Count - 1 ) ;
175+ }
176+ return monoBehaviourRootNodes . Concat ( typeTreeNodes ) . ToList ( ) ;
177+ }
178+ return typeTreeNodes ;
179+ }
180+
181+
141182 [ UnmanagedCallersOnly ( EntryPoint = "TypeTreeGenerator_generateTreeNodesJson" ) ]
142183 public static GenerateTreeNodesResult TypeTreeGenerator_generateTreeNodesJson ( IntPtr typeTreeGeneratorPtr , IntPtr assemblyNamePtr , IntPtr fullNamePtr , IntPtr jsonAddr )
143184 {
@@ -151,8 +192,7 @@ public static GenerateTreeNodesResult TypeTreeGenerator_generateTreeNodesJson(In
151192 try
152193 {
153194 var handle = ( TypeTreeGeneratorHandle ) GCHandle . FromIntPtr ( typeTreeGeneratorPtr ) . Target ! ;
154-
155- var typeTreeNodes = handle . Instance . GenerateTreeNodes ( assemblyName , fullName ) ;
195+ var typeTreeNodes = GenerateTypeTreeNodes ( handle , assemblyName , fullName ) ;
156196 if ( typeTreeNodes == null )
157197 {
158198 Marshal . WriteIntPtr ( jsonAddr , IntPtr . Zero ) ;
@@ -182,7 +222,7 @@ public static GenerateTreeNodesResult TypeTreeGenerator_generateTreeNodesRaw(Int
182222 try
183223 {
184224 var handle = ( TypeTreeGeneratorHandle ) GCHandle . FromIntPtr ( typeTreeGeneratorPtr ) . Target ! ;
185- var typeTreeNodes = handle . Instance . GenerateTreeNodes ( assemblyName , fullName ) ;
225+ var typeTreeNodes = GenerateTypeTreeNodes ( handle , assemblyName , fullName ) ;
186226 if ( typeTreeNodes == null )
187227 {
188228 Marshal . WriteIntPtr ( arrAddrPtr , IntPtr . Zero ) ;
@@ -218,8 +258,7 @@ public static int TypeTreeGenerator_freeTreeNodesRaw(IntPtr arrAddr, int arrLeng
218258 return 0 ;
219259 }
220260
221- [ UnmanagedCallersOnly ( EntryPoint = "TypeTreeGenerator_getMonoBehaviorDefinitions" ) ]
222- public static int TypeTreeGenerator_getMonoBehaviorDefinitions ( IntPtr typeTreeGeneratorPtr , IntPtr arrAddrPtr , IntPtr arrLengthPtr )
261+ public static int _TypeTreeGenerator_getMonoBehaviourDefinitions ( IntPtr typeTreeGeneratorPtr , IntPtr arrAddrPtr , IntPtr arrLengthPtr )
223262 {
224263 if ( typeTreeGeneratorPtr == IntPtr . Zero )
225264 {
@@ -248,14 +287,12 @@ public static int TypeTreeGenerator_getMonoBehaviorDefinitions(IntPtr typeTreeGe
248287 }
249288 catch ( Exception ex )
250289 {
251- Console . WriteLine ( $ "Error geting mono behaviour definitions:\n { ex . Message } ") ;
290+ Console . WriteLine ( $ "Error getting MonoBehaviour definitions:\n { ex . Message } ") ;
252291 return - 1 ;
253292 }
254293 }
255294
256-
257- [ UnmanagedCallersOnly ( EntryPoint = "TypeTreeGenerator_freeMonoBehaviorDefinitions" ) ]
258- public static int TypeTreeGenerator_freeMonoBehaviorDefinitions ( IntPtr arrAddr , int arrLength )
295+ public static int _TypeTreeGenerator_freeMonoBehaviourDefinitions ( IntPtr arrAddr , int arrLength )
259296 {
260297 if ( arrAddr == IntPtr . Zero )
261298 {
@@ -272,6 +309,34 @@ public static int TypeTreeGenerator_freeMonoBehaviorDefinitions(IntPtr arrAddr,
272309 return 0 ;
273310 }
274311
312+ // alias for backward compatibility
313+ // alias for backward compatibility
314+ [ UnmanagedCallersOnly ( EntryPoint = "TypeTreeGenerator_getMonoBehaviourDefinitions" ) ]
315+ public static int TypeTreeGenerator_getMonoBehaviourDefinitions ( IntPtr typeTreeGeneratorPtr , IntPtr arrAddrPtr , IntPtr arrLengthPtr )
316+ {
317+ return _TypeTreeGenerator_getMonoBehaviourDefinitions ( typeTreeGeneratorPtr , arrAddrPtr , arrLengthPtr ) ;
318+ }
319+
320+ [ UnmanagedCallersOnly ( EntryPoint = "TypeTreeGenerator_freeMonoBehaviourDefinitions" ) ]
321+ public static int TypeTreeGenerator_freeMonoBehaviourDefinitions ( IntPtr arrAddr , int arrLength )
322+ {
323+ return _TypeTreeGenerator_freeMonoBehaviourDefinitions ( arrAddr , arrLength ) ;
324+ }
325+
326+ [ UnmanagedCallersOnly ( EntryPoint = "TypeTreeGenerator_getMonoBehaviorDefinitions" ) ]
327+ public static int TypeTreeGenerator_getMonoBehaviorDefinitions ( IntPtr typeTreeGeneratorPtr , IntPtr arrAddrPtr , IntPtr arrLengthPtr )
328+ {
329+ return _TypeTreeGenerator_getMonoBehaviourDefinitions ( typeTreeGeneratorPtr , arrAddrPtr , arrLengthPtr ) ;
330+ }
331+
332+ [ UnmanagedCallersOnly ( EntryPoint = "TypeTreeGenerator_freeMonoBehaviorDefinitions" ) ]
333+ public static int TypeTreeGenerator_freeMonoBehaviorDefinitions ( IntPtr arrAddr , int arrLength )
334+ {
335+ return _TypeTreeGenerator_freeMonoBehaviourDefinitions ( arrAddr , arrLength ) ;
336+ }
337+
338+
339+
275340 [ UnmanagedCallersOnly ( EntryPoint = "FreeCoTaskMem" ) ]
276341 public static void FreeCoTaskMem ( IntPtr ptr )
277342 {
0 commit comments