Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/xamarin/NRefactory.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Grunwald <daniel@danielgrunwald.de>2011-08-27 16:48:51 +0400
committerDaniel Grunwald <daniel@danielgrunwald.de>2011-08-27 16:48:51 +0400
commita5865bdd8e678de40e8b8a51424676da0b9f781f (patch)
tree5fc9999dd4f02c2e34fabe54b438d5d70d589b7c /ICSharpCode.NRefactory.Demo
parent33abc64eecd56a1335daf91306487b5ba92b6e0b (diff)
Implemented "Find References".
Diffstat (limited to 'ICSharpCode.NRefactory.Demo')
-rw-r--r--ICSharpCode.NRefactory.Demo/CSDemo.Designer.cs21
-rw-r--r--ICSharpCode.NRefactory.Demo/CSDemo.cs52
2 files changed, 69 insertions, 4 deletions
diff --git a/ICSharpCode.NRefactory.Demo/CSDemo.Designer.cs b/ICSharpCode.NRefactory.Demo/CSDemo.Designer.cs
index c4315cc4..079e531e 100644
--- a/ICSharpCode.NRefactory.Demo/CSDemo.Designer.cs
+++ b/ICSharpCode.NRefactory.Demo/CSDemo.Designer.cs
@@ -48,6 +48,7 @@ namespace ICSharpCode.NRefactory.Demo
{
this.splitContainer1 = new System.Windows.Forms.SplitContainer();
this.csharpCodeTextBox = new System.Windows.Forms.TextBox();
+ this.findReferencesButton = new System.Windows.Forms.Button();
this.resolveButton = new System.Windows.Forms.Button();
this.csharpTreeView = new System.Windows.Forms.TreeView();
this.csharpGenerateCodeButton = new System.Windows.Forms.Button();
@@ -71,6 +72,7 @@ namespace ICSharpCode.NRefactory.Demo
//
// splitContainer1.Panel2
//
+ this.splitContainer1.Panel2.Controls.Add(this.findReferencesButton);
this.splitContainer1.Panel2.Controls.Add(this.resolveButton);
this.splitContainer1.Panel2.Controls.Add(this.csharpTreeView);
this.splitContainer1.Panel2.Controls.Add(this.csharpGenerateCodeButton);
@@ -97,10 +99,22 @@ namespace ICSharpCode.NRefactory.Demo
this.csharpCodeTextBox.WordWrap = false;
this.csharpCodeTextBox.TextChanged += new System.EventHandler(this.CsharpCodeTextBoxTextChanged);
//
+ // findReferencesButton
+ //
+ this.findReferencesButton.Anchor = System.Windows.Forms.AnchorStyles.Top;
+ this.findReferencesButton.Enabled = false;
+ this.findReferencesButton.Location = new System.Drawing.Point(344, 4);
+ this.findReferencesButton.Name = "findReferencesButton";
+ this.findReferencesButton.Size = new System.Drawing.Size(100, 23);
+ this.findReferencesButton.TabIndex = 4;
+ this.findReferencesButton.Text = "Find References";
+ this.findReferencesButton.UseVisualStyleBackColor = true;
+ this.findReferencesButton.Click += new System.EventHandler(this.FindReferencesButtonClick);
+ //
// resolveButton
//
this.resolveButton.Anchor = System.Windows.Forms.AnchorStyles.Top;
- this.resolveButton.Location = new System.Drawing.Point(187, 3);
+ this.resolveButton.Location = new System.Drawing.Point(132, 4);
this.resolveButton.Name = "resolveButton";
this.resolveButton.Size = new System.Drawing.Size(100, 23);
this.resolveButton.TabIndex = 3;
@@ -123,7 +137,7 @@ namespace ICSharpCode.NRefactory.Demo
// csharpGenerateCodeButton
//
this.csharpGenerateCodeButton.Anchor = System.Windows.Forms.AnchorStyles.Top;
- this.csharpGenerateCodeButton.Location = new System.Drawing.Point(293, 2);
+ this.csharpGenerateCodeButton.Location = new System.Drawing.Point(238, 4);
this.csharpGenerateCodeButton.Name = "csharpGenerateCodeButton";
this.csharpGenerateCodeButton.Size = new System.Drawing.Size(100, 23);
this.csharpGenerateCodeButton.TabIndex = 1;
@@ -134,7 +148,7 @@ namespace ICSharpCode.NRefactory.Demo
// csharpParseButton
//
this.csharpParseButton.Anchor = System.Windows.Forms.AnchorStyles.Top;
- this.csharpParseButton.Location = new System.Drawing.Point(81, 3);
+ this.csharpParseButton.Location = new System.Drawing.Point(26, 4);
this.csharpParseButton.Name = "csharpParseButton";
this.csharpParseButton.Size = new System.Drawing.Size(100, 23);
this.csharpParseButton.TabIndex = 0;
@@ -156,6 +170,7 @@ namespace ICSharpCode.NRefactory.Demo
this.splitContainer1.ResumeLayout(false);
this.ResumeLayout(false);
}
+ private System.Windows.Forms.Button findReferencesButton;
private System.Windows.Forms.Button csharpParseButton;
private System.Windows.Forms.Button csharpGenerateCodeButton;
private System.Windows.Forms.TreeView csharpTreeView;
diff --git a/ICSharpCode.NRefactory.Demo/CSDemo.cs b/ICSharpCode.NRefactory.Demo/CSDemo.cs
index 317da797..1ccb5de5 100644
--- a/ICSharpCode.NRefactory.Demo/CSDemo.cs
+++ b/ICSharpCode.NRefactory.Demo/CSDemo.cs
@@ -22,12 +22,12 @@ using System.ComponentModel;
using System.Diagnostics;
using System.Drawing;
using System.IO;
+using System.Linq;
using System.Reflection;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;
-
using ICSharpCode.NRefactory.CSharp;
using ICSharpCode.NRefactory.CSharp.Resolver;
using ICSharpCode.NRefactory.TypeSystem;
@@ -71,6 +71,7 @@ namespace ICSharpCode.NRefactory.Demo
}
SelectCurrentNode(csharpTreeView.Nodes);
resolveButton.Enabled = true;
+ findReferencesButton.Enabled = true;
}
TreeNode MakeTreeNode(AstNode node)
@@ -245,6 +246,55 @@ namespace ICSharpCode.NRefactory.Demo
void CsharpCodeTextBoxTextChanged(object sender, EventArgs e)
{
resolveButton.Enabled = false;
+ findReferencesButton.Enabled = false;
+ }
+
+ void FindReferencesButtonClick(object sender, EventArgs e)
+ {
+ if (csharpTreeView.SelectedNode == null)
+ return;
+
+ SimpleProjectContent project = new SimpleProjectContent();
+ var parsedFile = new TypeSystemConvertVisitor(project, "dummy.cs").Convert(compilationUnit);
+ project.UpdateProjectContent(null, parsedFile);
+
+ List<ITypeResolveContext> projects = new List<ITypeResolveContext>();
+ projects.Add(project);
+ projects.AddRange(builtInLibs.Value);
+
+ using (var context = new CompositeTypeResolveContext(projects).Synchronize()) {
+ CSharpResolver resolver = new CSharpResolver(context);
+
+ AstNode node = (AstNode)csharpTreeView.SelectedNode.Tag;
+ IResolveVisitorNavigator navigator = new NodeListResolveVisitorNavigator(new[] { node });
+ ResolveVisitor visitor = new ResolveVisitor(resolver, parsedFile, navigator);
+ visitor.Scan(compilationUnit);
+ IEntity entity;
+ MemberResolveResult mrr = visitor.GetResolveResult(node) as MemberResolveResult;
+ TypeResolveResult trr = visitor.GetResolveResult(node) as TypeResolveResult;
+ if (mrr != null) {
+ entity = mrr.Member;
+ } else if (trr != null) {
+ entity = trr.Type.GetDefinition();
+ } else {
+ return;
+ }
+
+ FindReferences fr = new FindReferences();
+ int referenceCount = 0;
+ fr.ReferenceFound += delegate { referenceCount++; };
+
+ var searchScopes = fr.GetSearchScopes(entity);
+ navigator = new CompositeResolveVisitorNavigator(searchScopes.ToArray());
+ visitor = new ResolveVisitor(resolver, parsedFile, navigator);
+ visitor.Scan(compilationUnit);
+
+ csharpTreeView.BeginUpdate();
+ ShowResolveResultsInTree(csharpTreeView.Nodes, visitor);
+ csharpTreeView.EndUpdate();
+
+ MessageBox.Show("Found " + referenceCount + " references to " + entity.FullName);
+ }
}
}
}