@@ -968,11 +968,42 @@ private bool ImportReferences(ModuleDefinition moduleDefinition, string[] assemb
968968 continue ;
969969 }
970970
971+ // to reduce unnecessary type resolution, we first check if it can be an extension without type resolution
972+
973+ var mayHaveExtension = false ;
974+
975+ foreach ( var attr in method . CustomAttributes )
976+ {
977+ if ( attr . Constructor . DeclaringType . FullName == extensionConstructor . DeclaringType . FullName )
978+ {
979+ mayHaveExtension = true ;
980+ break ;
981+ }
982+ }
983+
984+ if ( ! mayHaveExtension )
985+ {
986+ continue ;
987+ }
988+
989+ var parameters = method . Parameters ;
990+
991+ if ( parameters . Count != 2 || parameters [ 0 ] . ParameterType is not ByReferenceType byRefType )
992+ {
993+ continue ;
994+ }
995+
996+ if ( byRefType . ElementType . FullName != m_FastBufferWriter_TypeRef . FullName && byRefType . ElementType . FullName != m_FastBufferReader_TypeRef . FullName )
997+ {
998+ continue ;
999+ }
1000+
9711001 var isExtension = false ;
9721002
9731003 foreach ( var attr in method . CustomAttributes )
9741004 {
975- if ( attr . Constructor . Resolve ( ) == extensionConstructor . Resolve ( ) )
1005+ if ( attr . Constructor . DeclaringType . FullName == extensionConstructor . DeclaringType . FullName &&
1006+ attr . Constructor . Resolve ( ) == extensionConstructor . Resolve ( ) )
9761007 {
9771008 isExtension = true ;
9781009 }
@@ -983,13 +1014,11 @@ private bool ImportReferences(ModuleDefinition moduleDefinition, string[] assemb
9831014 continue ;
9841015 }
9851016
986- var parameters = method . Parameters ;
987-
988- if ( parameters . Count == 2 && parameters [ 0 ] . ParameterType . Resolve ( ) == m_FastBufferWriter_TypeRef . MakeByReferenceType ( ) . Resolve ( ) )
1017+ if ( parameters [ 0 ] . ParameterType . Resolve ( ) == m_FastBufferWriter_TypeRef . MakeByReferenceType ( ) . Resolve ( ) )
9891018 {
9901019 m_FastBufferWriter_ExtensionMethodRefs . Add ( m_MainModule . ImportReference ( method ) ) ;
9911020 }
992- else if ( parameters . Count == 2 && parameters [ 0 ] . ParameterType . Resolve ( ) == m_FastBufferReader_TypeRef . MakeByReferenceType ( ) . Resolve ( ) )
1021+ else if ( parameters [ 0 ] . ParameterType . Resolve ( ) == m_FastBufferReader_TypeRef . MakeByReferenceType ( ) . Resolve ( ) )
9931022 {
9941023 m_FastBufferReader_ExtensionMethodRefs . Add ( m_MainModule . ImportReference ( method ) ) ;
9951024 }
0 commit comments