@@ -12,6 +12,7 @@ public sealed class VBEEvents : IVBEEvents
12
12
private static readonly object Lock = new object ( ) ;
13
13
private readonly IVBProjects _projects ;
14
14
private readonly Dictionary < string , IVBComponents > _components ;
15
+ private readonly Dictionary < string , IReferences > _references ;
15
16
16
17
public static VBEEvents Initialize ( IVBE vbe )
17
18
{
@@ -43,6 +44,7 @@ public static void Terminate()
43
44
private VBEEvents ( IVBE vbe )
44
45
{
45
46
_components = new Dictionary < string , IVBComponents > ( ) ;
47
+ _references = new Dictionary < string , IReferences > ( ) ;
46
48
47
49
if ( _projects != null )
48
50
{
@@ -60,12 +62,12 @@ private VBEEvents(IVBE vbe)
60
62
using ( project )
61
63
{
62
64
{
63
- RegisterComponents ( project ) ;
65
+ RegisterProjectHandlers ( project ) ;
64
66
}
65
67
}
66
68
}
67
69
68
- private void RegisterComponents ( string projectId , string projectName )
70
+ private void RegisterProjectHandlers ( string projectId , string projectName )
69
71
{
70
72
IVBProject project = null ;
71
73
foreach ( var item in _projects )
@@ -84,10 +86,10 @@ private void RegisterComponents(string projectId, string projectName)
84
86
return ;
85
87
}
86
88
87
- RegisterComponents ( project ) ;
89
+ RegisterProjectHandlers ( project ) ;
88
90
}
89
91
90
- private void RegisterComponents ( IVBProject project )
92
+ private void RegisterProjectHandlers ( IVBProject project )
91
93
{
92
94
if ( project . IsWrappingNullReference || project . Protection != ProjectProtection . Unprotected )
93
95
{
@@ -106,9 +108,15 @@ private void RegisterComponents(IVBProject project)
106
108
components . ComponentActivated += ComponentActivatedHandler ;
107
109
components . ComponentSelected += ComponentSelectedHandler ;
108
110
components . ComponentReloaded += ComponentReloadedHandler ;
111
+
112
+ var references = project . References ;
113
+ _references . Add ( project . ProjectId , references ) ;
114
+ references . AttachEvents ( ) ;
115
+ references . ItemAdded += ProjectReferenceAddedHandler ;
116
+ references . ItemRemoved += ProjectReferenceRemovedHandler ;
109
117
}
110
118
111
- private void UnregisterComponents ( string projectId )
119
+ private void UnregisterProjectHandlers ( string projectId )
112
120
{
113
121
if ( ! _components . ContainsKey ( projectId ) )
114
122
{
@@ -127,22 +135,30 @@ private void UnregisterComponents(string projectId)
127
135
128
136
_components . Remove ( projectId ) ;
129
137
}
138
+
139
+ using ( var references = _references [ projectId ] )
140
+ {
141
+ references . ItemAdded -= ProjectReferenceAddedHandler ;
142
+ references . ItemRemoved -= ProjectReferenceRemovedHandler ;
143
+ references . DetachEvents ( ) ;
144
+ _references . Remove ( projectId ) ;
145
+ }
130
146
}
131
147
132
148
public event EventHandler < ProjectEventArgs > ProjectAdded ;
133
149
private void ProjectAddedHandler ( object sender , ProjectEventArgs e )
134
150
{
135
151
if ( ! _components . ContainsKey ( e . ProjectId ) )
136
152
{
137
- RegisterComponents ( e . ProjectId , e . ProjectName ) ;
153
+ RegisterProjectHandlers ( e . ProjectId , e . ProjectName ) ;
138
154
}
139
155
ProjectAdded ? . Invoke ( sender , e ) ;
140
156
}
141
157
142
158
public event EventHandler < ProjectEventArgs > ProjectRemoved ;
143
159
private void ProjectRemovedHandler ( object sender , ProjectEventArgs e )
144
160
{
145
- UnregisterComponents ( e . ProjectId ) ;
161
+ UnregisterProjectHandlers ( e . ProjectId ) ;
146
162
ProjectRemoved ? . Invoke ( sender , e ) ;
147
163
}
148
164
@@ -188,12 +204,27 @@ private void ComponentSelectedHandler(object sender, ComponentEventArgs e)
188
204
ComponentSelected ? . Invoke ( sender , e ) ;
189
205
}
190
206
191
- public event EventHandler < ComponentEventArgs > ComponentReloaded ;
207
+ public event EventHandler < ComponentEventArgs > ComponentReloaded ;
208
+
192
209
private void ComponentReloadedHandler ( object sender , ComponentEventArgs e )
193
210
{
194
211
ComponentReloaded ? . Invoke ( sender , e ) ;
195
212
}
196
213
214
+ public event EventHandler < ReferenceEventArgs > ProjectReferenceAdded ;
215
+
216
+ private void ProjectReferenceAddedHandler ( object sender , ReferenceEventArgs e )
217
+ {
218
+ ProjectReferenceAdded ? . Invoke ( sender , e ) ;
219
+ }
220
+
221
+ public event EventHandler < ReferenceEventArgs > ProjectReferenceRemoved ;
222
+
223
+ private void ProjectReferenceRemovedHandler ( object sender , ReferenceEventArgs e )
224
+ {
225
+ ProjectReferenceRemoved ? . Invoke ( sender , e ) ;
226
+ }
227
+
197
228
public event EventHandler EventsTerminated ;
198
229
199
230
#region IDisposable
@@ -214,7 +245,7 @@ private void Dispose(bool disposing)
214
245
var projectIds = _components . Keys . ToArray ( ) ;
215
246
foreach ( var projectid in projectIds )
216
247
{
217
- UnregisterComponents ( projectid ) ;
248
+ UnregisterProjectHandlers ( projectid ) ;
218
249
}
219
250
220
251
_projects . ProjectActivated -= ProjectActivatedHandler ;
0 commit comments