Skip to content

Compiler: Clean up and reduce allocations in declaration intermediate nodes #12024

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 12 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,7 @@ @model Type1
var classNode = documentNode.GetClassNode();
var baseType = classNode.BaseType;

Assert.NotNull(baseType);
Assert.Equal("BaseType", baseType.BaseType.Content);
Assert.NotNull(baseType.BaseType.Source);

Expand Down Expand Up @@ -114,6 +115,7 @@ @model Type2
var classNode = documentNode.GetClassNode();
var baseType = classNode.BaseType;

Assert.NotNull(baseType);
Assert.Equal("BaseType", baseType.BaseType.Content);
Assert.NotNull(baseType.BaseType.Source);

Expand Down Expand Up @@ -141,6 +143,7 @@ @model Type1
var classNode = documentNode.GetClassNode();
var baseType = classNode.BaseType;

Assert.NotNull(baseType);
Assert.Equal("BaseType", baseType.BaseType.Content);
Assert.NotNull(baseType.BaseType.Source);

Expand All @@ -166,6 +169,7 @@ @inherits BaseType<TModel>
var classNode = documentNode.GetClassNode();
var baseType = classNode.BaseType;

Assert.NotNull(baseType);
Assert.Equal("BaseType", baseType.BaseType.Content);
Assert.NotNull(baseType.BaseType.Source);

Expand Down Expand Up @@ -193,6 +197,7 @@ @inherits BaseType<TModel>
var classNode = documentNode.GetClassNode();
var baseType = classNode.BaseType;

Assert.NotNull(baseType);
Assert.Equal("BaseType", baseType.BaseType.Content);
Assert.Null(baseType.BaseType.Source);

Expand Down Expand Up @@ -224,6 +229,7 @@ @model SomeType
var classNode = documentNode.GetClassNode();
var baseType = classNode.BaseType;

Assert.NotNull(baseType);
Assert.Equal("BaseType", baseType.BaseType.Content);
Assert.Null(baseType.BaseType.Source);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -86,7 +86,7 @@ public void MvcViewDocumentClassifierPass_SetsClass()
Assert.Equal("global::Microsoft.AspNetCore.Mvc.Razor.RazorPage", baseNode.BaseType.Content);
Assert.NotNull(baseNode.ModelType);
Assert.Equal("TModel", baseNode.ModelType.Content);
Assert.Equal(["public"], classNode.Modifiers);
Assert.Equal<string>(["public"], classNode.Modifiers);
Assert.Equal("Test", classNode.ClassName);
}

Expand All @@ -109,7 +109,7 @@ public void MvcViewDocumentClassifierPass_NullFilePath_SetsClass()
Assert.Equal("global::Microsoft.AspNetCore.Mvc.Razor.RazorPage", baseNode.BaseType.Content);
Assert.NotNull(baseNode.ModelType);
Assert.Equal("TModel", baseNode.ModelType.Content);
Assert.Equal(["public"], classNode.Modifiers);
Assert.Equal<string>(["public"], classNode.Modifiers);
AssertEx.Equal("AspNetCore_ec563e63d931b806184cb02f79875e4f3b21d1ca043ad06699424459128b58c0", classNode.ClassName);
}

Expand Down Expand Up @@ -186,6 +186,6 @@ public void MvcViewDocumentClassifierPass_SetsUpExecuteAsyncMethod()

Assert.Equal("ExecuteAsync", methodNode.MethodName);
Assert.Equal("global::System.Threading.Tasks.Task", methodNode.ReturnType);
Assert.Equal(["public", "async", "override"], methodNode.Modifiers);
Assert.Equal<string>(["public", "async", "override"], methodNode.Modifiers);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -33,10 +33,9 @@ public void Execute_NoOps_IfNamespaceNodeHasEmptyContent()
var documentNode = new DocumentIntermediateNode() { Options = codeDocument.CodeGenerationOptions };

var builder = IntermediateNodeBuilder.Create(documentNode);
var @namespace = new NamespaceDeclarationIntermediateNode()
var @namespace = new NamespaceDeclarationIntermediateNode(isPrimaryNamespace: true)
{
Content = string.Empty,
IsPrimaryNamespace = true,
Content = string.Empty
};

