22using System . Collections . Generic ;
33using System . Diagnostics ;
44using System . Reflection ;
5+ using System . Runtime . CompilerServices ;
56using AssetStudio . Extended . MonoBehaviours . Serialization . Naming ;
67using JetBrains . Annotations ;
78
89namespace AssetStudio . Extended . MonoBehaviours . Serialization . Serializers . Dynamic {
910 partial class TypedSerializer {
1011
1112 [ NotNull ]
12- private MemberSetter FindSetterByName ( [ NotNull ] string name , [ CanBeNull ] INamingConvention naming ) {
13+ private MemberSetter FindSetterByName ( [ NotNull ] string serializedName , [ CanBeNull ] INamingConvention naming ) {
14+ if ( _createdSetters . ContainsKey ( serializedName ) ) {
15+ return _createdSetters [ serializedName ] ;
16+ }
17+
1318 var properties = _properties ;
1419
1520 Debug . Assert ( properties != null , nameof ( properties ) + " != null" ) ;
@@ -18,57 +23,50 @@ private MemberSetter FindSetterByName([NotNull] string name, [CanBeNull] INaming
1823
1924 Debug . Assert ( fields != null , nameof ( fields ) + " != null" ) ;
2025
21- MemberSetter result ;
26+ MemberSetter result = null ;
27+ ScriptableObjectPropertyAttribute sopa ;
2228
2329 foreach ( var prop in properties ) {
24- ScriptableObjectPropertyAttribute sopa ;
25-
2630 if ( _propertyAttributeCache . ContainsKey ( prop ) ) {
2731 sopa = _propertyAttributeCache [ prop ] ;
2832 } else {
2933 sopa = prop . GetCustomAttribute < ScriptableObjectPropertyAttribute > ( ) ;
3034 _propertyAttributeCache [ prop ] = sopa ;
3135 }
3236
33- var propName = ! string . IsNullOrEmpty ( sopa ? . Name ) ? sopa . Name : ( naming != null ? naming . GetCorrected ( prop . Name ) : prop . Name ) ;
34-
35- if ( propName == name ) {
36- if ( _createdSetters . ContainsKey ( propName ) ) {
37- result = _createdSetters [ propName ] ;
38- } else {
39- result = new MemberSetter ( prop , sopa ) ;
40- _createdSetters [ propName ] = result ;
41- }
37+ var propName = GetCorrectedMemberName ( sopa , naming , prop . Name ) ;
4238
43- return result ;
39+ if ( string . Equals ( propName , serializedName , StringComparison . Ordinal ) ) {
40+ result = new MemberSetter ( prop , sopa ) ;
41+ break ;
4442 }
4543 }
4644
47- foreach ( var field in fields ) {
48- ScriptableObjectPropertyAttribute sopa ;
49-
50- if ( _fieldAttributeCache . ContainsKey ( field ) ) {
51- sopa = _fieldAttributeCache [ field ] ;
52- } else {
53- sopa = field . GetCustomAttribute < ScriptableObjectPropertyAttribute > ( ) ;
54- _fieldAttributeCache [ field ] = sopa ;
55- }
45+ if ( result == null ) {
46+ foreach ( var field in fields ) {
47+ if ( _fieldAttributeCache . ContainsKey ( field ) ) {
48+ sopa = _fieldAttributeCache [ field ] ;
49+ } else {
50+ sopa = field . GetCustomAttribute < ScriptableObjectPropertyAttribute > ( ) ;
51+ _fieldAttributeCache [ field ] = sopa ;
52+ }
5653
57- var fieldName = ! string . IsNullOrEmpty ( sopa ? . Name ) ? sopa . Name : ( naming != null ? naming . GetCorrected ( field . Name ) : field . Name ) ;
54+ var fieldName = GetCorrectedMemberName ( sopa , naming , field . Name ) ;
5855
59- if ( fieldName == name ) {
60- if ( _createdSetters . ContainsKey ( fieldName ) ) {
61- result = _createdSetters [ fieldName ] ;
62- } else {
56+ if ( string . Equals ( fieldName , serializedName , StringComparison . Ordinal ) ) {
6357 result = new MemberSetter ( field , sopa ) ;
64- _createdSetters [ fieldName ] = result ;
58+ break ;
6559 }
66-
67- return result ;
6860 }
6961 }
7062
71- return MemberSetter . Null ;
63+ if ( result == null ) {
64+ result = MemberSetter . Null ;
65+ }
66+
67+ _createdSetters [ serializedName ] = result ;
68+
69+ return result ;
7270 }
7371
7472 private void SetValue ( [ NotNull ] MemberSetter setter , [ CanBeNull ] object obj , [ CanBeNull ] object value , [ NotNull ] Type serializedValueType ) {
@@ -101,6 +99,12 @@ private void SetValue([NotNull] MemberSetter setter, [CanBeNull] object obj, [Ca
10199 setter . SetValueDirect ( obj , convertedValue ) ;
102100 }
103101
102+ [ NotNull ]
103+ [ MethodImpl ( MethodImplOptions . AggressiveInlining ) ]
104+ private static string GetCorrectedMemberName ( [ CanBeNull ] ScriptableObjectPropertyAttribute sopa , [ CanBeNull ] INamingConvention naming , [ NotNull ] string fallback ) {
105+ return ! string . IsNullOrEmpty ( sopa ? . Name ) ? sopa . Name : ( naming != null ? naming . GetCorrected ( fallback ) : fallback ) ;
106+ }
107+
104108 [ NotNull ]
105109 private readonly Dictionary < string , MemberSetter > _createdSetters ;
106110
0 commit comments