@@ -191,50 +191,68 @@ private Dictionary<string, TypeDefinition> FindReferencedTypes(List<TypeDefiniti
191191 // Iterate over all public properties
192192 foreach ( var property in bindableType . Properties . Where ( p => p . GetMethod ? . IsPublic == true ) )
193193 {
194- var propertyType = property . PropertyType ;
194+ ProcessPropertyType ( property . PropertyType , referencedTypes ) ;
195+ }
196+ }
195197
196- // Resolve the type
197- TypeDefinition ? resolvedType = null ;
198- try
199- {
200- resolvedType = propertyType . Resolve ( ) ;
201- }
202- catch ( Exception ex )
203- {
204- Log . LogMessage ( MessageImportance . Low , $ "Failed to resolve type { propertyType . FullName } : { ex . Message } ") ;
205- continue ;
206- }
198+ Log . LogMessage ( DefaultLogMessageLevel , $ "BindableTypeLinkerGenerator: Found { referencedTypes . Count } referenced types to preserve") ;
199+ return referencedTypes ;
200+ }
207201
208- if ( resolvedType == null )
209- {
210- continue ;
211- }
202+ private void ProcessPropertyType ( TypeReference propertyType , Dictionary < string , TypeDefinition > referencedTypes )
203+ {
204+ // Resolve the type
205+ TypeDefinition ? resolvedType = null ;
206+ try
207+ {
208+ resolvedType = propertyType . Resolve ( ) ;
209+ }
210+ catch ( Exception ex )
211+ {
212+ Log . LogMessage ( MessageImportance . Low , $ "Failed to resolve type { propertyType . FullName } : { ex . Message } ") ;
213+ return ;
214+ }
212215
213- // Skip if type already has Bindable attribute
214- if ( HasBindableAttribute ( resolvedType ) )
215- {
216- Log . LogMessage ( MessageImportance . Low , $ "Skipping { resolvedType . FullName } - already has Bindable attribute") ;
217- continue ;
218- }
216+ if ( resolvedType == null )
217+ {
218+ return ;
219+ }
219220
220- // Skip if type has no properties
221- if ( ! resolvedType . Properties . Any ( ) )
222- {
223- Log . LogMessage ( MessageImportance . Low , $ "Skipping { resolvedType . FullName } - has no properties") ;
224- continue ;
225- }
221+ // Process the main type
222+ AddTypeIfNeeded ( resolvedType , referencedTypes ) ;
226223
227- // Add to referenced types
228- if ( ! referencedTypes . ContainsKey ( resolvedType . FullName ) )
229- {
230- referencedTypes [ resolvedType . FullName ] = resolvedType ;
231- Log . LogMessage ( DefaultLogMessageLevel , $ "BindableTypeLinkerGenerator: Adding referenced type { resolvedType . FullName } " ) ;
232- }
224+ // Process generic arguments (e.g., List<Entity> should also process Entity)
225+ if ( propertyType is GenericInstanceType genericType )
226+ {
227+ foreach ( var genericArg in genericType . GenericArguments )
228+ {
229+ ProcessPropertyType ( genericArg , referencedTypes ) ;
233230 }
234231 }
232+ }
235233
236- Log . LogMessage ( DefaultLogMessageLevel , $ "BindableTypeLinkerGenerator: Found { referencedTypes . Count } referenced types to preserve") ;
237- return referencedTypes ;
234+ private void AddTypeIfNeeded ( TypeDefinition resolvedType , Dictionary < string , TypeDefinition > referencedTypes )
235+ {
236+ // Skip if type already has Bindable attribute
237+ if ( HasBindableAttribute ( resolvedType ) )
238+ {
239+ Log . LogMessage ( MessageImportance . Low , $ "Skipping { resolvedType . FullName } - already has Bindable attribute") ;
240+ return ;
241+ }
242+
243+ // Skip if type has no properties
244+ if ( ! resolvedType . Properties . Any ( ) )
245+ {
246+ Log . LogMessage ( MessageImportance . Low , $ "Skipping { resolvedType . FullName } - has no properties") ;
247+ return ;
248+ }
249+
250+ // Add to referenced types
251+ if ( ! referencedTypes . ContainsKey ( resolvedType . FullName ) )
252+ {
253+ referencedTypes [ resolvedType . FullName ] = resolvedType ;
254+ Log . LogMessage ( DefaultLogMessageLevel , $ "BindableTypeLinkerGenerator: Adding referenced type { resolvedType . FullName } ") ;
255+ }
238256 }
239257
240258 private void GenerateLinkerDescriptor ( Dictionary < string , TypeDefinition > referencedTypes )
0 commit comments