<!--
***********************************************************************************************
Microsoft.NET.Sdk.Razor.SourceGenerators.targets
WARNING:  DO NOT MODIFY this file unless you are knowledgeable about MSBuild and have
          created a backup copy.  Incorrect changes to this file will make it
          impossible to load or build your projects from the command-line or the IDE.
Copyright (c) .NET Foundation. All rights reserved.
***********************************************************************************************
-->

<Project ToolsVersion="14.0">

  <UsingTask TaskName="Microsoft.AspNetCore.Razor.Tasks.EncodeRazorInputItem" AssemblyFile="$(RazorSdkBuildTasksAssembly)" />

  <Target Name="_PrepareRazorSourceGenerators"
    BeforeTargets="GenerateMSBuildEditorConfigFileShouldRun"
    DependsOnTargets="PrepareForRazorGenerate;PrepareForRazorComponentGenerate">

    <PropertyGroup>
      <_RazorSdkSourceGeneratorDirectoryRoot>$(RazorSdkDirectoryRoot)\source-generators\</_RazorSdkSourceGeneratorDirectoryRoot>
      <ProvideApplicationPartFactoryAttributeTypeName Condition="'$(ProvideApplicationPartFactoryAttributeTypeName)' == ''">Microsoft.AspNetCore.Mvc.ApplicationParts.ConsolidatedAssemblyApplicationPartFactory, Microsoft.AspNetCore.Mvc.Razor</ProvideApplicationPartFactoryAttributeTypeName>
    </PropertyGroup>

    <PropertyGroup>
      <RazorEncConfigFile>$(_RazorSdkSourceGeneratorDirectoryRoot)RazorSourceGenerator.razorencconfig</RazorEncConfigFile>
    </PropertyGroup>

    <ItemGroup>
      <EditorConfigFiles Include="$(RazorEncConfigFile)" Condition="'$(DesignTimeBuild)' == 'true' AND '$(BuildingInsideVisualStudio)' == 'true'"/>
    </ItemGroup>

    <ItemGroup>
      <_RazorAnalyzer Include="$(_RazorSdkSourceGeneratorDirectoryRoot)*.dll" />
    </ItemGroup>

    <!-- Configure analyzers -->
    <ItemGroup>
      <Analyzer Include="@(_RazorAnalyzer)" />

      <RazorComponentWithTargetPath
        GeneratedOutputFullPath="$([System.IO.Path]::GetFullPath(%(GeneratedOutput)))"
        GeneratedDeclarationFullPath="$([System.IO.Path]::GetFullPath(%(GeneratedDeclaration)))" />
      <RazorGenerateWithTargetPath GeneratedOutputFullPath="$([System.IO.Path]::GetFullPath(%(GeneratedOutput)))" />
    </ItemGroup>

    <ItemGroup>
      <!-- Additional metadata and properties that we want the compiler to pass to   the compiler we want to pass additional MSBuild properties \ metadata -->
      <CompilerVisibleItemMetadata Include="AdditionalFiles" MetadataName="TargetPath" />
      <CompilerVisibleItemMetadata Include="AdditionalFiles" MetadataName="CssScope" />
      <CompilerVisibleProperty Include="RazorLangVersion" />
      <CompilerVisibleProperty Include="RootNamespace" />
      <CompilerVisibleProperty Include="SupportLocalizedComponentNames" />
      <CompilerVisibleProperty Include="GenerateRazorMetadataSourceChecksumAttributes" />
      <CompilerVisibleProperty Include="MSBuildProjectDirectory" />
      <CompilerVisibleProperty Include="_RazorSourceGeneratorDebug" />
    </ItemGroup>

    <ItemGroup>
      <!-- Pass razor files to the compiler. -->
      <_RazorAdditionalFile Include="@(RazorComponentWithTargetPath)" />
      <!-- Ignore .cshtml files if RazorCompileOnBuild=false -->
      <_RazorAdditionalFile Include="@(RazorGenerateWithTargetPath)" Condition="'$(RazorCompileOnBuild)' != 'false'" />
    </ItemGroup>

    <ItemGroup Condition="@(_RazorAdditionalFile->WithMetadataValue('Extension', '.cshtml')->Count()) > 0" >
      <_RazorAssemblyAttribute Include="Microsoft.AspNetCore.Mvc.ApplicationParts.ProvideApplicationPartFactoryAttribute">
        <_Parameter1>$(ProvideApplicationPartFactoryAttributeTypeName)</_Parameter1>
      </_RazorAssemblyAttribute>
    </ItemGroup>

    <EncodeRazorInputItem RazorInputItems="@(_RazorAdditionalFile)">
      <Output TaskParameter="EncodedRazorInputItems" ItemName="_RazorSpecialCharacterWorkaround" />
    </EncodeRazorInputItem>

    <ItemGroup>
      <_RazorAdditionalFile Remove="@(_RazorAdditionalFile)" />
      <_RazorAdditionalFile Include="@(_RazorSpecialCharacterWorkaround)" />

      <AdditionalFiles Include="@(_RazorAdditionalFile)" />
    </ItemGroup>
 </Target>

</Project>
