From cc02f3dc12896b1a5078b6ddbc6a77e549be50d4 Mon Sep 17 00:00:00 2001 From: Anthony Martin <38542602+anthony-c-martin@users.noreply.github.com> Date: Fri, 20 Sep 2024 09:06:36 -0400 Subject: [PATCH] Restore behavior to avoid inferring dependencies --- .../Scenarios/NameofFunctionTests.cs | 4 ++-- src/Bicep.Core/Emit/ResourceDependencyVisitor.cs | 13 +++++++++++++ 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/src/Bicep.Core.IntegrationTests/Scenarios/NameofFunctionTests.cs b/src/Bicep.Core.IntegrationTests/Scenarios/NameofFunctionTests.cs index 4d6081752cb..1e2052ecbe0 100644 --- a/src/Bicep.Core.IntegrationTests/Scenarios/NameofFunctionTests.cs +++ b/src/Bicep.Core.IntegrationTests/Scenarios/NameofFunctionTests.cs @@ -241,7 +241,7 @@ public void NameofFunction_OnResourceProperty_ReturnsResourcePropertyName(string } [TestMethod] - public void UsingNameofFunction_ShouldGenerateDependsOnEntries() + public void UsingNameofFunction_ShouldNotGenerateDependsOnEntries() { var result = CompilationHelper.Compile(""" resource myStorage 'Microsoft.Storage/storageAccounts@2019-06-01' = { @@ -257,7 +257,7 @@ public void UsingNameofFunction_ShouldGenerateDependsOnEntries() { result.Should().NotHaveAnyCompilationBlockingDiagnostics(); result.Template.Should().HaveValueAtPath("$.resources[?(@.type == 'Microsoft.Sql/servers')].name", "myStorage", "Nameof function should emit static string during compilation"); - result.Template.Should().HaveValueAtPath("$.resources[?(@.type == 'Microsoft.Sql/servers')].dependsOn[0]", "[resourceId('Microsoft.Storage/storageAccounts', 'storage123')]"); + result.Template.Should().NotHaveValueAtPath("$.resources[?(@.type == 'Microsoft.Sql/servers')].dependsOn", "Depends on should not be generated for nameof function usage"); } } diff --git a/src/Bicep.Core/Emit/ResourceDependencyVisitor.cs b/src/Bicep.Core/Emit/ResourceDependencyVisitor.cs index c6a11e1c5e2..910d3992d08 100644 --- a/src/Bicep.Core/Emit/ResourceDependencyVisitor.cs +++ b/src/Bicep.Core/Emit/ResourceDependencyVisitor.cs @@ -7,6 +7,7 @@ using Bicep.Core.Semantics; using Bicep.Core.Semantics.Metadata; using Bicep.Core.Syntax; +using Bicep.Core.TypeSystem; namespace Bicep.Core.Emit { @@ -282,6 +283,15 @@ public override void VisitObjectPropertySyntax(ObjectPropertySyntax propertySynt base.VisitObjectPropertySyntax(propertySyntax); } + public override void VisitFunctionCallSyntax(FunctionCallSyntax syntax) + { + var functionSymbol = model.GetSymbolInfo(syntax) as FunctionSymbol; + if (ShouldVisitFunctionArguments(functionSymbol)) + { + base.VisitFunctionCallSyntax(syntax); + } + } + private bool IsTopLevelPropertyOfCurrentDeclaration(ObjectPropertySyntax propertySyntax) { SyntaxBase? declaringSyntax = this.currentDeclaration switch @@ -294,5 +304,8 @@ private bool IsTopLevelPropertyOfCurrentDeclaration(ObjectPropertySyntax propert return currentDeclarationProperties?.Contains(propertySyntax) ?? false; } + + private static bool ShouldVisitFunctionArguments(FunctionSymbol? functionSymbol) + => functionSymbol is null || !functionSymbol.FunctionFlags.HasFlag(FunctionFlags.IsArgumentValueIndependent); } }