builder.Push(@namespace);
Expand Down Expand Up @@ -77,18 +76,14 @@ public void Execute_NoOps_IfClassNameIsEmpty()

var builder = IntermediateNodeBuilder.Create(documentNode);

var @namespace = new NamespaceDeclarationIntermediateNode()
var @namespace = new NamespaceDeclarationIntermediateNode(isPrimaryNamespace: true)
{
Content = "SomeNamespace",
IsPrimaryNamespace = true,
Content = "SomeNamespace"
};

builder.Push(@namespace);

builder.Add(new ClassDeclarationIntermediateNode
{
IsPrimaryClass = true,
});
builder.Add(new ClassDeclarationIntermediateNode(isPrimaryClass: true));

// Act
ProjectEngine.ExecutePass<AssemblyAttributeInjectionPass>(codeDocument, documentNode);
Expand All @@ -113,10 +108,9 @@ public void Execute_NoOps_IfDocumentIsNotViewOrPage()
var @namespace = new NamespaceDeclarationIntermediateNode() { Content = "SomeNamespace" };
builder.Push(@namespace);

var @class = new ClassDeclarationIntermediateNode
var @class = new ClassDeclarationIntermediateNode(isPrimaryClass: true)
{
ClassName = "SomeName",
IsPrimaryClass = true,
ClassName = "SomeName"
};

builder.Add(@class);
Expand All @@ -143,18 +137,16 @@ public void Execute_NoOps_ForDesignTime()
};

var builder = IntermediateNodeBuilder.Create(documentNode);
var @namespace = new NamespaceDeclarationIntermediateNode
var @namespace = new NamespaceDeclarationIntermediateNode(isPrimaryNamespace: true)
{
Content = "SomeNamespace",
IsPrimaryNamespace = true,
Content = "SomeNamespace"
};

builder.Push(@namespace);

var @class = new ClassDeclarationIntermediateNode
var @class = new ClassDeclarationIntermediateNode(isPrimaryClass: true)
{
ClassName = "SomeName",
IsPrimaryClass = true,
ClassName = "SomeName"
};

builder.Add(@class);
Expand Down Expand Up @@ -184,17 +176,15 @@ public void Execute_AddsRazorViewAttribute_ToViews()

var builder = IntermediateNodeBuilder.Create(documentNode);

var @namespace = new NamespaceDeclarationIntermediateNode
var @namespace = new NamespaceDeclarationIntermediateNode(isPrimaryNamespace: true)
{
Content = "SomeNamespace",
IsPrimaryNamespace = true,
Content = "SomeNamespace"
};

builder.Push(@namespace);
var @class = new ClassDeclarationIntermediateNode
var @class = new ClassDeclarationIntermediateNode(isPrimaryClass: true)
{
ClassName = "SomeName",
IsPrimaryClass = true,
ClassName = "SomeName"
};

builder.Add(@class);
Expand Down Expand Up @@ -231,18 +221,16 @@ public void Execute_EscapesViewPathWhenAddingAttributeToViews()

var builder = IntermediateNodeBuilder.Create(documentNode);

var @namespace = new NamespaceDeclarationIntermediateNode
var @namespace = new NamespaceDeclarationIntermediateNode(isPrimaryNamespace: true)
{
Content = "SomeNamespace",
IsPrimaryNamespace = true,
Content = "SomeNamespace"
};

builder.Push(@namespace);

var @class = new ClassDeclarationIntermediateNode
var @class = new ClassDeclarationIntermediateNode(isPrimaryClass: true)
{
ClassName = "SomeName",
IsPrimaryClass = true,
ClassName = "SomeName"
};

builder.Add(@class);
Expand Down Expand Up @@ -286,18 +274,16 @@ public void Execute_AddsRazorPagettribute_ToPage()

builder.Add(pageDirective);

var @namespace = new NamespaceDeclarationIntermediateNode
var @namespace = new NamespaceDeclarationIntermediateNode(isPrimaryNamespace: true)
{
Content = "SomeNamespace",
IsPrimaryNamespace = true,
Content = "SomeNamespace"
};

builder.Push(@namespace);

var @class = new ClassDeclarationIntermediateNode
var @class = new ClassDeclarationIntermediateNode(isPrimaryClass: true)
{
ClassName = "SomeName",
IsPrimaryClass = true,
ClassName = "SomeName"
};

