@@ -19,65 +19,85 @@ public class ApiExtractor : IApiExtractor
1919 /// </summary>
2020 /// <param name="typeAnalyzer">Type analyzer for detailed member analysis</param>
2121 /// <param name="logger">Logger for diagnostic information</param>
22- public ApiExtractor ( ITypeAnalyzer typeAnalyzer , ILogger < ApiExtractor > logger )
22+ public ApiExtractor (
23+ ITypeAnalyzer typeAnalyzer , ILogger < ApiExtractor > logger )
2324 {
24- _typeAnalyzer = typeAnalyzer ?? throw new ArgumentNullException ( nameof ( typeAnalyzer ) ) ;
25- _logger = logger ?? throw new ArgumentNullException ( nameof ( logger ) ) ;
25+ _typeAnalyzer = typeAnalyzer ?? throw new ArgumentNullException (
26+ nameof ( typeAnalyzer ) ) ;
27+ _logger = logger ?? throw new ArgumentNullException (
28+ nameof ( logger ) ) ; ,
2629 }
2730
2831 /// <summary>
2932 /// Extracts all public API members from the specified assembly
3033 /// </summary>
3134 /// <param name="assembly">Assembly to extract API members from</param>
3235 /// <returns>Collection of public API members</returns>
33- public IEnumerable < ApiMember > ExtractApiMembers ( Assembly assembly )
36+ public IEnumerable < ApiMember > ExtractApiMembers (
37+ Assembly assembly )
3438 {
3539 if ( assembly == null )
3640 {
37- throw new ArgumentNullException ( nameof ( assembly ) ) ;
41+ throw new ArgumentNullException (
42+ nameof ( assembly ) ) ; ,
3843 }
3944
40- _logger . LogInformation ( "Extracting API members from assembly: {AssemblyName}" , assembly . GetName ( ) . Name ) ;
45+ _logger . LogInformation (
46+ "Extracting API members from assembly: {AssemblyName}" , assembly . GetName ( ) . Name ) ;
4147
4248 var apiMembers = new List < ApiMember > ( ) ;
4349
4450 try
4551 {
4652 // Get all public types from the assembly
47- var types = GetPublicTypes ( assembly ) . ToList ( ) ;
48- _logger . LogDebug ( "Found {TypeCount} public types in assembly {AssemblyName}" ,
49- types . Count , assembly . GetName ( ) . Name ) ;
53+ var types = GetPublicTypes (
54+ assembly ) . ToList ( ) ;
55+ _logger . LogDebug (
56+ "Found {TypeCount} public types in assembly {AssemblyName}" ,
57+ types . Count , assembly . GetName (
58+ ) . Name ) ;
5059
5160 // Process each type
5261 foreach ( var type in types )
5362 {
5463 try
5564 {
5665 // Add the type itself
57- var typeMember = _typeAnalyzer . AnalyzeType ( type ) ;
58- apiMembers . Add ( typeMember ) ;
66+ var typeMember = _typeAnalyzer . AnalyzeType (
67+ type ) ;
68+ apiMembers . Add (
69+ typeMember ) ;
5970
6071 // Add all members of the type
61- var typeMembers = ExtractTypeMembers ( type ) . ToList ( ) ;
62- apiMembers . AddRange ( typeMembers ) ;
63-
64- _logger . LogDebug ( "Extracted {MemberCount} members from type {TypeName}" ,
65- typeMembers . Count , type . FullName ) ;
72+ var typeMembers = ExtractTypeMembers (
73+ type ) . ToList ( ) ;
74+ apiMembers . AddRange (
75+ typeMembers ) ;
76+
77+ _logger . LogDebug (
78+ "Extracted {MemberCount} members from type {TypeName}" ,
79+ typeMembers . Count , type . FullName ) ; ,
6680 }
81+
6782 catch ( Exception ex )
6883 {
69- _logger . LogError ( ex , "Error extracting members from type {TypeName}" , type . FullName ) ;
84+ _logger . LogError (
85+ ex , "Error extracting members from type {TypeName}" , type . FullName ) ; ,
7086 }
7187 }
7288
73- _logger . LogInformation ( "Extracted {MemberCount} total API members from assembly {AssemblyName}" ,
74- apiMembers . Count , assembly . GetName ( ) . Name ) ;
89+ _logger . LogInformation (
90+ "Extracted {MemberCount} total API members from assembly {AssemblyName}" ,
91+ apiMembers . Count , assembly . GetName (
92+ ) . Name ) ;
7593
76- return apiMembers ;
94+ return apiMembers ; ,
7795 }
96+
7897 catch ( ReflectionTypeLoadException ex )
7998 {
80- _logger . LogError ( ex , "Error loading types from assembly {AssemblyName}" , assembly . GetName ( ) . Name ) ;
99+ _logger . LogError (
100+ ex , "Error loading types from assembly {AssemblyName}" , assembly . GetName ( ) . Name ) ;
81101
82102 // Log the loader exceptions for more detailed diagnostics
83103 if ( ex . LoaderExceptions != null )
@@ -86,19 +106,23 @@ public IEnumerable<ApiMember> ExtractApiMembers(Assembly assembly)
86106 {
87107 if ( loaderEx != null )
88108 {
89- _logger . LogError ( loaderEx , "Loader exception: {Message}" , loaderEx . Message ) ;
109+ _logger . LogError (
110+ loaderEx , "Loader exception: {Message}" , loaderEx . Message ) ; ,
90111 }
91- }
112+ } ,
92113 }
93114
94115 // Return any types that were successfully loaded
95- return apiMembers ;
116+ return apiMembers ; ,
96117 }
118+
97119 catch ( Exception ex )
98120 {
99- _logger . LogError ( ex , "Error extracting API members from assembly {AssemblyName}" ,
100- assembly . GetName ( ) . Name ) ;
101- return apiMembers ;
121+ _logger . LogError (
122+ ex , "Error extracting API members from assembly {AssemblyName}" ,
123+ assembly . GetName (
124+ ) . Name ) ;
125+ return apiMembers ; ,
102126 }
103127 }
104128
@@ -107,38 +131,47 @@ public IEnumerable<ApiMember> ExtractApiMembers(Assembly assembly)
107131 /// </summary>
108132 /// <param name="type">Type to extract members from</param>
109133 /// <returns>Collection of public API members for the type</returns>
110- public IEnumerable < ApiMember > ExtractTypeMembers ( Type type )
134+ public IEnumerable < ApiMember > ExtractTypeMembers (
135+ Type type )
111136 {
112137 if ( type == null )
113138 {
114- throw new ArgumentNullException ( nameof ( type ) ) ;
139+ throw new ArgumentNullException (
140+ nameof ( type ) ) ; ,
115141 }
116142
117143 var members = new List < ApiMember > ( ) ;
118144
119145 try
120146 {
121147 // Extract methods
122- members . AddRange ( _typeAnalyzer . AnalyzeMethods ( type ) ) ;
148+ members . AddRange (
149+ _typeAnalyzer . AnalyzeMethods ( type ) ) ;
123150
124151 // Extract properties
125- members . AddRange ( _typeAnalyzer . AnalyzeProperties ( type ) ) ;
152+ members . AddRange (
153+ _typeAnalyzer . AnalyzeProperties ( type ) ) ;
126154
127155 // Extract fields
128- members . AddRange ( _typeAnalyzer . AnalyzeFields ( type ) ) ;
156+ members . AddRange (
157+ _typeAnalyzer . AnalyzeFields ( type ) ) ;
129158
130159 // Extract events
131- members . AddRange ( _typeAnalyzer . AnalyzeEvents ( type ) ) ;
160+ members . AddRange (
161+ _typeAnalyzer . AnalyzeEvents ( type ) ) ;
132162
133163 // Extract constructors
134- members . AddRange ( _typeAnalyzer . AnalyzeConstructors ( type ) ) ;
164+ members . AddRange (
165+ _typeAnalyzer . AnalyzeConstructors ( type ) ) ;
135166
136- return members ;
167+ return members ; ,
137168 }
169+
138170 catch ( Exception ex )
139171 {
140- _logger . LogError ( ex , "Error extracting members from type {TypeName}" , type . FullName ) ;
141- return members ;
172+ _logger . LogError (
173+ ex , "Error extracting members from type {TypeName}" , type . FullName ) ;
174+ return members ; ,
142175 }
143176 }
144177
@@ -147,34 +180,45 @@ public IEnumerable<ApiMember> ExtractTypeMembers(Type type)
147180 /// </summary>
148181 /// <param name="assembly">Assembly to get types from</param>
149182 /// <returns>Collection of public types</returns>
150- public virtual IEnumerable < Type > GetPublicTypes ( Assembly assembly )
183+ public virtual IEnumerable < Type > GetPublicTypes (
184+ Assembly assembly )
151185 {
152186 if ( assembly == null )
153187 {
154- throw new ArgumentNullException ( nameof ( assembly ) ) ;
188+ throw new ArgumentNullException (
189+ nameof ( assembly ) ) ; ,
155190 }
156191
157192 try
158193 {
159194 // Get all exported (public) types from the assembly
160- return assembly . GetExportedTypes ( )
161- . Where ( t => ! t . IsCompilerGenerated ( ) && ! t . IsSpecialName )
162- . OrderBy ( t => t . FullName ) ;
195+ return assembly . GetExportedTypes (
196+ )
197+ . Where (
198+ t => ! t . IsCompilerGenerated ( ) && ! t . IsSpecialName )
199+ . OrderBy (
200+ t => t . FullName ) ; ,
163201 }
202+
164203 catch ( ReflectionTypeLoadException ex )
165204 {
166- _logger . LogError ( ex , "Error loading types from assembly {AssemblyName}" , assembly . GetName ( ) . Name ) ;
205+ _logger . LogError (
206+ ex , "Error loading types from assembly {AssemblyName}" , assembly . GetName ( ) . Name ) ;
167207
168208 // Return any types that were successfully loaded
169- return ex . Types . Where ( t => t != null ) . Cast < Type > ( ) ;
209+ return ex . Types . Where (
210+ t => t != null ) . Cast < Type > ( ) ; ,
170211 }
212+
171213 catch ( Exception ex )
172214 {
173- _logger . LogError ( ex , "Error getting public types from assembly {AssemblyName}" ,
174- assembly . GetName ( ) . Name ) ;
175- return Enumerable . Empty < Type > ( ) ;
215+ _logger . LogError (
216+ ex , "Error getting public types from assembly {AssemblyName}" ,
217+ assembly . GetName (
218+ ) . Name ) ;
219+ return Enumerable . Empty < Type > ( ) ; ,
176220 }
177- }
221+ } ,
178222}
179223
180224/// <summary>
@@ -187,17 +231,24 @@ public static class ReflectionExtensions
187231 /// </summary>
188232 /// <param name="type">Type to check</param>
189233 /// <returns>True if compiler-generated, false otherwise</returns>
190- public static bool IsCompilerGenerated ( this Type type )
234+ public static bool IsCompilerGenerated (
235+ this Type type )
191236 {
192237 // Check for compiler-generated types like closures, iterators, etc.
193- if ( type . Name . Contains ( '<' ) || type . Name . StartsWith ( "__" ) )
238+ if ( type . Name . Contains (
239+ '<' ) || type . Name . StartsWith ( "__" ) )
194240 {
195- return true ;
241+ return true ; ,
196242 }
197243
198244 // Check for CompilerGeneratedAttribute using IsDefined for better performance
199- return type . IsDefined ( typeof ( System . Runtime . CompilerServices . CompilerGeneratedAttribute ) , true ) ;
245+ return type . IsDefined (
246+ typeof ( System . Runtime . CompilerServices . CompilerGeneratedAttribute ) , true ) ; ,
200247 }
201248}
202249
203250
251+
252+
253+
254+
0 commit comments