@@ -1090,6 +1090,63 @@ public void RemoveBuiltInDeclarations(IReference reference)
1090
1090
}
1091
1091
}
1092
1092
1093
+ public void AddModuleToModuleReference ( QualifiedModuleName referencedModule , QualifiedModuleName referencingModule )
1094
+ {
1095
+ ModuleState referencedModuleState ;
1096
+ ModuleState referencingModuleState ;
1097
+ if ( ! _moduleStates . TryGetValue ( referencedModule , out referencedModuleState ) || ! _moduleStates . TryGetValue ( referencingModule , out referencingModuleState ) )
1098
+ {
1099
+ return ;
1100
+ }
1101
+ if ( referencingModuleState . HasReferenceToModule . Contains ( referencedModule ) )
1102
+ {
1103
+ return ;
1104
+ }
1105
+ referencedModuleState . IsReferencedByModule . AddOrUpdate ( referencingModule , 1 , ( key , value ) => value ) ;
1106
+ referencingModuleState . HasReferenceToModule . Add ( referencedModule ) ;
1107
+ }
1108
+
1109
+ public void ClearModuleToModuleReferencesFromModule ( QualifiedModuleName referencingModule )
1110
+ {
1111
+ ModuleState referencingModuleState ;
1112
+ if ( ! _moduleStates . TryGetValue ( referencingModule , out referencingModuleState ) )
1113
+ {
1114
+ return ;
1115
+ }
1116
+
1117
+ ModuleState referencedModuleState ;
1118
+ byte dummyOutValue ;
1119
+ foreach ( var referencedModule in referencingModuleState . HasReferenceToModule )
1120
+ {
1121
+ if ( ! _moduleStates . TryGetValue ( referencedModule , out referencedModuleState ) )
1122
+ {
1123
+ continue ;
1124
+ }
1125
+ referencedModuleState . IsReferencedByModule . TryRemove ( referencingModule , out dummyOutValue ) ;
1126
+ }
1127
+ referencingModuleState . RefreshHasReferenceToModule ( ) ;
1128
+ }
1129
+
1130
+ public HashSet < QualifiedModuleName > ModulesReferencedBy ( QualifiedModuleName referencingModule )
1131
+ {
1132
+ ModuleState referencingModuleState ;
1133
+ if ( ! _moduleStates . TryGetValue ( referencingModule , out referencingModuleState ) )
1134
+ {
1135
+ return new HashSet < QualifiedModuleName > ( ) ;
1136
+ }
1137
+ return new HashSet < QualifiedModuleName > ( referencingModuleState . HasReferenceToModule ) ;
1138
+ }
1139
+
1140
+ public HashSet < QualifiedModuleName > ModulesReferencing ( QualifiedModuleName referencedModule )
1141
+ {
1142
+ ModuleState referencedModuleState ;
1143
+ if ( ! _moduleStates . TryGetValue ( referencedModule , out referencedModuleState ) )
1144
+ {
1145
+ return new HashSet < QualifiedModuleName > ( ) ;
1146
+ }
1147
+ return new HashSet < QualifiedModuleName > ( referencedModuleState . IsReferencedByModule . Keys ) ;
1148
+ }
1149
+
1093
1150
private bool _isDisposed ;
1094
1151
1095
1152
public void Dispose ( )
0 commit comments