builder.Add(@class);
Expand Down Expand Up @@ -335,17 +321,16 @@ public void Execute_EscapesViewPathAndRouteWhenAddingAttributeToPage()

var builder = IntermediateNodeBuilder.Create(documentNode);

var @namespace = new NamespaceDeclarationIntermediateNode
var @namespace = new NamespaceDeclarationIntermediateNode(isPrimaryNamespace: true)
{
Content = "SomeNamespace",
IsPrimaryNamespace = true,
Content = "SomeNamespace"
};

builder.Push(@namespace);

var @class = new ClassDeclarationIntermediateNode
var @class = new ClassDeclarationIntermediateNode(isPrimaryClass: true)
{
ClassName = "SomeName",
IsPrimaryClass = true,
ClassName = "SomeName"
};

builder.Add(@class);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,7 @@ @model Type1
var classNode = documentNode.GetClassNode();
var baseType = classNode.BaseType;

Assert.NotNull(baseType);
Assert.Equal("BaseType", baseType.BaseType.Content);
Assert.NotNull(baseType.BaseType.Source);

Expand Down Expand Up @@ -114,6 +115,7 @@ @model Type2
var classNode = documentNode.GetClassNode();
var baseType = classNode.BaseType;

Assert.NotNull(baseType);
Assert.Equal("BaseType", baseType.BaseType.Content);
Assert.NotNull(baseType.BaseType.Source);

Expand Down Expand Up @@ -141,6 +143,7 @@ @model Type1
var classNode = documentNode.GetClassNode();
var baseType = classNode.BaseType;

Assert.NotNull(baseType);
Assert.Equal("BaseType", baseType.BaseType.Content);
Assert.NotNull(baseType.BaseType.Source);

Expand All @@ -166,6 +169,7 @@ @inherits BaseType<TModel>
var classNode = documentNode.GetClassNode();
var baseType = classNode.BaseType;

Assert.NotNull(baseType);
Assert.Equal("BaseType", baseType.BaseType.Content);
Assert.NotNull(baseType.BaseType.Source);

Expand Down Expand Up @@ -193,6 +197,7 @@ @inherits BaseType<TModel>
var classNode = documentNode.GetClassNode();
var baseType = classNode.BaseType;

Assert.NotNull(baseType);
Assert.Equal("BaseType", baseType.BaseType.Content);
Assert.Null(baseType.BaseType.Source);

Expand Down Expand Up @@ -224,6 +229,7 @@ @model SomeType
var classNode = documentNode.GetClassNode();
var baseType = classNode.BaseType;

Assert.NotNull(baseType);
Assert.Equal("BaseType", baseType.BaseType.Content);
Assert.Null(baseType.BaseType.Source);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -86,7 +86,7 @@ public void MvcViewDocumentClassifierPass_SetsClass()
Assert.Equal("global::Microsoft.AspNetCore.Mvc.Razor.RazorPage", baseNode.BaseType.Content);
Assert.NotNull(baseNode.ModelType);
Assert.Equal("TModel", baseNode.ModelType.Content);
Assert.Equal(["public"], classNode.Modifiers);
Assert.Equal<string>(["public"], classNode.Modifiers);
Assert.Equal("Test", classNode.ClassName);
}

Expand All @@ -109,7 +109,7 @@ public void MvcViewDocumentClassifierPass_NullFilePath_SetsClass()
Assert.Equal("global::Microsoft.AspNetCore.Mvc.Razor.RazorPage", baseNode.BaseType.Content);
Assert.NotNull(baseNode.ModelType);
Assert.Equal("TModel", baseNode.ModelType.Content);
Assert.Equal(["public"], classNode.Modifiers);
Assert.Equal<string>(["public"], classNode.Modifiers);
AssertEx.Equal("AspNetCore_ec563e63d931b806184cb02f79875e4f3b21d1ca043ad06699424459128b58c0", classNode.ClassName);
}

Expand Down Expand Up @@ -185,6 +185,6 @@ public void MvcViewDocumentClassifierPass_SetsUpExecuteAsyncMethod()

