in vsintegration/src/FSharp.LanguageService.Base/Source.cs [277:381]
public virtual void Dispose()
{
#if LANGTRACE
Trace.WriteLine("Source::Cleanup");
#endif
this.disposed = true;
try
{
if (this.textLinesEvents != null)
{
this.textLinesEvents.Dispose();
this.textLinesEvents = null;
}
}
finally
{
try
{
if (this.userDataEvents != null)
{
this.userDataEvents.Dispose();
this.userDataEvents = null;
}
}
finally
{
try
{
if (this.hiddenTextSession != null)
{
// We can't throw or exit here because we need to call Dispose on the
// other members that need to be disposed.
this.hiddenTextSession.UnadviseClient();
// This is causing a debug assert in service\env\msenv\textmgr\vrlist.cpp
// at line 1997 in CVisibleRegionList::Terminate
//this.hiddenTextSession.Terminate();
this.hiddenTextSession = null;
}
}
finally
{
try
{
if (this.methodData != null)
{
this.methodData.Dispose();
this.methodData = null;
}
}
finally
{
try
{
if (this.completionSet != null)
{
this.completionSet.Dispose();
this.completionSet = null;
}
}
finally
{
try
{
this.service = null;
if (this.colorizer != null)
{
// The colorizer is owned by the core text editor, so we don't close it, the core text editor
// does that for us when it is ready to do so.
//colorizer.CloseColorizer();
this.colorizer = null;
}
}
finally
{
this.colorState = null;
try
{
if (this.expansionProvider != null)
{
this.expansionProvider.Dispose();
this.expansionProvider = null;
}
}
finally
{
// Sometimes OnCloseSource is called when language service is changed, (for example
// when you save the file with a different file extension) in which case we cannot
// null out the site because that will cause a crash inside msenv.dll.
// if (this.textLines != null) {
// ((IObjectWithSite)this.textLines).SetSite(null);
// }
if (this.textLines != null)
{
this.textLines = null;
Marshal.Release(pUnkTextLines);
}
}
}
}
}
}
}
}
}