Open ChrisBlankDe opened 5 years ago
I also ran into, what I think is, the same or a similar issue when (accidentally) using two handler procedures with the same signature:
[RequestPageHandler]
procedure MyProcedure(var MyPage: TestRequestPage MyPage)
begin
end;
[RequestPageHandler]
procedure MyProcedure(var MyPage: TestRequestPage MyPage)
begin
end;
results in the following exception:
Internal error: System.AggregateException: One or more errors occurred. ---> System.NullReferenceException: Object reference not set to an instance of an object.
at Microsoft.Dynamics.Nav.CodeAnalysis.Symbols.ObjectMembers`1.CompareOverloadParameter(ParameterSymbol parameterA, ParameterSymbol parameterB) in F:\a\435\s\source\Prod\Microsoft.Dynamics.Nav.CodeAnalysis\Symbols\Members\ObjectMembers.cs:line 294
at Microsoft.Dynamics.Nav.CodeAnalysis.Symbols.ObjectMembers`1.CheckOverloadUniqueness(PooledList`1 methods, MethodSymbol method, DiagnosticBag diagnostics) in F:\a\435\s\source\Prod\Microsoft.Dynamics.Nav.CodeAnalysis\Symbols\Members\ObjectMembers.cs:line 264
at Microsoft.Dynamics.Nav.CodeAnalysis.Symbols.ObjectMembers`1.ForceMembersCompleteAndCheckUniqueness(SourceLocation locationOpt, DiagnosticBag diagnostics, CancellationToken cancellationToken, Predicate`1 excludeFromNameUniqueness) in F:\a\435\s\source\Prod\Microsoft.Dynamics.Nav.CodeAnalysis\Symbols\Members\ObjectMembers.cs:line 235
at Microsoft.Dynamics.Nav.CodeAnalysis.Symbols.ObjectMembers`1.ForceCompleteMembers(SourceLocation locationOpt, CancellationToken cancellationToken, Predicate`1 excludeFromNameUniqueness) in F:\a\435\s\source\Prod\Microsoft.Dynamics.Nav.CodeAnalysis\Symbols\Members\ObjectMembers.cs:line 766
at Microsoft.Dynamics.Nav.CodeAnalysis.Symbols.ObjectMembers`1.ForceComplete(SourceLocation locationOpt, CancellationToken cancellationToken, Predicate`1 excludeFromNameUniqueness) in F:\a\435\s\source\Prod\Microsoft.Dynamics.Nav.CodeAnalysis\Symbols\Members\ObjectMembers.cs:line 734
at Microsoft.Dynamics.Nav.CodeAnalysis.Symbols.SourceReportTypeSymbol.ForceComplete(SourceLocation locationOpt, CancellationToken cancellationToken) in F:\a\435\s\source\Prod\Microsoft.Dynamics.Nav.CodeAnalysis\Symbols\Source\SourceReportTypeSymbol.cs:line 56
at Microsoft.Dynamics.Nav.CodeAnalysis.Symbols.SourceModuleSymbol.ForceCompleteMemberByLocation(SourceLocation locationOpt, Symbol member, CancellationToken cancellationToken) in F:\a\435\s\source\Prod\Microsoft.Dynamics.Nav.CodeAnalysis\Symbols\Source\SourceModuleSymbol.cs:line 207
at Microsoft.Dynamics.Nav.CodeAnalysis.Utilities.UICultureUtilities.<>c__DisplayClass6_0`1.<WithCurrentUICulture>b__0(T param) in F:\a\435\s\source\Prod\Microsoft.Dynamics.Nav.CodeAnalysis\Utilities\UICultureUtilities.cs:line 178
at System.Threading.Tasks.Parallel.<>c__DisplayClass17_0`1.<ForWorker>b__1()
at System.Threading.Tasks.Task.InnerInvokeWithArg(Task childTask)
at System.Threading.Tasks.Task.<>c__DisplayClass176_0.<ExecuteSelfReplicating>b__0(Object )
--- End of inner exception stack trace ---
at System.Threading.Tasks.Task.ThrowIfExceptional(Boolean includeTaskCanceledExceptions)
at System.Threading.Tasks.Task.Wait(Int32 millisecondsTimeout, CancellationToken cancellationToken)
at System.Threading.Tasks.Parallel.ForWorker[TLocal](Int32 fromInclusive, Int32 toExclusive, ParallelOptions parallelOptions, Action`1 body, Action`2 bodyWithState, Func`4 bodyWithLocal, Func`1 localInit, Action`1 localFinally)
at System.Threading.Tasks.Parallel.For(Int32 fromInclusive, Int32 toExclusive, ParallelOptions parallelOptions, Action`1 body)
at Microsoft.Dynamics.Nav.CodeAnalysis.Symbols.SourceModuleSymbol.ForceComplete(SourceLocation locationOpt, CancellationToken cancellationToken) in F:\a\435\s\source\Prod\Microsoft.Dynamics.Nav.CodeAnalysis\Symbols\Source\SourceModuleSymbol.cs:line 109
at Microsoft.Dynamics.Nav.CodeAnalysis.Compilation.GetSourceDeclarationDiagnostics(SyntaxTree syntaxTree, Nullable`1 filterSpanWithinTree, Func`4 locationFilterOpt, CancellationToken cancellationToken) in F:\a\435\s\source\Prod\Microsoft.Dynamics.Nav.CodeAnalysis\Compilation\Compilation.cs:line 889
at Microsoft.Dynamics.Nav.CodeAnalysis.Compilation.GetDiagnostics(CompilationStage stage, Boolean includeEarlierStages, CancellationToken cancellationToken) in F:\a\435\s\source\Prod\Microsoft.Dynamics.Nav.CodeAnalysis\Compilation\Compilation.cs:line 583
---> (Inner Exception #0) System.NullReferenceException: Object reference not set to an instance of an object.
at Microsoft.Dynamics.Nav.CodeAnalysis.Symbols.ObjectMembers`1.CompareOverloadParameter(ParameterSymbol parameterA, ParameterSymbol parameterB) in F:\a\435\s\source\Prod\Microsoft.Dynamics.Nav.CodeAnalysis\Symbols\Members\ObjectMembers.cs:line 294
at Microsoft.Dynamics.Nav.CodeAnalysis.Symbols.ObjectMembers`1.CheckOverloadUniqueness(PooledList`1 methods, MethodSymbol method, DiagnosticBag diagnostics) in F:\a\435\s\source\Prod\Microsoft.Dynamics.Nav.CodeAnalysis\Symbols\Members\ObjectMembers.cs:line 264
at Microsoft.Dynamics.Nav.CodeAnalysis.Symbols.ObjectMembers`1.ForceMembersCompleteAndCheckUniqueness(SourceLocation locationOpt, DiagnosticBag diagnostics, CancellationToken cancellationToken, Predicate`1 excludeFromNameUniqueness) in F:\a\435\s\source\Prod\Microsoft.Dynamics.Nav.CodeAnalysis\Symbols\Members\ObjectMembers.cs:line 235
at Microsoft.Dynamics.Nav.CodeAnalysis.Symbols.ObjectMembers`1.ForceCompleteMembers(SourceLocation locationOpt, CancellationToken cancellationToken, Predicate`1 excludeFromNameUniqueness) in F:\a\435\s\source\Prod\Microsoft.Dynamics.Nav.CodeAnalysis\Symbols\Members\ObjectMembers.cs:line 766
at Microsoft.Dynamics.Nav.CodeAnalysis.Symbols.ObjectMembers`1.ForceComplete(SourceLocation locationOpt, CancellationToken cancellationToken, Predicate`1 excludeFromNameUniqueness) in F:\a\435\s\source\Prod\Microsoft.Dynamics.Nav.CodeAnalysis\Symbols\Members\ObjectMembers.cs:line 734
at Microsoft.Dynamics.Nav.CodeAnalysis.Symbols.SourceReportTypeSymbol.ForceComplete(SourceLocation locationOpt, CancellationToken cancellationToken) in F:\a\435\s\source\Prod\Microsoft.Dynamics.Nav.CodeAnalysis\Symbols\Source\SourceReportTypeSymbol.cs:line 56
at Microsoft.Dynamics.Nav.CodeAnalysis.Symbols.SourceModuleSymbol.ForceCompleteMemberByLocation(SourceLocation locationOpt, Symbol member, CancellationToken cancellationToken) in F:\a\435\s\source\Prod\Microsoft.Dynamics.Nav.CodeAnalysis\Symbols\Source\SourceModuleSymbol.cs:line 207
at Microsoft.Dynamics.Nav.CodeAnalysis.Utilities.UICultureUtilities.<>c__DisplayClass6_0`1.<WithCurrentUICulture>b__0(T param) in F:\a\435\s\source\Prod\Microsoft.Dynamics.Nav.CodeAnalysis\Utilities\UICultureUtilities.cs:line 178
at System.Threading.Tasks.Parallel.<>c__DisplayClass17_0`1.<ForWorker>b__1()
at System.Threading.Tasks.Task.InnerInvokeWithArg(Task childTask)
at System.Threading.Tasks.Task.<>c__DisplayClass176_0.<ExecuteSelfReplicating>b__0(Object )<---
Using AL Language 3.0.126610 as well.
@rvanbekkum i think it's correct that the build fails because both functions have the same signature (procedure name + type and order of parameters). However, the message could be much better.
In my example it should have no problem because the signature is different.
Yes, I am aware that my example should give an error (that's why I wrote 'accidentally' :)), but indeed my point was that it gives an exception rather than a nice error message to tell you that at line X in file Y you have a duplicate procedure name.
It seems though that the exceptions are quite similar (looking at the stack trace) so it might be the same underlying issue in the AL Language compiler. If it turns out it is not, I could also make a different issue for it.
Describe the bug Compiler fails when Function overloading with ControlAddIn is in Parameter list
Looks like this Bug: https://github.com/microsoft/AL/issues/4035
To Reproduce Steps and to reproduce the behavior:
Code to Test
Error from Console
Expected behavior Overloading with ControlAddIn as parameter should be possible OR documented as not supported feature.
Versions: