@@ -901,6 +901,25 @@ func getReservedEnumFields(lock Protolock) (lockIDsMap, lockNamesMap) {
901
901
return reservedIDMap , reservedNameMap
902
902
}
903
903
904
+ func getFieldIDNameRecursive (fieldIDNameMap lockFieldIDNameMap , filepath Protopath , prefix string , msg Message ) {
905
+ msgName := prefix + msg .Name
906
+ for _ , field := range msg .Fields {
907
+ if fieldIDNameMap [filepath ][msgName ] == nil {
908
+ fieldIDNameMap [filepath ][msgName ] = make (map [int ]string )
909
+ }
910
+ fieldIDNameMap [filepath ][msgName ][field .ID ] = field .Name
911
+ }
912
+ for _ , mp := range msg .Maps {
913
+ if fieldIDNameMap [filepath ][msgName ] == nil {
914
+ fieldIDNameMap [filepath ][msgName ] = make (map [int ]string )
915
+ }
916
+ fieldIDNameMap [filepath ][msgName ][mp .Field .ID ] = mp .Field .Name
917
+ }
918
+ for _ , nestedMsg := range msg .Messages {
919
+ getFieldIDNameRecursive (fieldIDNameMap , filepath , msgName + nestedPrefix , nestedMsg )
920
+ }
921
+ }
922
+
904
923
// getFieldsIDName gets all the fields mapped by the field ID to its name for
905
924
// all messages.
906
925
func getFieldsIDName (lock Protolock ) lockFieldIDNameMap {
@@ -911,18 +930,7 @@ func getFieldsIDName(lock Protolock) lockFieldIDNameMap {
911
930
fieldIDNameMap [def .Filepath ] = make (map [string ]map [int ]string )
912
931
}
913
932
for _ , msg := range def .Def .Messages {
914
- for _ , field := range msg .Fields {
915
- if fieldIDNameMap [def.Filepath ][msg.Name ] == nil {
916
- fieldIDNameMap [def.Filepath ][msg.Name ] = make (map [int ]string )
917
- }
918
- fieldIDNameMap [def.Filepath ][msg.Name ][field .ID ] = field .Name
919
- }
920
- for _ , mp := range msg .Maps {
921
- if fieldIDNameMap [def.Filepath ][msg.Name ] == nil {
922
- fieldIDNameMap [def.Filepath ][msg.Name ] = make (map [int ]string )
923
- }
924
- fieldIDNameMap [def.Filepath ][msg.Name ][mp .Field .ID ] = mp .Field .Name
925
- }
933
+ getFieldIDNameRecursive (fieldIDNameMap , def .Filepath , "" , msg )
926
934
}
927
935
}
928
936
@@ -951,6 +959,25 @@ func getEnumFieldsIDName(lock Protolock) lockFieldIDNameMap {
951
959
return fieldIDNameMap
952
960
}
953
961
962
+ func getNonReservedFieldsRecursive (nameIDMap lockNamesMap , filepath Protopath , prefix string , msg Message ) {
963
+ msgName := prefix + msg .Name
964
+ for _ , field := range msg .Fields {
965
+ if nameIDMap [filepath ][msgName ] == nil {
966
+ nameIDMap [filepath ][msgName ] = make (map [string ]int )
967
+ }
968
+ nameIDMap [filepath ][msgName ][field .Name ] = field .ID
969
+ }
970
+ for _ , mp := range msg .Maps {
971
+ if nameIDMap [filepath ][msgName ] == nil {
972
+ nameIDMap [filepath ][msgName ] = make (map [string ]int )
973
+ }
974
+ nameIDMap [filepath ][msgName ][mp .Field .Name ] = mp .Field .ID
975
+ }
976
+ for _ , nestedMsg := range msg .Messages {
977
+ getNonReservedFieldsRecursive (nameIDMap , filepath , msgName + nestedPrefix , nestedMsg )
978
+ }
979
+ }
980
+
954
981
// getNonReservedFields gets all the non-reserved field numbers and names, and
955
982
// stashes them in a lockNamesMap to be checked against.
956
983
func getNonReservedFields (lock Protolock ) lockNamesMap {
@@ -961,18 +988,7 @@ func getNonReservedFields(lock Protolock) lockNamesMap {
961
988
nameIDMap [def .Filepath ] = make (map [string ]map [string ]int )
962
989
}
963
990
for _ , msg := range def .Def .Messages {
964
- for _ , field := range msg .Fields {
965
- if nameIDMap [def.Filepath ][msg.Name ] == nil {
966
- nameIDMap [def.Filepath ][msg.Name ] = make (map [string ]int )
967
- }
968
- nameIDMap [def.Filepath ][msg.Name ][field .Name ] = field .ID
969
- }
970
- for _ , mp := range msg .Maps {
971
- if nameIDMap [def.Filepath ][msg.Name ] == nil {
972
- nameIDMap [def.Filepath ][msg.Name ] = make (map [string ]int )
973
- }
974
- nameIDMap [def.Filepath ][msg.Name ][mp .Field .Name ] = mp .Field .ID
975
- }
991
+ getNonReservedFieldsRecursive (nameIDMap , def .Filepath , "" , msg )
976
992
}
977
993
}
978
994
@@ -1001,6 +1017,20 @@ func getNonReservedEnumFields(lock Protolock) lockNamesMap {
1001
1017
return nameIDMap
1002
1018
}
1003
1019
1020
+ func getMapMapRecursive (nameTypeMap lockMapMap , filepath Protopath , prefix string , msg Message ) {
1021
+ msgName := prefix + msg .Name
1022
+ for _ , mp := range msg .Maps {
1023
+ if nameTypeMap [filepath ][msgName ] == nil {
1024
+ nameTypeMap [filepath ][msgName ] = make (map [string ]Map )
1025
+ }
1026
+ nameTypeMap [filepath ][msgName ][mp .Field .Name ] = mp
1027
+ }
1028
+ for _ , nestedMsg := range msg .Messages {
1029
+
1030
+ getMapMapRecursive (nameTypeMap , filepath , msgName + nestedPrefix , nestedMsg )
1031
+ }
1032
+ }
1033
+
1004
1034
// getMapMap gets all the map names and types, and stashes them in a
1005
1035
// lockMapMap to be checked against.
1006
1036
func getMapMap (lock Protolock ) lockMapMap {
@@ -1011,18 +1041,32 @@ func getMapMap(lock Protolock) lockMapMap {
1011
1041
nameTypeMap [def .Filepath ] = make (map [string ]map [string ]Map )
1012
1042
}
1013
1043
for _ , msg := range def .Def .Messages {
1014
- for _ , mp := range msg .Maps {
1015
- if nameTypeMap [def.Filepath ][msg.Name ] == nil {
1016
- nameTypeMap [def.Filepath ][msg.Name ] = make (map [string ]Map )
1017
- }
1018
- nameTypeMap [def.Filepath ][msg.Name ][mp .Field .Name ] = mp
1019
- }
1044
+ getMapMapRecursive (nameTypeMap , def .Filepath , "" , msg )
1020
1045
}
1021
1046
}
1022
1047
1023
1048
return nameTypeMap
1024
1049
}
1025
1050
1051
+ func getFieldMapRecursive (nameTypeMap lockFieldMap , filepath Protopath , prefix string , msg Message ) {
1052
+ msgName := prefix + msg .Name
1053
+ for _ , field := range msg .Fields {
1054
+ if nameTypeMap [filepath ][msgName ] == nil {
1055
+ nameTypeMap [filepath ][msgName ] = make (map [string ]Field )
1056
+ }
1057
+ nameTypeMap [filepath ][msgName ][field .Name ] = field
1058
+ }
1059
+ for _ , mp := range msg .Maps {
1060
+ if nameTypeMap [filepath ][msgName ] == nil {
1061
+ nameTypeMap [filepath ][msgName ] = make (map [string ]Field )
1062
+ }
1063
+ nameTypeMap [filepath ][msgName ][mp .Field .Name ] = mp .Field
1064
+ }
1065
+ for _ , nestedMsg := range msg .Messages {
1066
+ getFieldMapRecursive (nameTypeMap , filepath , msgName + nestedPrefix , nestedMsg )
1067
+ }
1068
+ }
1069
+
1026
1070
// getFieldMap gets all the field names and types, and stashes them in a
1027
1071
// lockFieldMap to be checked against.
1028
1072
func getFieldMap (lock Protolock ) lockFieldMap {
@@ -1033,18 +1077,7 @@ func getFieldMap(lock Protolock) lockFieldMap {
1033
1077
nameTypeMap [def .Filepath ] = make (map [string ]map [string ]Field )
1034
1078
}
1035
1079
for _ , msg := range def .Def .Messages {
1036
- for _ , field := range msg .Fields {
1037
- if nameTypeMap [def.Filepath ][msg.Name ] == nil {
1038
- nameTypeMap [def.Filepath ][msg.Name ] = make (map [string ]Field )
1039
- }
1040
- nameTypeMap [def.Filepath ][msg.Name ][field .Name ] = field
1041
- }
1042
- for _ , mp := range msg .Maps {
1043
- if nameTypeMap [def.Filepath ][msg.Name ] == nil {
1044
- nameTypeMap [def.Filepath ][msg.Name ] = make (map [string ]Field )
1045
- }
1046
- nameTypeMap [def.Filepath ][msg.Name ][mp .Field .Name ] = mp .Field
1047
- }
1080
+ getFieldMapRecursive (nameTypeMap , def .Filepath , "" , msg )
1048
1081
}
1049
1082
}
1050
1083
0 commit comments