KirillOsenkov / RoslynQuoter

Roslyn tool that for a given C# program shows syntax tree API calls to construct its syntax tree
http://roslynquoter.azurewebsites.net
Apache License 2.0
918 stars 118 forks source link

System.ArgumentException for method calls with a ulong numeric literal #77

Closed Sergio0694 closed 1 year ago

Sergio0694 commented 1 year ago

Hey there! Found a small bug in this (amazing) web tool 😄

Repro

Foo(0x0000800000000000);

Stack trace

"System.ArgumentException: Object of type 'System.UInt64' cannot be converted to type 'System.Int64'."

at System.RuntimeType.TryChangeType(Object value, Binder binder, CultureInfo culture, Boolean needsSpecialCast)
at System.Reflection.MethodBase.CheckArguments(Object[] parameters, Binder binder, BindingFlags invokeAttr, CultureInfo culture, Signature sig)
at System.Reflection.RuntimeMethodInfo.InvokeArgumentsCheck(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
at System.Reflection.RuntimeMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
at RoslynQuoter.Quoter.InterpretMethodCall(Object instance, MethodCall methodCall) in D:\a\1\s\src\Quoter\Quoter.cs:line 1262
at RoslynQuoter.Quoter.InterpretApiCall(ApiCall apiCall) in D:\a\1\s\src\Quoter\Quoter.cs:line 1211
at RoslynQuoter.Quoter.GetArgument(Type parameterType, Object argument) in D:\a\1\s\src\Quoter\Quoter.cs:line 1492
at RoslynQuoter.Quoter.PickCandidateMethod(String name, IList`1 arguments, IEnumerable`1 candidates, Type genericArgumentType) in D:\a\1\s\src\Quoter\Quoter.cs:line 1448
at RoslynQuoter.Quoter.InterpretMethodCall(Object instance, MethodCall methodCall) in D:\a\1\s\src\Quoter\Quoter.cs:line 1262
at RoslynQuoter.Quoter.InterpretApiCall(ApiCall apiCall) in D:\a\1\s\src\Quoter\Quoter.cs:line 1211
at RoslynQuoter.Quoter.GetArgument(Type parameterType, Object argument) in D:\a\1\s\src\Quoter\Quoter.cs:line 1492
at RoslynQuoter.Quoter.PickCandidateMethod(String name, IList`1 arguments, IEnumerable`1 candidates, Type genericArgumentType) in D:\a\1\s\src\Quoter\Quoter.cs:line 1448
at RoslynQuoter.Quoter.InterpretMethodCall(Object instance, MethodCall methodCall) in D:\a\1\s\src\Quoter\Quoter.cs:line 1262
at RoslynQuoter.Quoter.InterpretApiCall(ApiCall apiCall) in D:\a\1\s\src\Quoter\Quoter.cs:line 1211
at RoslynQuoter.Quoter.GetArgument(Type parameterType, Object argument) in D:\a\1\s\src\Quoter\Quoter.cs:line 1492
at RoslynQuoter.Quoter.PickCandidateMethod(String name, IList`1 arguments, IEnumerable`1 candidates, Type genericArgumentType) in D:\a\1\s\src\Quoter\Quoter.cs:line 1448
at RoslynQuoter.Quoter.InterpretMethodCall(Object instance, MethodCall methodCall) in D:\a\1\s\src\Quoter\Quoter.cs:line 1262
at RoslynQuoter.Quoter.InterpretApiCall(ApiCall apiCall) in D:\a\1\s\src\Quoter\Quoter.cs:line 1211
at RoslynQuoter.Quoter.GetArgument(Type parameterType, Object argument) in D:\a\1\s\src\Quoter\Quoter.cs:line 1492
at RoslynQuoter.Quoter.PickCandidateMethod(String name, IList`1 arguments, IEnumerable`1 candidates, Type genericArgumentType) in D:\a\1\s\src\Quoter\Quoter.cs:line 1448
at RoslynQuoter.Quoter.InterpretMethodCall(Object instance, MethodCall methodCall) in D:\a\1\s\src\Quoter\Quoter.cs:line 1262
at RoslynQuoter.Quoter.InterpretApiCall(ApiCall apiCall) in D:\a\1\s\src\Quoter\Quoter.cs:line 1211
at RoslynQuoter.Quoter.Evaluate(ApiCall apiCall, Boolean normalizeWhitespace) in D:\a\1\s\src\Quoter\Quoter.cs:line 1176
at RoslynQuoter.Quoter.AddModifyingCall(ApiCall apiCall, MethodCall methodCall) in D:\a\1\s\src\Quoter\Quoter.cs:line 1150
at RoslynQuoter.Quoter.AddModifyingCalls(Object treeElement, ApiCall apiCall, List`1 values) in D:\a\1\s\src\Quoter\Quoter.cs:line 1131
at RoslynQuoter.Quoter.QuoteNode(SyntaxNode node, String name) in D:\a\1\s\src\Quoter\Quoter.cs:line 209
at RoslynQuoter.Quoter.QuotePropertyValue(SyntaxNode node, PropertyInfo property) in D:\a\1\s\src\Quoter\Quoter.cs:line 291
at System.Linq.Enumerable.WhereSelectArrayIterator`2.MoveNext()
at System.Linq.Enumerable.WhereEnumerableIterator`1.MoveNext()
at System.Collections.Generic.List`1.InsertRange(Int32 index, IEnumerable`1 collection)
at RoslynQuoter.Quoter.QuotePropertyValues(SyntaxNode node)
at RoslynQuoter.Quoter.QuoteNode(SyntaxNode node, String name) in D:\a\1\s\src\Quoter\Quoter.cs:line 209
at RoslynQuoter.Quoter.QuotePropertyValue(SyntaxNode node, PropertyInfo property) in D:\a\1\s\src\Quoter\Quoter.cs:line 291
at System.Linq.Enumerable.WhereSelectArrayIterator`2.MoveNext()
at System.Linq.Enumerable.WhereEnumerableIterator`1.MoveNext()
at System.Collections.Generic.List`1.InsertRange(Int32 index, IEnumerable`1 collection)
at RoslynQuoter.Quoter.QuotePropertyValues(SyntaxNode node)
at RoslynQuoter.Quoter.QuoteNode(SyntaxNode node, String name) in D:\a\1\s\src\Quoter\Quoter.cs:line 209
at RoslynQuoter.Quoter.QuotePropertyValue(SyntaxNode node, PropertyInfo property) in D:\a\1\s\src\Quoter\Quoter.cs:line 291
at System.Linq.Enumerable.WhereSelectArrayIterator`2.MoveNext()
at System.Linq.Enumerable.WhereEnumerableIterator`1.MoveNext()
at System.Collections.Generic.List`1.InsertRange(Int32 index, IEnumerable`1 collection)
at RoslynQuoter.Quoter.QuotePropertyValues(SyntaxNode node)
at RoslynQuoter.Quoter.QuoteNode(SyntaxNode node, String name) in D:\a\1\s\src\Quoter\Quoter.cs:line 209
at RoslynQuoter.Quoter.Quote(Object treeElement, String name) in D:\a\1\s\src\Quoter\Quoter.cs:line 182
at System.Linq.Enumerable.SelectEnumerableIterator`2.MoveNext()
at System.Linq.Enumerable.WhereEnumerableIterator`1.MoveNext()
at System.Collections.Generic.List`1..ctor(IEnumerable`1 collection)
at RoslynQuoter.Quoter.QuoteList(IEnumerable syntaxList, String name) in D:\a\1\s\src\Quoter\Quoter.cs:line 315
at RoslynQuoter.Quoter.QuotePropertyValue(SyntaxNode node, PropertyInfo property) in D:\a\1\s\src\Quoter\Quoter.cs:line 291
at System.Linq.Enumerable.WhereSelectArrayIterator`2.MoveNext()
at System.Linq.Enumerable.WhereEnumerableIterator`1.MoveNext()
at System.Collections.Generic.List`1.InsertRange(Int32 index, IEnumerable`1 collection)
at RoslynQuoter.Quoter.QuotePropertyValues(SyntaxNode node)
at RoslynQuoter.Quoter.QuoteNode(SyntaxNode node, String name) in D:\a\1\s\src\Quoter\Quoter.cs:line 209
at RoslynQuoter.Quoter.Quote(Object treeElement, String name) in D:\a\1\s\src\Quoter\Quoter.cs:line 182
at RoslynQuoter.Quoter.Quote(SyntaxNode node) in D:\a\1\s\src\Quoter\Quoter.cs:line 150
at RoslynQuoter.Quoter.QuoteText(String sourceText, NodeKind nodeKind) in D:\a\1\s\src\Quoter\Quoter.cs:line 82
at QuoterService.Controllers.QuoterController.Post(QuoterRequestArgument arguments) in D:\a\1\s\src\Quoter.Web\Controllers\QuoterController.cs:line 66

Cheers, keep up the good work! 🍻

KirillOsenkov commented 1 year ago

Good bug, thanks for the report!