Browse Source

Updated Gtk demo.

newNRvisualizers
Mike Krüger 14 years ago
parent
commit
4bf1ddbce8
  1. 51
      ICSharpCode.NRefactory.GtkDemo/MainWindow.cs

51
ICSharpCode.NRefactory.GtkDemo/MainWindow.cs

@ -37,6 +37,8 @@ using ICSharpCode.NRefactory.TypeSystem;
using System.Threading.Tasks; using System.Threading.Tasks;
using ICSharpCode.NRefactory.TypeSystem.Implementation; using ICSharpCode.NRefactory.TypeSystem.Implementation;
using Gdk; using Gdk;
using System.Threading;
using System.Diagnostics;
namespace ICSharpCode.NRefactory.GtkDemo namespace ICSharpCode.NRefactory.GtkDemo
{ {
@ -123,7 +125,7 @@ namespace ICSharpCode.NRefactory.GtkDemo
this.editor.Caret.PositionChanged += HandlePositionChanged; this.editor.Caret.PositionChanged += HandlePositionChanged;
} }
public void ShowUnit (CompilationUnit unit, ResolveVisitor visitor) public void ShowUnit (CompilationUnit unit, CSharpAstResolver visitor)
{ {
this.unit = unit; this.unit = unit;
store.Clear (); store.Clear ();
@ -159,7 +161,7 @@ namespace ICSharpCode.NRefactory.GtkDemo
return null; return null;
} }
public void AddChildren (AstNode node, ResolveVisitor visitor, TreeIter iter) public void AddChildren (AstNode node, CSharpAstResolver visitor, TreeIter iter)
{ {
if (node == null) if (node == null)
return; return;
@ -168,7 +170,7 @@ namespace ICSharpCode.NRefactory.GtkDemo
ResolveResult result = null; ResolveResult result = null;
try { try {
if (child is Expression) if (child is Expression)
result = visitor.GetResolveResult (child); result = visitor.Resolve (child, CancellationToken.None);
} catch (Exception){ } catch (Exception){
result = null; result = null;
} }
@ -215,48 +217,41 @@ namespace ICSharpCode.NRefactory.GtkDemo
void HandleClicked (object sender, EventArgs e) void HandleClicked (object sender, EventArgs e)
{ {
var parser = new CSharpParser (); var parser = new CSharpParser ();
var unit = parser.Parse (editor.Text); var unit = parser.Parse (editor.Text, "dummy.cs");
var project = new SimpleProjectContent(); var parsedFile = unit.ToTypeSystem();
var parsedFile = new TypeSystemConvertVisitor(project, "dummy.cs").Convert (unit);
project.UpdateProjectContent(null, parsedFile);
var projects = new List<ITypeResolveContext>(); IProjectContent project = new CSharpProjectContent ();
projects.Add(project); project = project.UpdateProjectContent (null, parsedFile);
projects.AddRange(builtInLibs.Value); project = project.AddAssemblyReferences (builtInLibs.Value);
using (var context = new CompositeTypeResolveContext(projects).Synchronize()) {
var resolver = new CSharpResolver(context); CSharpAstResolver resolver = new CSharpAstResolver(project.CreateCompilation (), unit, parsedFile);
ShowUnit (unit, resolver);
IResolveVisitorNavigator navigator = null;
// if (csharpTreeView.SelectedNode != null) {
// navigator = new NodeListResolveVisitorNavigator(new[] { (AstNode)csharpTreeView.SelectedNode.Tag });
// }
var visitor = new ResolveVisitor (resolver, parsedFile, navigator);
visitor.Scan(unit);
ShowUnit (unit, visitor);
}
} }
Lazy<IList<IProjectContent>> builtInLibs = new Lazy<IList<IProjectContent>>( Lazy<IList<IUnresolvedAssembly>> builtInLibs = new Lazy<IList<IUnresolvedAssembly>>(
delegate { delegate {
Assembly[] assemblies = new Assembly[] { // Compiler error ? Assembly[] assemblies = new Assembly[] {
typeof(object).Assembly, // mscorlib typeof(object).Assembly, // mscorlib
typeof(Uri).Assembly, // System.dll typeof(Uri).Assembly, // System.dll
typeof(System.Linq.Enumerable).Assembly, typeof(System.Linq.Enumerable).Assembly, // System.Core.dll
typeof(ICSharpCode.NRefactory.TypeSystem.IProjectContent).Assembly // typeof(System.Xml.XmlDocument).Assembly, // System.Xml.dll
// typeof(System.Drawing.Bitmap).Assembly, // System.Drawing.dll
// typeof(Form).Assembly, // System.Windows.Forms.dll
typeof(ICSharpCode.NRefactory.TypeSystem.IProjectContent).Assembly,
}; };
IProjectContent[] projectContents = new IProjectContent[assemblies.Length]; IUnresolvedAssembly[] projectContents = new IUnresolvedAssembly[assemblies.Length];
Parallel.For( Parallel.For(
0, assemblies.Length, 0, assemblies.Length,
delegate (int i) { delegate (int i) {
Stopwatch w = Stopwatch.StartNew();
CecilLoader loader = new CecilLoader(); CecilLoader loader = new CecilLoader();
projectContents[i] = loader.LoadAssemblyFile(assemblies[i].Location); projectContents[i] = loader.LoadAssemblyFile(assemblies[i].Location);
}); });
return projectContents; return projectContents;
}); });
} }
} }

Loading…
Cancel
Save