未验证 提交 c5a4f3fe 编写于 作者: I Ivan Basov 提交者: GitHub

optimize checks in AbstractVsTextViewFilter.GetDataTipTextImpl

......@@ -39,7 +39,20 @@ int IVsTextViewFilter.GetDataTipText(TextSpan[] pSpan, out string pbstrText)
{
try
{
return GetDataTipTextImpl(pSpan, out pbstrText);
if (pSpan == null || pSpan.Length != 1)
{
pbstrText = null;
return VSConstants.E_INVALIDARG;
}
var debugInfo = LanguageService.LanguageDebugInfo;
if (debugInfo == null)
{
pbstrText = null;
return VSConstants.E_FAIL;
}
return GetDataTipTextImpl(pSpan, debugInfo, out pbstrText);
}
catch (Exception e) when (FatalError.ReportWithoutCrash(e) && false)
{
......@@ -47,7 +60,7 @@ int IVsTextViewFilter.GetDataTipText(TextSpan[] pSpan, out string pbstrText)
}
}
protected virtual int GetDataTipTextImpl(TextSpan[] pSpan, out string pbstrText)
protected virtual int GetDataTipTextImpl(TextSpan[] pSpan, AbstractLanguageService<TPackage, TLanguageService>.VsLanguageDebugInfo debugInfo, out string pbstrText)
{
var subjectBuffer = WpfTextView.GetBufferContainingCaret();
if (subjectBuffer == null)
......@@ -56,28 +69,22 @@ protected virtual int GetDataTipTextImpl(TextSpan[] pSpan, out string pbstrText)
return VSConstants.E_FAIL;
}
return GetDataTipTextImpl(subjectBuffer, pSpan, out pbstrText);
return GetDataTipTextImpl(subjectBuffer, pSpan, debugInfo, out pbstrText);
}
protected int GetDataTipTextImpl(ITextBuffer subjectBuffer, TextSpan[] pSpan, out string pbstrText)
protected int GetDataTipTextImpl(ITextBuffer subjectBuffer, TextSpan[] pSpan, AbstractLanguageService<TPackage, TLanguageService>.VsLanguageDebugInfo debugInfo, out string pbstrText)
{
pbstrText = null;
var debugInfo = LanguageService.LanguageDebugInfo;
if (debugInfo != null)
var vsBuffer = EditorAdaptersFactory.GetBufferAdapter(subjectBuffer);
// TODO: broken in REPL
if (vsBuffer == null)
{
var vsBuffer = EditorAdaptersFactory.GetBufferAdapter(subjectBuffer);
// TODO: broken in REPL
if (vsBuffer == null)
{
return VSConstants.E_FAIL;
}
return debugInfo.GetDataTipText(vsBuffer, pSpan, pbstrText);
return VSConstants.E_FAIL;
}
return VSConstants.E_FAIL;
return debugInfo.GetDataTipText(vsBuffer, pSpan, out pbstrText);
}
int IVsTextViewFilter.GetPairExtents(int iLine, int iIndex, TextSpan[] pSpan)
......
......@@ -373,7 +373,7 @@ public int ValidateBreakpointLocation(IVsTextBuffer pBuffer, int iLine, int iCol
return VSConstants.E_NOTIMPL;
}
public int GetDataTipText(IVsTextBuffer pBuffer, VsTextSpan[] pSpan, string pbstrText)
public int GetDataTipText(IVsTextBuffer pBuffer, VsTextSpan[] pSpan, out string pbstrText)
{
using (Logger.LogBlock(FunctionId.Debugging_VsLanguageDebugInfo_GetDataTipText, CancellationToken.None))
{
......@@ -384,6 +384,7 @@ public int GetDataTipText(IVsTextBuffer pBuffer, VsTextSpan[] pSpan, string pbst
}
int result = VSConstants.E_FAIL;
string pbstrTextInternal = null;
_waitIndicator.Wait(
title: ServicesVSResources.Debugger,
......@@ -417,13 +418,14 @@ public int GetDataTipText(IVsTextBuffer pBuffer, VsTextSpan[] pSpan, string pbst
string textOpt = dataTipInfo.Text;
pSpan[0] = resultSpan.ToVsTextSpan();
result = debugger.GetDataTipValue((IVsTextLines)pBuffer, pSpan, textOpt, out pbstrText);
result = debugger.GetDataTipValue((IVsTextLines)pBuffer, pSpan, textOpt, out pbstrTextInternal);
}
}
}
}
});
pbstrText = pbstrTextInternal;
return result;
}
}
......
......@@ -48,14 +48,8 @@ protected override ITextBuffer GetSubjectBufferContainingCaret()
return _subjectBuffer;
}
protected override int GetDataTipTextImpl(TextSpan[] pSpan, out string pbstrText)
protected override int GetDataTipTextImpl(TextSpan[] pSpan, AbstractLanguageService<TPackage, TLanguageService>.VsLanguageDebugInfo debugInfo, out string pbstrText)
{
if (pSpan == null || pSpan.Length != 1)
{
pbstrText = null;
return VSConstants.E_INVALIDARG;
}
var textViewModel = WpfTextView.TextViewModel;
if (textViewModel == null)
{
......@@ -83,7 +77,7 @@ protected override int GetDataTipTextImpl(TextSpan[] pSpan, out string pbstrText
// Next, we'll check to see if there is actually a DataTip for this candidate.
// If there is, we'll map this span back to the DataBuffer and return it.
pSpan[0] = candidateSpan.ToVsTextSpan();
int hr = base.GetDataTipTextImpl(_subjectBuffer, pSpan, out pbstrText);
int hr = base.GetDataTipTextImpl(_subjectBuffer, pSpan, debugInfo, out pbstrText);
if (ErrorHandler.Succeeded(hr))
{
var subjectSpan = _subjectBuffer.CurrentSnapshot.GetSpan(pSpan[0]);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册