Don't enumerate fields on generic type Def (#77)
* Don't enumerate fields on generic type Def Prevent exception being thrown when generic type definition is not a constructed generic type when trying to retrieve field values. Added TODO with suggestion as to how to diagnose type arguments for generic type definition to create a constructed generic type. * add test demonstrating error
This commit is contained in:
parent
c3519f14c5
commit
aa10921687
@ -135,6 +135,12 @@ namespace System.Diagnostics
|
||||
if (methodDisplayInfo.IsLambda && type != null)
|
||||
{
|
||||
if (methodName == ".cctor")
|
||||
{
|
||||
if (type.IsGenericTypeDefinition && !type.IsConstructedGenericType)
|
||||
{
|
||||
// TODO: diagnose type's generic type arguments from frame's "this" or something
|
||||
}
|
||||
else
|
||||
{
|
||||
var fields = type.GetFields(BindingFlags.Static | BindingFlags.Public | BindingFlags.NonPublic);
|
||||
foreach (var field in fields)
|
||||
@ -155,6 +161,7 @@ namespace System.Diagnostics
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (subMethodName != methodName)
|
||||
{
|
||||
|
||||
42
test/Ben.Demystifier.Test/GenericMethodDisplayStringTests.cs
Normal file
42
test/Ben.Demystifier.Test/GenericMethodDisplayStringTests.cs
Normal file
@ -0,0 +1,42 @@
|
||||
using System;
|
||||
using System.Diagnostics;
|
||||
using System.Threading.Tasks;
|
||||
using Xunit;
|
||||
|
||||
namespace Ben.Demystifier.Test
|
||||
{
|
||||
public class GenericMethodDisplayStringTests
|
||||
{
|
||||
private static class Example<T>
|
||||
{
|
||||
// ReSharper disable once StaticMemberInGenericType
|
||||
public static readonly StackFrame StackFrame;
|
||||
|
||||
static Example()
|
||||
{
|
||||
var fun = new Func<StackFrame>(() => new StackFrame(0, true));
|
||||
|
||||
StackFrame = fun();
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void DiagnosesGenericMethodDisplayString()
|
||||
{
|
||||
var sf = Example<Type>.StackFrame;
|
||||
|
||||
try
|
||||
{
|
||||
var s = EnhancedStackTrace.GetMethodDisplayString(sf.GetMethod());
|
||||
Assert.True(true, "Does not throw exception when diagnosing generic method display string.");
|
||||
}
|
||||
catch (Exception ioe)
|
||||
{
|
||||
Assert.True(false, "Must not throw an exception when diagnosing generic method display string.");
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user