|
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
using System.Linq;
using System.Threading;
using Microsoft.AspNetCore.Razor.Language.Intermediate;
namespace Microsoft.AspNetCore.Razor.Language.Extensions;
internal class AttributeDirectivePass : IntermediateNodePassBase, IRazorDirectiveClassifierPass
{
protected override void ExecuteCore(
RazorCodeDocument codeDocument,
DocumentIntermediateNode documentNode,
CancellationToken cancellationToken)
{
var @namespace = documentNode.FindPrimaryNamespace();
var @class = documentNode.FindPrimaryClass();
if (@namespace == null || @class == null)
{
return;
}
var classIndex = @namespace.Children.IndexOf(@class);
foreach (var attribute in documentNode.FindDirectiveReferences(AttributeDirective.Directive))
{
var token = attribute.Node.Tokens.FirstOrDefault();
if (token != null)
{
var node = new CSharpCodeIntermediateNode
{
Source = token.Source
};
node.Children.Add(IntermediateNodeFactory.CSharpToken(token.Content, token.Source));
@namespace.Children.Insert(classIndex++, node);
}
}
}
}
|