@@ -816,5 +816,104 @@ public static IHostBuilder ConfigureGeneratedFunctionExecutor(this IHostBuilder
816816 }
817817 """ ;
818818 }
819+
820+ [ Theory ]
821+ [ InlineData ( LanguageVersion . CSharp7_3 ) ]
822+ [ InlineData ( LanguageVersion . CSharp8 ) ]
823+ [ InlineData ( LanguageVersion . CSharp9 ) ]
824+ [ InlineData ( LanguageVersion . CSharp10 ) ]
825+ [ InlineData ( LanguageVersion . CSharp11 ) ]
826+ [ InlineData ( LanguageVersion . Latest ) ]
827+ public async Task ObsoleteFunction ( LanguageVersion languageVersion )
828+ {
829+ const string inputSourceCode = @"
830+ using System;
831+ using System.Threading.Tasks;
832+ using Microsoft.Extensions.Hosting;
833+ using Azure.Storage.Queues.Models;
834+ using Microsoft.Azure.Functions.Worker;
835+ using Microsoft.Azure.Functions.Worker.Http;
836+ using Microsoft.Extensions.Logging;
837+ namespace TestProject
838+ {
839+ public class TestProject
840+ {
841+ [Function(""FunctionA"")]
842+ [Obsolete(""Do not use"")]
843+ public HttpResponseData Foo([HttpTrigger(AuthorizationLevel.User, ""get"")] HttpRequestData r, FunctionContext c)
844+ {
845+ return r.CreateResponse(System.Net.HttpStatusCode.OK);
846+ }
847+
848+ [Function(""FunctionB"")]
849+ [Obsolete(""Do not use"")]
850+ public static HttpResponseData FooStatic([HttpTrigger(AuthorizationLevel.User, ""get"")] HttpRequestData r, FunctionContext c)
851+ {
852+ return r.CreateResponse(System.Net.HttpStatusCode.OK);
853+ }
854+ }
855+ }
856+ " ;
857+ var expectedOutput = $@ "// <auto-generated/>
858+ using System;
859+ using System.Threading.Tasks;
860+ using System.Collections.Generic;
861+ using Microsoft.Extensions.Hosting;
862+ using Microsoft.Extensions.DependencyInjection;
863+ using Microsoft.Azure.Functions.Worker;
864+ using Microsoft.Azure.Functions.Worker.Context.Features;
865+ using Microsoft.Azure.Functions.Worker.Invocation;
866+ namespace TestProject
867+ {{
868+ [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Never)]
869+ { Constants . GeneratedCodeAttribute }
870+ internal class DirectFunctionExecutor : global::Microsoft.Azure.Functions.Worker.Invocation.IFunctionExecutor
871+ {{
872+ private readonly global::Microsoft.Azure.Functions.Worker.IFunctionActivator _functionActivator;
873+ private readonly Dictionary<string, Type> types = new Dictionary<string, Type>()
874+ {{
875+ {{ ""TestProject.TestProject"", Type.GetType(""TestProject.TestProject, TestProject, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null"") }}
876+ }};
877+
878+ public DirectFunctionExecutor(global::Microsoft.Azure.Functions.Worker.IFunctionActivator functionActivator)
879+ {{
880+ _functionActivator = functionActivator ?? throw new global::System.ArgumentNullException(nameof(functionActivator));
881+ }}
882+
883+ /// <inheritdoc/>
884+ public async global::System.Threading.Tasks.ValueTask ExecuteAsync(global::Microsoft.Azure.Functions.Worker.FunctionContext context)
885+ {{
886+ var inputBindingFeature = context.Features.Get<global::Microsoft.Azure.Functions.Worker.Context.Features.IFunctionInputBindingFeature>();
887+ var inputBindingResult = await inputBindingFeature.BindFunctionInputAsync(context);
888+ var inputArguments = inputBindingResult.Values;
889+
890+ if (string.Equals(context.FunctionDefinition.EntryPoint, ""TestProject.TestProject.Foo"", StringComparison.Ordinal))
891+ {{
892+ var instanceType = types[""TestProject.TestProject""];
893+ var i = _functionActivator.CreateInstance(instanceType, context) as global::TestProject.TestProject;
894+ #pragma warning disable CS0618
895+ context.GetInvocationResult().Value = i.Foo((global::Microsoft.Azure.Functions.Worker.Http.HttpRequestData)inputArguments[0], (global::Microsoft.Azure.Functions.Worker.FunctionContext)inputArguments[1]);
896+ #pragma warning restore CS0618
897+ return;
898+ }}
899+ if (string.Equals(context.FunctionDefinition.EntryPoint, ""TestProject.TestProject.FooStatic"", StringComparison.Ordinal))
900+ {{
901+ #pragma warning disable CS0618
902+ context.GetInvocationResult().Value = global::TestProject.TestProject.FooStatic((global::Microsoft.Azure.Functions.Worker.Http.HttpRequestData)inputArguments[0], (global::Microsoft.Azure.Functions.Worker.FunctionContext)inputArguments[1]);
903+ #pragma warning restore CS0618
904+ return;
905+ }}
906+ }}
907+ }}
908+ { GetExpectedExtensionMethodCode ( ) }
909+ }}" . Replace ( "'" , "\" " ) ;
910+
911+ await TestHelpers . RunTestAsync < Worker . Sdk . Generators . FunctionExecutorGenerator > (
912+ _referencedAssemblies ,
913+ inputSourceCode ,
914+ Constants . FileNames . GeneratedFunctionExecutor ,
915+ expectedOutput ,
916+ languageVersion : languageVersion ) ;
917+ }
819918 }
820919}
0 commit comments