Skip to content

Commit e124ffe

Browse files
Merge pull request #255 from X-Sharp/master
Sometimes project related events were called with a null argument
2 parents 85f21b9 + cdb670b commit e124ffe

File tree

1 file changed

+37
-26
lines changed

1 file changed

+37
-26
lines changed

src/toolkit/Community.VisualStudio.Toolkit.Shared/Solution/SolutionEvents.cs

Lines changed: 37 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -68,28 +68,31 @@ internal SolutionEvents()
6868
/// <summary>Notifies listening clients that a project has been renamed.</summary>
6969
public event Action<Project?>? OnAfterRenameProject;
7070

71-
#if !VS14
7271
/// <summary>Notifies listening clients that the folder is being closed.</summary>
7372
public event Action<string>? OnBeforeCloseFolder;
74-
73+
#if !VS14
7574
/// <summary>Notifies listening clients that the folder has been closed.</summary>
7675
public event Action<string>? OnAfterCloseFolder;
77-
76+
#endif
7877
/// <summary>Notifies listening clients that the folder has been opened.</summary>
7978
public event Action<string>? OnAfterOpenFolder;
80-
#endif
8179

8280
/// <summary> Fired when the solution load process is fully complete, including all background loading of projects.</summary>
8381
public event Action? OnAfterBackgroundSolutionLoadComplete;
8482

85-
#region IVsSolutionEvents
83+
#region IVsSolutionEvents
8684
int IVsSolutionEvents.OnAfterOpenProject(IVsHierarchy pHierarchy, int fAdded)
8785
{
8886
ThreadHelper.ThrowIfNotOnUIThread();
8987
if (OnAfterOpenProject != null)
9088
{
91-
Project? project = SolutionItem.FromHierarchy(pHierarchy, VSConstants.VSITEMID_ROOT) as Project;
92-
OnAfterOpenProject?.Invoke(project);
89+
SolutionItem? item = SolutionItem.FromHierarchy(pHierarchy, VSConstants.VSITEMID_ROOT) as Project;
90+
if (item is Project project)
91+
OnAfterOpenProject?.Invoke(project);
92+
#if VS14
93+
else if (item is SolutionFolder folder && folder.FullPath != null)
94+
OnAfterOpenFolder?.Invoke(folder.FullPath);
95+
#endif
9396
}
9497
return VSConstants.S_OK;
9598
}
@@ -104,8 +107,13 @@ int IVsSolutionEvents.OnBeforeCloseProject(IVsHierarchy pHierarchy, int fRemoved
104107
ThreadHelper.ThrowIfNotOnUIThread();
105108
if (OnBeforeCloseProject != null)
106109
{
107-
Project? project = SolutionItem.FromHierarchy(pHierarchy, VSConstants.VSITEMID_ROOT) as Project;
108-
OnBeforeCloseProject?.Invoke(project);
110+
SolutionItem? item = SolutionItem.FromHierarchy(pHierarchy, VSConstants.VSITEMID_ROOT);
111+
if (item is Project project)
112+
OnBeforeCloseProject?.Invoke(project);
113+
#if VS14
114+
else if (item is SolutionFolder folder && folder.FullPath != null)
115+
OnBeforeCloseFolder?.Invoke(folder.FullPath);
116+
#endif
109117
}
110118
return VSConstants.S_OK;
111119
}
@@ -115,8 +123,9 @@ int IVsSolutionEvents.OnAfterLoadProject(IVsHierarchy pStubHierarchy, IVsHierarc
115123
ThreadHelper.ThrowIfNotOnUIThread();
116124
if (OnAfterLoadProject != null)
117125
{
118-
Project? project = SolutionItem.FromHierarchy(pRealHierarchy, VSConstants.VSITEMID_ROOT) as Project;
119-
OnAfterLoadProject?.Invoke(project);
126+
SolutionItem? item = SolutionItem.FromHierarchy(pStubHierarchy, VSConstants.VSITEMID_ROOT);
127+
if (item is Project project)
128+
OnAfterLoadProject?.Invoke(project);
120129
}
121130
return VSConstants.S_OK;
122131
}
@@ -132,8 +141,9 @@ int IVsSolutionEvents.OnBeforeUnloadProject(IVsHierarchy pRealHierarchy, IVsHier
132141

133142
if (OnBeforeUnloadProject != null)
134143
{
135-
Project? project = SolutionItem.FromHierarchy(pRealHierarchy, VSConstants.VSITEMID_ROOT) as Project;
136-
OnBeforeUnloadProject?.Invoke(project);
144+
SolutionItem? item = SolutionItem.FromHierarchy(pRealHierarchy, VSConstants.VSITEMID_ROOT);
145+
if (item is Project project)
146+
OnBeforeUnloadProject?.Invoke(project);
137147
}
138148
return VSConstants.S_OK;
139149
}
@@ -173,9 +183,9 @@ int IVsSolutionEvents.OnAfterCloseSolution(object pUnkReserved)
173183
OnAfterCloseSolution?.Invoke();
174184
return VSConstants.S_OK;
175185
}
176-
#endregion
186+
#endregion
177187

178-
#region IVsSolutionEvents2
188+
#region IVsSolutionEvents2
179189
int IVsSolutionEvents2.OnAfterOpenProject(IVsHierarchy pHierarchy, int fAdded)
180190
{
181191
ThreadHelper.ThrowIfNotOnUIThread();
@@ -241,17 +251,18 @@ int IVsSolutionEvents2.OnAfterMergeSolution(object pUnkReserved)
241251
OnAfterMergeSolution?.Invoke();
242252
return VSConstants.S_OK;
243253
}
244-
#endregion
254+
#endregion
245255

246-
#region IVsSolutionEvents4
256+
#region IVsSolutionEvents4
247257
int IVsSolutionEvents4.OnAfterRenameProject(IVsHierarchy pHierarchy)
248258
{
249259
ThreadHelper.ThrowIfNotOnUIThread();
250260

251261
if (OnAfterRenameProject != null)
252262
{
253-
Project? project = SolutionItem.FromHierarchy(pHierarchy, VSConstants.VSITEMID_ROOT) as Project;
254-
OnAfterRenameProject?.Invoke(project);
263+
SolutionItem? item = SolutionItem.FromHierarchy(pHierarchy, VSConstants.VSITEMID_ROOT);
264+
if (item is Project project)
265+
OnAfterRenameProject?.Invoke(project);
255266
}
256267
return VSConstants.S_OK;
257268
}
@@ -270,16 +281,16 @@ int IVsSolutionEvents4.OnAfterAsynchOpenProject(IVsHierarchy pHierarchy, int fAd
270281
{
271282
return VSConstants.S_OK;
272283
}
273-
#endregion
284+
#endregion
274285

275-
#region IVsSolutionEvents5
286+
#region IVsSolutionEvents5
276287
void IVsSolutionEvents5.OnBeforeOpenProject(ref Guid guidProjectID, ref Guid guidProjectType, string pszFileName)
277288
{
278289
OnBeforeOpenProject?.Invoke(pszFileName);
279290
}
280-
#endregion
291+
#endregion
281292

282-
#region IVsSolutionEvents7
293+
#region IVsSolutionEvents7
283294
#if !VS14
284295
void IVsSolutionEvents7.OnAfterOpenFolder(string folderPath)
285296
{
@@ -302,9 +313,9 @@ void IVsSolutionEvents7.OnAfterCloseFolder(string folderPath)
302313
void IVsSolutionEvents7.OnAfterLoadAllDeferredProjects()
303314
{ }
304315
#endif
305-
#endregion
316+
#endregion
306317

307-
#region IVsSolutionLoadEvents
318+
#region IVsSolutionLoadEvents
308319
int IVsSolutionLoadEvents.OnBeforeOpenSolution(string solutionFilename)
309320
{
310321
OnBeforeOpenSolution?.Invoke(solutionFilename);
@@ -337,6 +348,6 @@ int IVsSolutionLoadEvents.OnAfterBackgroundSolutionLoadComplete()
337348
OnAfterBackgroundSolutionLoadComplete?.Invoke();
338349
return VSConstants.S_OK;
339350
}
340-
#endregion
351+
#endregion
341352
}
342353
}

0 commit comments

Comments
 (0)