Skip to content

Commit 9c86220

Browse files
committed
Further refactoring of label name code.
The ParseTreeView will now also display nodes by label names when the option is turned on.
1 parent e54725d commit 9c86220

6 files changed

Lines changed: 29 additions & 9 deletions

File tree

Code Grapher/ParseTreeGrapher.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@ private void FormatNodes(Graph graph, ITree tree, IList<string> parserRules)
103103
var context = tree as ParserRuleContext;
104104

105105
if (UseLabelNames && context != null)
106-
node.LabelText = context.GetParserRuleName() ?? Trees.GetNodeText(tree, parserRules);
106+
node.LabelText = context.GetLabeledRuleName() ?? Trees.GetNodeText(tree, parserRules);
107107
else
108108
node.LabelText = Trees.GetNodeText(tree, parserRules);
109109

Common/Extensions/ITreeExtensions.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -49,11 +49,11 @@ public static class ITreeExtensions
4949
{
5050

5151
/// <summary>
52-
/// Gets the parser rule name for the specified <see cref="ITree"/> instance.
52+
/// Gets the labeled parser rule name for the specified <see cref="ITree"/> instance.
5353
/// </summary>
5454
/// <param name="tree">The tree instance.</param>
55-
/// <returns>The resulting name or null if the rule name could not be resolved.</returns>
56-
public static string GetParserRuleName(this ITree tree)
55+
/// <returns>The resulting labeled name or null if the name could not be resolved.</returns>
56+
public static string GetLabeledRuleName(this ITree tree)
5757
{
5858
if (tree is ParserRuleContext context)
5959
{

Common/Extensions/ParserRuleContextExtensions.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -75,11 +75,11 @@ public static bool ContainsSourceSelection([NotNull] this ParserRuleContext cont
7575
}
7676

7777
/// <summary>
78-
/// Gets the rule name for the specified <see cref="ParserRuleContext"/> instance.
78+
/// Gets the labeled rule name for the specified <see cref="ParserRuleContext"/> instance.
7979
/// </summary>
8080
/// <param name="context">The <see cref="ParserRuleContext"/> instance to use.</param>
81-
/// <returns>The resulting name or null if the rule name could not be resolved.</returns>
82-
public static string GetParserRuleName(this ParserRuleContext context)
81+
/// <returns>The resulting labeled name or null if the name could not be resolved.</returns>
82+
public static string GetLabeledRuleName(this ParserRuleContext context)
8383
{
8484
var className = context.GetType().Name;
8585
var labelEnd = className.LastIndexOf("Context", StringComparison.Ordinal);

GunWin/VisualAnalyzer.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -991,6 +991,7 @@ private void TracingToolStripMenuItem_Click(object sender, EventArgs e)
991991

992992
private void VisualAnalyzer_Load(object sender, EventArgs e)
993993
{
994+
ParseTreeView.UseLabelNames = UseLabelNamesMnuItem.CheckState == CheckState.Checked;
994995
InitializeGraphCanvas();
995996
ConfigureGraphWorker();
996997
ConfigureParserMessageWindow();
@@ -1193,6 +1194,7 @@ private void WordWrapMnuItem_CheckStateChanged(object sender, EventArgs e)
11931194
private void UseLabelNamesMnuItem_CheckStateChanged(object sender, EventArgs e)
11941195
{
11951196
_Grapher.UseLabelNames = UseLabelNamesMnuItem.CheckState == CheckState.Checked;
1197+
ParseTreeView.UseLabelNames = UseLabelNamesMnuItem.CheckState == CheckState.Checked;
11961198
if (ParseTreeView.SelectedNode != null && ParseTreeView.SelectedNode.Tag is ITree selected)
11971199
RenderParseTreeGraph(selected, GraphZoomTrackBar.Value);
11981200
}

ParserTreeView/ParserTreeView.cs

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,27 @@
22
using System.Collections.Generic;
33
using System.Windows.Forms;
44
using Antlr4.Runtime.Tree;
5+
using Org.Edgerunner.ANTLR4.Tools.Common.Extensions;
56
using Org.Edgerunner.ANTLR4.Tools.Testing.Grammar;
67

78
namespace Org.Edgerunner.ANTLR4.Tools.Testing
89
{
910
public partial class ParserTreeView : TreeView
1011
{
12+
/// <summary>
13+
/// Gets the grammar being used.
14+
/// </summary>
15+
/// <value>The grammar.</value>
1116
public GrammarReference Grammar { get; private set; }
17+
18+
/// <summary>
19+
/// Gets or sets a value indicating whether [use label names].
20+
/// </summary>
21+
/// <value><c>true</c> if [use label names]; otherwise, <c>false</c>.</value>
22+
public bool UseLabelNames { get; set; }
23+
1224
public ITree ParseTree { get; private set; }
25+
1326
private Dictionary<string, TreeNode> ActiveNodes { get; } = new Dictionary<string, TreeNode>();
1427

1528
/// <summary>
@@ -230,7 +243,7 @@ private TreeNode AddChildNodeAndLeaves(TreeNode root, ITree tree)
230243
var nodeName = tree.GetHashCode().ToString();
231244
if (!ActiveNodes.TryGetValue(nodeName, out var treeNode))
232245
{
233-
treeNode = new TreeNode(Trees.GetNodeText(tree, Grammar.ParserRules))
246+
treeNode = new TreeNode(tree.GetLabeledRuleName() ?? Trees.GetNodeText(tree, Grammar.ParserRules))
234247
{
235248
Tag = tree,
236249
Name = nodeName
@@ -250,7 +263,8 @@ private TreeNode AddChildNodeAndLeaves(TreeNode root, ITree tree)
250263
nodeName = child.GetHashCode().ToString();
251264
if (ActiveNodes.ContainsKey(nodeName))
252265
continue;
253-
var newChild = new TreeNode(Trees.GetNodeText(child, Grammar.ParserRules))
266+
267+
var newChild = new TreeNode(child.GetLabeledRuleName() ?? Trees.GetNodeText(child, Grammar.ParserRules))
254268
{
255269
Tag = child,
256270
Name = nodeName

ParserTreeView/ParserTreeView.csproj

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,10 @@
5858
<None Include="packages.config" />
5959
</ItemGroup>
6060
<ItemGroup>
61+
<ProjectReference Include="..\Common\Common.csproj">
62+
<Project>{8bd992fd-a3b3-4af9-9371-5aa14ddfda68}</Project>
63+
<Name>Common</Name>
64+
</ProjectReference>
6165
<ProjectReference Include="..\Utilities\Utilities.csproj">
6266
<Project>{4e020f1d-27bf-4853-8573-474d7edb4e72}</Project>
6367
<Name>Utilities</Name>

0 commit comments

Comments
 (0)