terrajobst / nquery-vnext

A Roslyn inspired rewrite of NQuery
MIT License
72 stars 16 forks source link

ArgumentNullException due to `Array.Get` method with `null` parameter name #64

Open dallmair opened 6 months ago

dallmair commented 6 months ago

Run NQueryViewer and paste the following query:

SELECT  ''.Split('-'.ToCharArray(), 10)

Then type a . at the end to get the list of available properties and methods on the string[] type. It fails with the following exception:

CreateRange[T](IEnumerable`1 items)
   at System.Collections.Immutable.ImmutableArray.ToImmutableArray[TSource](IEnumerable`1 items)
   at NQuery.Symbols.ReflectionMethodSymbol.ConvertParameters(MethodInfo methodInfo) in .\nquery-vnext\src\NQuery\Symbols\ReflectionMethodSymbol.cs:line 24
   at NQuery.Symbols.ReflectionMethodSymbol..ctor(MethodInfo methodInfo, String name) in .\nquery-vnext\src\NQuery\Symbols\ReflectionMethodSymbol.cs:line 15
   at NQuery.Hosting.ReflectionProvider.CreateMethod(MethodInfo methodInfo) in .\nquery-vnext\src\NQuery\Hosting\ReflectionProvider.cs:line 306
   at NQuery.Hosting.ReflectionProvider.GetMethods(Type type) in .\nquery-vnext\src\NQuery\Hosting\ReflectionProvider.cs:line 289
   at NQuery.Binding.GlobalBinder.LookupMethods(Type type) in .\nquery-vnext\src\NQuery\Binding\GlobalBinder.cs:line 52
   at NQuery.Binding.Binder.LookupMethods(Type type) in .\nquery-vnext\src\NQuery\Binding\Binder.Lookup.cs:line 148
   at NQuery.Binding.Binder.LookupMethod(Type type, SyntaxToken name) in .\nquery-vnext\src\NQuery\Binding\Binder.Lookup.cs:line 153
   at NQuery.Binding.Binder.LookupMethod(Type type, SyntaxToken name, ImmutableArray`1 argumentTypes) in .\nquery-vnext\src\NQuery\Binding\Binder.Lookup.cs:line 159
   at NQuery.Binding.Binder.BindMethodInvocationExpression(MethodInvocationExpressionSyntax node) in .\nquery-vnext\src\NQuery\Binding\Binder.Expressions.cs:line 957
   at NQuery.Binding.Binder.BindExpressionInternal(ExpressionSyntax node) in .\nquery-vnext\src\NQuery\Binding\Binder.Expressions.cs:line 290
   at NQuery.Binding.Binder.Bind[TInput,TResult](TInput node, Func`2 bindMethod) in .\nquery-vnext\src\NQuery\Binding\Binder.cs:line 108
   at NQuery.Binding.Binder.BindExpression(ExpressionSyntax node) in .\nquery-vnext\src\NQuery\Binding\Binder.Expressions.cs:line 191
   at NQuery.Binding.Binder.BindExpressionSelectColumnInternal(ExpressionSelectColumnSyntax node) in .\nquery-vnext\src\NQuery\Binding\Binder.Queries.cs:line 1053
   at NQuery.Binding.Binder.Bind[TInput,TResult](TInput node, Func`2 bindMethod) in .\nquery-vnext\src\NQuery\Binding\Binder.cs:line 108
   at NQuery.Binding.Binder.BindExpressionSelectColumn(ExpressionSelectColumnSyntax node) in .\nquery-vnext\src\NQuery\Binding\Binder.Queries.cs:line 1047
   at NQuery.Binding.Binder.BindSelectColumns(IEnumerable`1 nodes) in .\nquery-vnext\src\NQuery\Binding\Binder.Queries.cs:line 1026
   at NQuery.Binding.Binder.BindSelectQuery(SelectQuerySyntax node, OrderedQuerySyntax orderedQueryNode) in .\nquery-vnext\src\NQuery\Binding\Binder.Queries.cs:line 890
   at NQuery.Binding.Binder.BindSelectQuery(SelectQuerySyntax node) in .\nquery-vnext\src\NQuery\Binding\Binder.Queries.cs:line 871
   at NQuery.Binding.Binder.BindQueryInternal(QuerySyntax node) in .\nquery-vnext\src\NQuery\Binding\Binder.Queries.cs:line 308
   at NQuery.Binding.Binder.Bind[TInput,TResult](TInput node, Func`2 bindMethod) in .\nquery-vnext\src\NQuery\Binding\Binder.cs:line 108
   at NQuery.Binding.Binder.BindQuery(QuerySyntax node) in .\nquery-vnext\src\NQuery\Binding\Binder.Queries.cs:line 282
   at NQuery.Binding.Binder.BindRoot(SyntaxNode root) in .\nquery-vnext\src\NQuery\Binding\Binder.cs:line 98
   at NQuery.Binding.Binder.Bind(CompilationUnitSyntax compilationUnit, DataContext dataContext) in .\nquery-vnext\src\NQuery\Binding\Binder.cs:line 89
   at NQuery.Compilation.GetSemanticModel() in .\nquery-vnext\src\NQuery\Compilation.cs:line 27
   at NQuery.Authoring.Document.<>c__DisplayClass21_0.<ComputeSemanticModelAsync>b__0() in .\nquery-vnext\src\NQuery.Authoring\Document.cs:line 115
   at System.Threading.Tasks.Task`1.InnerInvoke()
   at System.Threading.Tasks.Task.<>c.<.cctor>b__272_0(Object obj)
   at System.Threading.ExecutionContext.RunFromThreadPoolDispatchLoop(Thread threadPoolThread, ExecutionContext executionContext, ContextCallback callback, Object state)
--- End of stack trace from previous location ---
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()

Reason: There is a method named Get in the string[] (Array) type, which accepts a single int32 parameter and said parameter does not have a name.