Assert.Equal("ExecuteAsync", methodNode.MethodName);
Assert.Equal("global::System.Threading.Tasks.Task", methodNode.ReturnType);
Assert.Equal(["public", "async", "override"], methodNode.Modifiers);
Assert.Equal<string>(["public", "async", "override"], methodNode.Modifiers);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -198,8 +198,8 @@ public void RazorPageDocumentClassifierPass_SetsClass()
var documentNode = processor.GetDocumentNode();
var classNode = documentNode.GetClassNode();

Assert.Equal("global::Microsoft.AspNetCore.Mvc.RazorPages.Page", classNode.BaseType.BaseType.Content);
Assert.Equal(["public"], classNode.Modifiers);
Assert.Equal("global::Microsoft.AspNetCore.Mvc.RazorPages.Page", classNode.BaseType?.BaseType.Content);
Assert.Equal<string>(["public"], classNode.Modifiers);
Assert.Equal("Test", classNode.ClassName);
}

Expand All @@ -218,8 +218,8 @@ public void RazorPageDocumentClassifierPass_NullFilePath_SetsClass()
var documentNode = processor.GetDocumentNode();
var classNode = documentNode.GetClassNode();

Assert.Equal("global::Microsoft.AspNetCore.Mvc.RazorPages.Page", classNode.BaseType.BaseType.Content);
Assert.Equal(["public"], classNode.Modifiers);
Assert.Equal("global::Microsoft.AspNetCore.Mvc.RazorPages.Page", classNode.BaseType?.BaseType.Content);
Assert.Equal<string>(["public"], classNode.Modifiers);
AssertEx.Equal("AspNetCore_c3b458108610c1a2aa6eede0a5685ede853e036732db515609b2a23ca15359e1", classNode.ClassName);
}

Expand Down Expand Up @@ -295,7 +295,7 @@ public void RazorPageDocumentClassifierPass_SetsUpExecuteAsyncMethod()

Assert.Equal("ExecuteAsync", methodNode.MethodName);
Assert.Equal("global::System.Threading.Tasks.Task", methodNode.ReturnType);
Assert.Equal(["public", "async", "override"], methodNode.Modifiers);
Assert.Equal<string>(["public", "async", "override"], methodNode.Modifiers);
}

[Fact]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ public void ConsolidatedMvcViewDocumentClassifierPass_SetsClass()
Assert.Equal("global::Microsoft.AspNetCore.Mvc.Razor.RazorPage", baseNode.BaseType.Content);
Assert.NotNull(baseNode.ModelType);
Assert.Equal("TModel", baseNode.ModelType.Content);
Assert.Equal(["internal", "sealed"], classNode.Modifiers);
Assert.Equal<string>(["internal", "sealed"], classNode.Modifiers);
Assert.Equal("Test", classNode.ClassName);
}

Expand All @@ -76,7 +76,7 @@ public void MvcViewDocumentClassifierPass_NullFilePath_SetsClass()
Assert.Equal("global::Microsoft.AspNetCore.Mvc.Razor.RazorPage", baseNode.BaseType.Content);
Assert.NotNull(baseNode.ModelType);
Assert.Equal("TModel", baseNode.ModelType.Content);
Assert.Equal(["internal", "sealed"], classNode.Modifiers);
Assert.Equal<string>(["internal", "sealed"], classNode.Modifiers);
AssertEx.Equal("AspNetCore_ec563e63d931b806184cb02f79875e4f3b21d1ca043ad06699424459128b58c0", classNode.ClassName);
}

Expand All @@ -98,7 +98,7 @@ public void ConsolidatedMvcViewDocumentClassifierPass_UsesRelativePathToGenerate
var classNode = documentNode.GetClassNode();

Assert.Equal(expected, classNode.ClassName);
Assert.Equal(["internal", "sealed"], classNode.Modifiers);
Assert.Equal<string>(["internal", "sealed"], classNode.Modifiers);
}

[Fact]
Expand All @@ -117,6 +117,6 @@ public void ConsolidatedMvcViewDocumentClassifierPass_SetsUpExecuteAsyncMethod()

Assert.Equal("ExecuteAsync", methodNode.MethodName);
Assert.Equal("global::System.Threading.Tasks.Task", methodNode.ReturnType);
Assert.Equal(["public", "async", "override"], methodNode.Modifiers);
Assert.Equal<string>(["public", "async", "override"], methodNode.Modifiers);
}
}
Loading