提交 dd277876 编写于 作者: S shyamn

Add more semantic visualization support (changeset 1216224)

上级 bc3a4be3
......@@ -76,8 +76,13 @@
<Image Height="16" Width="16" Source="/Roslyn.SyntaxVisualizer.Control;component/SyntaxGraph.ico" />
</MenuItem.Icon>
</MenuItem>
<Separator Name="menuItemSeparator1" />
<MenuItem Name="symbolDetailsMenuItem" Header="View Symbol (if any)" Click="SymbolDetailsMenuItem_Click"/>
<MenuItem Name="typeSymbolDetailsMenuItem" Header="View TypeSymbol (if any)" Click="TypeSymbolDetailsMenuItem_Click"/>
<MenuItem Name="convertedTypeSymbolDetailsMenuItem" Header="View Converted TypeSymbol (if any)" Click="ConvertedTypeSymbolDetailsMenuItem_Click"/>
<MenuItem Name="aliasSymbolDetailsMenuItem" Header="View AliasSymbol (if any)" Click="AliasSymbolDetailsMenuItem_Click"/>
<Separator Name="menuItemSeparator2" />
<MenuItem Name="constantValueDetailsMenuItem" Header="View Constant Value (if any)" Click="ConstantValueDetailsMenuItem_Click"/>
</ContextMenu>
</TreeView.ContextMenu>
</TreeView>
......
......@@ -630,7 +630,7 @@ private void DisplaySymbolInPropertyGrid(ISymbol symbol)
propertyGrid.SelectedObject = symbol;
}
private static TreeViewItem FindTreeViewItem(DependencyObject source)
{
while (source != null && !(source is TreeViewItem))
......@@ -681,6 +681,11 @@ private void TreeView_ContextMenuOpening(object sender, ContextMenuEventArgs e)
directedSyntaxGraphMenuItem.Visibility = directedSyntaxGraphEnabled ? Visibility.Visible : Visibility.Collapsed;
symbolDetailsMenuItem.Visibility = symbolDetailsEnabled ? Visibility.Visible : Visibility.Collapsed;
typeSymbolDetailsMenuItem.Visibility = symbolDetailsMenuItem.Visibility;
convertedTypeSymbolDetailsMenuItem.Visibility = symbolDetailsMenuItem.Visibility;
aliasSymbolDetailsMenuItem.Visibility = symbolDetailsMenuItem.Visibility;
constantValueDetailsMenuItem.Visibility = symbolDetailsMenuItem.Visibility;
menuItemSeparator1.Visibility = symbolDetailsMenuItem.Visibility;
menuItemSeparator2.Visibility = symbolDetailsMenuItem.Visibility;
}
}
......@@ -716,10 +721,15 @@ private void SymbolDetailsMenuItem_Click(object sender, RoutedEventArgs e)
symbol = SemanticModel.GetDeclaredSymbol(currentTag.SyntaxNode);
}
if (symbol == null)
{
symbol = SemanticModel.GetPreprocessingSymbolInfo(currentTag.SyntaxNode).Symbol;
}
DisplaySymbolInPropertyGrid(symbol);
}
}
private void TypeSymbolDetailsMenuItem_Click(object sender, RoutedEventArgs e)
{
var currentTag = (SyntaxTag)currentSelection.Tag;
......@@ -730,6 +740,50 @@ private void TypeSymbolDetailsMenuItem_Click(object sender, RoutedEventArgs e)
}
}
private void ConvertedTypeSymbolDetailsMenuItem_Click(object sender, RoutedEventArgs e)
{
var currentTag = (SyntaxTag)currentSelection.Tag;
if ((SemanticModel != null) && (currentTag.Category == SyntaxCategory.SyntaxNode))
{
var symbol = SemanticModel.GetTypeInfo(currentTag.SyntaxNode).ConvertedType;
DisplaySymbolInPropertyGrid(symbol);
}
}
private void AliasSymbolDetailsMenuItem_Click(object sender, RoutedEventArgs e)
{
var currentTag = (SyntaxTag)currentSelection.Tag;
if ((SemanticModel != null) && (currentTag.Category == SyntaxCategory.SyntaxNode))
{
var symbol = SemanticModel.GetAliasInfo(currentTag.SyntaxNode);
DisplaySymbolInPropertyGrid(symbol);
}
}
private void ConstantValueDetailsMenuItem_Click(object sender, RoutedEventArgs e)
{
var currentTag = (SyntaxTag)currentSelection.Tag;
if ((SemanticModel != null) && (currentTag.Category == SyntaxCategory.SyntaxNode))
{
var value = SemanticModel.GetConstantValue(currentTag.SyntaxNode);
kindTextLabel.Visibility = Visibility.Hidden;
kindValueLabel.Content = string.Empty;
if (!value.HasValue)
{
typeTextLabel.Visibility = Visibility.Hidden;
typeValueLabel.Content = string.Empty;
propertyGrid.SelectedObject = null;
}
else
{
typeTextLabel.Visibility = Visibility.Visible;
typeValueLabel.Content = value.Value.GetType().Name;
propertyGrid.SelectedObject = value;
}
}
}
private void LegendButton_Click(object sender, RoutedEventArgs e)
{
legendPopup.IsOpen = true;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册