Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
lwm1986
roslyn
提交
75120d43
R
roslyn
项目概览
lwm1986
/
roslyn
与 Fork 源项目一致
从无法访问的项目Fork
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
R
roslyn
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
75120d43
编写于
3月 24, 2014
作者:
S
shyamn
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Add ability to view symbol details in syntax visulizer (changeset 1213574)
上级
f47551cd
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
77 addition
and
14 deletion
+77
-14
Src/Tools/Source/SyntaxVisualizer/SyntaxVisualizerControl/SyntaxVisualizerControl.xaml
...izer/SyntaxVisualizerControl/SyntaxVisualizerControl.xaml
+11
-10
Src/Tools/Source/SyntaxVisualizer/SyntaxVisualizerControl/SyntaxVisualizerControl.xaml.cs
...r/SyntaxVisualizerControl/SyntaxVisualizerControl.xaml.cs
+66
-4
未找到文件。
Src/Tools/Source/SyntaxVisualizer/SyntaxVisualizerControl/SyntaxVisualizerControl.xaml
浏览文件 @
75120d43
...
...
@@ -60,15 +60,6 @@
</Grid>
</Border>
<TreeView Grid.Row="1" Name="treeView" SelectedItemChanged="TreeView_SelectedItemChanged" PreviewMouseRightButtonDown="TreeView_PreviewMouseRightButtonDown" ContextMenuOpening="TreeView_ContextMenuOpening" Padding="5">
<TreeView.Resources>
<ContextMenu x:Key="treeViewItemContextMenu">
<MenuItem Name="directedSyntaxGraphMenuItem" Header="Directed Syntax Graph" Click="DirectedSyntaxGraphMenuItem_Click">
<MenuItem.Icon>
<Image Height="16" Width="16" Source="/Roslyn.SyntaxVisualizer.Control;component/SyntaxGraph.ico" />
</MenuItem.Icon>
</MenuItem>
</ContextMenu>
</TreeView.Resources>
<TreeView.ItemContainerStyle>
<Style TargetType="{x:Type TreeViewItem}">
<Style.Resources>
...
...
@@ -76,9 +67,19 @@
x:Key="{x:Static SystemColors.ControlBrushKey}"
Color="{x:Static SystemColors.HighlightColor}"/>
</Style.Resources>
<Setter Property="ContextMenu" Value="{StaticResource ResourceKey=treeViewItemContextMenu}"/>
</Style>
</TreeView.ItemContainerStyle>
<TreeView.ContextMenu>
<ContextMenu Name="treeViewItemContextMenu">
<MenuItem Name="directedSyntaxGraphMenuItem" Header="View Directed Syntax Graph" Click="DirectedSyntaxGraphMenuItem_Click">
<MenuItem.Icon>
<Image Height="16" Width="16" Source="/Roslyn.SyntaxVisualizer.Control;component/SyntaxGraph.ico" />
</MenuItem.Icon>
</MenuItem>
<MenuItem Name="symbolDetailsMenuItem" Header="View Symbol (if any)" Click="SymbolDetailsMenuItem_Click"/>
<MenuItem Name="typeSymbolDetailsMenuItem" Header="View TypeSymbol (if any)" Click="TypeSymbolDetailsMenuItem_Click"/>
</ContextMenu>
</TreeView.ContextMenu>
</TreeView>
<GridSplitter Grid.Row="2" ResizeDirection="Rows" HorizontalAlignment="Stretch" Height="5"/>
<Grid Grid.Row="3">
...
...
Src/Tools/Source/SyntaxVisualizer/SyntaxVisualizerControl/SyntaxVisualizerControl.xaml.cs
浏览文件 @
75120d43
...
...
@@ -42,8 +42,8 @@ private class SyntaxTag
#
endregion
#
region
Public
Properties
,
Events
public
bool
DirectedSyntaxGraphContextMenuEnabled
{
get
;
set
;
}
public
SyntaxTree
SyntaxTree
{
get
;
private
set
;
}
public
SemanticModel
SemanticModel
{
get
;
private
set
;
}
public
bool
IsLazy
{
get
;
private
set
;
}
public
delegate
void
SyntaxNodeDelegate
(
SyntaxNode
node
);
...
...
@@ -88,12 +88,13 @@ public void Clear()
// the children for any given item are only populated when the item is selected. If lazy is
// false then the entire tree is populated at once (and this can result in bad performance when
// displaying large trees).
public
void
DisplaySyntaxTree
(
SyntaxTree
tree
,
bool
lazy
=
true
)
public
void
DisplaySyntaxTree
(
SyntaxTree
tree
,
SemanticModel
model
=
null
,
bool
lazy
=
true
)
{
if
(
tree
!=
null
)
{
IsLazy
=
lazy
;
SyntaxTree
=
tree
;
SemanticModel
=
model
;
AddNode
(
null
,
SyntaxTree
.
GetRoot
());
legendButton
.
Visibility
=
Visibility
.
Visible
;
}
...
...
@@ -103,12 +104,13 @@ public void DisplaySyntaxTree(SyntaxTree tree, bool lazy = true)
// the children for any given item are only populated when the item is selected. If lazy is
// false then the entire tree is populated at once (and this can result in bad performance when
// displaying large trees).
public
void
DisplaySyntaxNode
(
SyntaxNode
node
,
bool
lazy
=
true
)
public
void
DisplaySyntaxNode
(
SyntaxNode
node
,
SemanticModel
model
=
null
,
bool
lazy
=
true
)
{
if
(
node
!=
null
)
{
IsLazy
=
lazy
;
SyntaxTree
=
node
.
SyntaxTree
;
SemanticModel
=
model
;
AddNode
(
null
,
node
);
legendButton
.
Visibility
=
Visibility
.
Visible
;
}
...
...
@@ -609,6 +611,26 @@ private void AddTrivia(TreeViewItem parentItem, SyntaxTrivia trivia, bool isLead
#
endregion
#
region
Private
Helpers
-
Other
private
void
DisplaySymbolInPropertyGrid
(
ISymbol
symbol
)
{
if
(
symbol
==
null
)
{
typeTextLabel
.
Visibility
=
Visibility
.
Hidden
;
kindTextLabel
.
Visibility
=
Visibility
.
Hidden
;
typeValueLabel
.
Content
=
string
.
Empty
;
kindValueLabel
.
Content
=
string
.
Empty
;
}
else
{
typeTextLabel
.
Visibility
=
Visibility
.
Visible
;
kindTextLabel
.
Visibility
=
Visibility
.
Visible
;
typeValueLabel
.
Content
=
symbol
.
GetType
().
Name
;
kindValueLabel
.
Content
=
symbol
.
Kind
.
ToString
();
}
propertyGrid
.
SelectedObject
=
symbol
;
}
private
static
TreeViewItem
FindTreeViewItem
(
DependencyObject
source
)
{
while
(
source
!=
null
&&
!(
source
is
TreeViewItem
))
...
...
@@ -641,10 +663,25 @@ private void TreeView_PreviewMouseRightButtonDown(object sender, MouseButtonEven
private
void
TreeView_ContextMenuOpening
(
object
sender
,
ContextMenuEventArgs
e
)
{
if
(!
DirectedSyntaxGraphContextMenuEnabled
)
var
directedSyntaxGraphEnabled
=
((
SyntaxNodeDirectedGraphRequested
!=
null
)
&&
(
SyntaxTokenDirectedGraphRequested
!=
null
)
&&
(
SyntaxTriviaDirectedGraphRequested
!=
null
));
var
symbolDetailsEnabled
=
((
SemanticModel
!=
null
)
&&
(((
SyntaxTag
)
currentSelection
.
Tag
).
Category
==
SyntaxCategory
.
SyntaxNode
));
if
((!
directedSyntaxGraphEnabled
)
&&
(!
symbolDetailsEnabled
))
{
e
.
Handled
=
true
;
}
else
{
directedSyntaxGraphMenuItem
.
Visibility
=
directedSyntaxGraphEnabled
?
Visibility
.
Visible
:
Visibility
.
Collapsed
;
symbolDetailsMenuItem
.
Visibility
=
symbolDetailsEnabled
?
Visibility
.
Visible
:
Visibility
.
Collapsed
;
typeSymbolDetailsMenuItem
.
Visibility
=
symbolDetailsMenuItem
.
Visibility
;
}
}
private
void
DirectedSyntaxGraphMenuItem_Click
(
object
sender
,
RoutedEventArgs
e
)
...
...
@@ -668,6 +705,31 @@ private void DirectedSyntaxGraphMenuItem_Click(object sender, RoutedEventArgs e)
}
}
private
void
SymbolDetailsMenuItem_Click
(
object
sender
,
RoutedEventArgs
e
)
{
var
currentTag
=
(
SyntaxTag
)
currentSelection
.
Tag
;
if
((
SemanticModel
!=
null
)
&&
(
currentTag
.
Category
==
SyntaxCategory
.
SyntaxNode
))
{
var
symbol
=
SemanticModel
.
GetSymbolInfo
(
currentTag
.
SyntaxNode
).
Symbol
;
if
(
symbol
==
null
)
{
symbol
=
SemanticModel
.
GetDeclaredSymbol
(
currentTag
.
SyntaxNode
);
}
DisplaySymbolInPropertyGrid
(
symbol
);
}
}
private
void
TypeSymbolDetailsMenuItem_Click
(
object
sender
,
RoutedEventArgs
e
)
{
var
currentTag
=
(
SyntaxTag
)
currentSelection
.
Tag
;
if
((
SemanticModel
!=
null
)
&&
(
currentTag
.
Category
==
SyntaxCategory
.
SyntaxNode
))
{
var
symbol
=
SemanticModel
.
GetTypeInfo
(
currentTag
.
SyntaxNode
).
Type
;
DisplaySymbolInPropertyGrid
(
symbol
);
}
}
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.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录