提交 62227aee 编写于 作者: A Andrew Casey

Merge pull request #8578 from amcasey/GH8452

Don't call GetGenericsArguments unless IsGeneric is true
......@@ -820,7 +820,7 @@ private async Task<ScriptState<object>> ExecuteOnUIThread(Script<object> script,
}
catch (Exception e)
{
Console.Error.WriteLine(_replServiceProvider.ObjectFormatter.FormatUnhandledException(e));
Console.Error.WriteLine(_replServiceProvider.ObjectFormatter.FormatException(e));
return null;
}
}))).ConfigureAwait(false);
......
......@@ -17,6 +17,6 @@ private CSharpObjectFormatter()
public override string FormatObject(object obj, PrintOptions options) => s_impl.FormatObject(obj, options);
public override string FormatUnhandledException(Exception e) => s_impl.FormatUnhandledException(e);
public override string FormatException(Exception e) => s_impl.FormatException(e);
}
}
override Microsoft.CodeAnalysis.CSharp.Scripting.Hosting.CSharpObjectFormatter.FormatObject(object obj, Microsoft.CodeAnalysis.Scripting.Hosting.PrintOptions options) -> string
override Microsoft.CodeAnalysis.CSharp.Scripting.Hosting.CSharpObjectFormatter.FormatUnhandledException(System.Exception e) -> string
override Microsoft.CodeAnalysis.CSharp.Scripting.Hosting.CSharpObjectFormatter.FormatException(System.Exception e) -> string
......@@ -4,6 +4,7 @@
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Threading;
using Microsoft.CodeAnalysis.Scripting;
......@@ -777,6 +778,15 @@ public void DebuggerProxy_ArrayBuilder()
);
}
[WorkItem(8542, "https://github.com/dotnet/roslyn/issues/8452")]
[Fact]
public void FormatConstructorSignature()
{
var constructor = typeof(object).GetTypeInfo().DeclaredConstructors.Single();
var signature = ((CommonObjectFormatter)s_formatter).FormatMethodSignature(constructor);
Assert.Equal("object..ctor()", signature); // Checking for exceptions, more than particular output.
}
// The stack trace contains line numbers. We use a #line directive
// so that the baseline doesn't need to be updated every time this
// file changes.
......@@ -831,7 +841,7 @@ public void StackTrace_NonGeneric()
+ Microsoft.CodeAnalysis.CSharp.Scripting.Hosting.UnitTests.ObjectFormatterTests.Fixture.Method(){string.Format(ScriptingResources.AtFileLine, filePath, 10006)}
+ Microsoft.CodeAnalysis.CSharp.Scripting.Hosting.UnitTests.ObjectFormatterTests.StackTrace_NonGeneric(){string.Format(ScriptingResources.AtFileLine, filePath, 10036)}
";
var actual = s_formatter.FormatUnhandledException(e);
var actual = s_formatter.FormatException(e);
Assert.Equal(expected, actual);
}
}
......@@ -853,7 +863,7 @@ public void StackTrace_GenericMethod()
+ Microsoft.CodeAnalysis.CSharp.Scripting.Hosting.UnitTests.ObjectFormatterTests.Fixture.Method<U>(){string.Format(ScriptingResources.AtFileLine, filePath, 10012)}
+ Microsoft.CodeAnalysis.CSharp.Scripting.Hosting.UnitTests.ObjectFormatterTests.StackTrace_GenericMethod(){string.Format(ScriptingResources.AtFileLine, filePath, 10057)}
";
var actual = s_formatter.FormatUnhandledException(e);
var actual = s_formatter.FormatException(e);
Assert.Equal(expected, actual);
}
}
......@@ -875,7 +885,7 @@ public void StackTrace_GenericType()
+ Microsoft.CodeAnalysis.CSharp.Scripting.Hosting.UnitTests.ObjectFormatterTests.Fixture<T>.Method(){string.Format(ScriptingResources.AtFileLine, filePath, 10021)}
+ Microsoft.CodeAnalysis.CSharp.Scripting.Hosting.UnitTests.ObjectFormatterTests.StackTrace_GenericType(){string.Format(ScriptingResources.AtFileLine, filePath, 10079)}
";
var actual = s_formatter.FormatUnhandledException(e);
var actual = s_formatter.FormatException(e);
Assert.Equal(expected, actual);
}
}
......@@ -897,7 +907,7 @@ public void StackTrace_GenericMethodInGenericType()
+ Microsoft.CodeAnalysis.CSharp.Scripting.Hosting.UnitTests.ObjectFormatterTests.Fixture<T>.Method<U>(){string.Format(ScriptingResources.AtFileLine, filePath, 10027)}
+ Microsoft.CodeAnalysis.CSharp.Scripting.Hosting.UnitTests.ObjectFormatterTests.StackTrace_GenericMethodInGenericType(){string.Format(ScriptingResources.AtFileLine, filePath, 10101)}
";
var actual = s_formatter.FormatUnhandledException(e);
var actual = s_formatter.FormatException(e);
Assert.Equal(expected, actual);
}
}
......
......@@ -324,7 +324,7 @@ private void DisplayException(Exception e)
try
{
_console.ForegroundColor = ConsoleColor.Red;
_console.Out.Write(_objectFormatter.FormatUnhandledException(e));
_console.Out.Write(_objectFormatter.FormatException(e));
}
finally
{
......
......@@ -54,7 +54,7 @@ public override string FormatObject(object obj, PrintOptions options)
arrayBoundRadix: printOptions.NumberRadix,
showNamespaces: false);
public override string FormatUnhandledException(Exception e)
public override string FormatException(Exception e)
{
if (e == null)
{
......@@ -101,7 +101,7 @@ public override string FormatUnhandledException(Exception e)
/// Returns a method signature display string. Used to display stack frames.
/// </summary>
/// <returns>Null if the method is a compiler generated method that shouldn't be displayed to the user.</returns>
protected virtual string FormatMethodSignature(MethodBase method)
protected internal virtual string FormatMethodSignature(MethodBase method)
{
var pooled = PooledStringBuilder.GetInstance();
var builder = pooled.Builder;
......@@ -112,7 +112,10 @@ protected virtual string FormatMethodSignature(MethodBase method)
builder.Append(TypeNameFormatter.FormatTypeName(declaringType, options));
builder.Append('.');
builder.Append(method.Name);
builder.Append(TypeNameFormatter.FormatTypeArguments(method.GetGenericArguments(), options));
if (method.IsGenericMethod)
{
builder.Append(TypeNameFormatter.FormatTypeArguments(method.GetGenericArguments(), options));
}
builder.Append('(');
......
......@@ -93,7 +93,7 @@ public virtual string FormatTypeArguments(Type[] typeArguments, CommonTypeNameFo
if (typeArguments.Length == 0)
{
return "";
throw new ArgumentException(null, nameof(typeArguments));
}
var pooled = PooledStringBuilder.GetInstance();
......
......@@ -13,6 +13,6 @@ public abstract class ObjectFormatter
public abstract string FormatObject(object obj, PrintOptions options);
public abstract string FormatUnhandledException(Exception e);
public abstract string FormatException(Exception e);
}
}
\ No newline at end of file
......@@ -16,5 +16,5 @@ Microsoft.CodeAnalysis.Scripting.Hosting.PrintOptions.MemberDisplayFormat.set ->
Microsoft.CodeAnalysis.Scripting.Hosting.PrintOptions.NumberRadix.get -> int
Microsoft.CodeAnalysis.Scripting.Hosting.PrintOptions.NumberRadix.set -> void
abstract Microsoft.CodeAnalysis.Scripting.Hosting.ObjectFormatter.FormatObject(object obj, Microsoft.CodeAnalysis.Scripting.Hosting.PrintOptions options) -> string
abstract Microsoft.CodeAnalysis.Scripting.Hosting.ObjectFormatter.FormatUnhandledException(System.Exception e) -> string
abstract Microsoft.CodeAnalysis.Scripting.Hosting.ObjectFormatter.FormatException(System.Exception e) -> string
virtual Microsoft.CodeAnalysis.Scripting.Hosting.PrintOptions.IsValidRadix(int radix) -> bool
......@@ -18,8 +18,8 @@ Namespace Microsoft.CodeAnalysis.VisualBasic.Scripting.Hosting
Return s_impl.FormatObject(obj, options)
End Function
Public Overrides Function FormatUnhandledException(e As Exception) As String
Return s_impl.FormatUnhandledException(e)
Public Overrides Function FormatException(e As Exception) As String
Return s_impl.FormatException(e)
End Function
End Class
......
Microsoft.CodeAnalysis.VisualBasic.Scripting.Hosting.VisualBasicObjectFormatter
Microsoft.CodeAnalysis.VisualBasic.Scripting.VisualBasicScript
Overrides Microsoft.CodeAnalysis.VisualBasic.Scripting.Hosting.VisualBasicObjectFormatter.FormatObject(obj As Object, options As Microsoft.CodeAnalysis.Scripting.Hosting.PrintOptions) -> String
Overrides Microsoft.CodeAnalysis.VisualBasic.Scripting.Hosting.VisualBasicObjectFormatter.FormatUnhandledException(e As System.Exception) -> String
Overrides Microsoft.CodeAnalysis.VisualBasic.Scripting.Hosting.VisualBasicObjectFormatter.FormatException(e As System.Exception) -> String
Shared Microsoft.CodeAnalysis.VisualBasic.Scripting.VisualBasicScript.Create(Of T)(code As String, options As Microsoft.CodeAnalysis.Scripting.ScriptOptions = Nothing, globalsType As System.Type = Nothing, assemblyLoader As Microsoft.CodeAnalysis.Scripting.Hosting.InteractiveAssemblyLoader = Nothing) -> Microsoft.CodeAnalysis.Scripting.Script(Of T)
Shared Microsoft.CodeAnalysis.VisualBasic.Scripting.VisualBasicScript.Create(code As String, options As Microsoft.CodeAnalysis.Scripting.ScriptOptions = Nothing, globalsType As System.Type = Nothing, assemblyLoader As Microsoft.CodeAnalysis.Scripting.Hosting.InteractiveAssemblyLoader = Nothing) -> Microsoft.CodeAnalysis.Scripting.Script(Of Object)
Shared Microsoft.CodeAnalysis.VisualBasic.Scripting.VisualBasicScript.EvaluateAsync(Of T)(code As String, options As Microsoft.CodeAnalysis.Scripting.ScriptOptions = Nothing, globals As Object = Nothing, cancellationToken As System.Threading.CancellationToken = Nothing) -> System.Threading.Tasks.Task(Of T)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册