Browse Source

WIP on IAssemblySearcher API

newNRILSpyDebugger
Siegfried Pammer 12 years ago
parent
commit
80e4c82e33
  1. 4
      src/AddIns/DisplayBindings/ILSpyAddIn/ILSpyDecompilerService.cs
  2. 7
      src/AddIns/DisplayBindings/ILSpyAddIn/ILSpyParser.cs
  3. 6
      src/Main/Base/Project/Dom/ClassBrowser/WorkspaceModel.cs
  4. 11
      src/Main/Base/Project/Dom/IAssemblyModel.cs
  5. 2
      src/Main/Base/Project/Dom/IModelFactory.cs
  6. 31
      src/Main/Base/Project/Parser/IAssemblyParserService.cs
  7. 4
      src/Main/SharpDevelop/Dom/AssemblyModel.cs
  8. 2
      src/Main/SharpDevelop/Dom/ModelFactory.cs
  9. 17
      src/Main/SharpDevelop/Parser/AssemblyParserService.cs

4
src/AddIns/DisplayBindings/ILSpyAddIn/ILSpyDecompilerService.cs

@ -3,6 +3,7 @@
using System; using System;
using System.IO; using System.IO;
using System.Text;
using System.Text.RegularExpressions; using System.Text.RegularExpressions;
using System.Threading; using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
@ -12,6 +13,7 @@ using ICSharpCode.Decompiler;
using ICSharpCode.Decompiler.Ast; using ICSharpCode.Decompiler.Ast;
using ICSharpCode.NRefactory.TypeSystem; using ICSharpCode.NRefactory.TypeSystem;
using ICSharpCode.SharpDevelop; using ICSharpCode.SharpDevelop;
using ICSharpCode.SharpDevelop.Dom.ClassBrowser;
using Mono.Cecil; using Mono.Cecil;
namespace ICSharpCode.ILSpyAddIn namespace ICSharpCode.ILSpyAddIn
@ -19,7 +21,7 @@ namespace ICSharpCode.ILSpyAddIn
/// <summary> /// <summary>
/// Description of DecompilerService. /// Description of DecompilerService.
/// </summary> /// </summary>
public class ILSpyDecompilerService public static class ILSpyDecompilerService
{ {
public static ILSpyUnresolvedFile DecompileType(DecompiledTypeReference name) public static ILSpyUnresolvedFile DecompileType(DecompiledTypeReference name)
{ {

7
src/AddIns/DisplayBindings/ILSpyAddIn/ILSpyParser.cs

@ -13,6 +13,8 @@ using ICSharpCode.NRefactory.CSharp.Resolver;
using ICSharpCode.NRefactory.Editor; using ICSharpCode.NRefactory.Editor;
using ICSharpCode.NRefactory.Semantics; using ICSharpCode.NRefactory.Semantics;
using ICSharpCode.NRefactory.TypeSystem; using ICSharpCode.NRefactory.TypeSystem;
using ICSharpCode.SharpDevelop;
using ICSharpCode.SharpDevelop.Dom.ClassBrowser;
using ICSharpCode.SharpDevelop.Editor.Search; using ICSharpCode.SharpDevelop.Editor.Search;
using ICSharpCode.SharpDevelop.Parser; using ICSharpCode.SharpDevelop.Parser;
using ICSharpCode.SharpDevelop.Project; using ICSharpCode.SharpDevelop.Project;
@ -65,6 +67,11 @@ namespace ICSharpCode.ILSpyAddIn
public ICompilation CreateCompilationForSingleFile(FileName fileName, IUnresolvedFile unresolvedFile) public ICompilation CreateCompilationForSingleFile(FileName fileName, IUnresolvedFile unresolvedFile)
{ {
DecompiledTypeReference reference = DecompiledTypeReference.FromFileName(fileName);
if (reference != null) {
// var model = SD.GetService<IClassBrowser>().FindAssemblyModel(reference.AssemblyFile);
// return SD.AssemblyParserService.CreateCompilationForAssembly(model);
}
return new CSharpProjectContent() return new CSharpProjectContent()
.AddAssemblyReferences(defaultReferences.Value) .AddAssemblyReferences(defaultReferences.Value)
.AddOrUpdateFiles(unresolvedFile) .AddOrUpdateFiles(unresolvedFile)

6
src/Main/Base/Project/Dom/ClassBrowser/WorkspaceModel.cs

@ -3,6 +3,7 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Runtime.CompilerServices;
using ICSharpCode.TreeView; using ICSharpCode.TreeView;
namespace ICSharpCode.SharpDevelop.Dom.ClassBrowser namespace ICSharpCode.SharpDevelop.Dom.ClassBrowser
@ -21,7 +22,7 @@ namespace ICSharpCode.SharpDevelop.Dom.ClassBrowser
public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged; public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged(string propertyName) protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = "")
{ {
if (PropertyChanged != null) { if (PropertyChanged != null) {
PropertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName)); PropertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
@ -35,10 +36,11 @@ namespace ICSharpCode.SharpDevelop.Dom.ClassBrowser
set { set {
if (assemblyList != value) { if (assemblyList != value) {
assemblyList = value; assemblyList = value;
OnPropertyChanged("AssemblyList"); OnPropertyChanged();
} }
} }
} }
public WorkspaceModel() public WorkspaceModel()
{ {
this.specialNodes = new SimpleModelCollection<SharpTreeNode>(); this.specialNodes = new SimpleModelCollection<SharpTreeNode>();

11
src/Main/Base/Project/Dom/IAssemblyModel.cs

@ -4,7 +4,9 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using ICSharpCode.NRefactory;
using ICSharpCode.NRefactory.TypeSystem; using ICSharpCode.NRefactory.TypeSystem;
using ICSharpCode.SharpDevelop.Parser;
namespace ICSharpCode.SharpDevelop.Dom namespace ICSharpCode.SharpDevelop.Dom
{ {
@ -47,6 +49,11 @@ namespace ICSharpCode.SharpDevelop.Dom
/// Gets the <see cref="IEntityModelContext"/> of this assembly model. /// Gets the <see cref="IEntityModelContext"/> of this assembly model.
/// </summary> /// </summary>
IEntityModelContext Context { get; } IEntityModelContext Context { get; }
/// <summary>
/// Returns the assembly references.
/// </summary>
IReadOnlyList<DomAssemblyName> References { get; }
} }
/// <summary> /// <summary>
@ -103,6 +110,10 @@ namespace ICSharpCode.SharpDevelop.Dom
return null; return null;
} }
} }
public IReadOnlyList<DomAssemblyName> References {
get { return EmptyList<DomAssemblyName>.Instance; }
}
} }
} }

2
src/Main/Base/Project/Dom/IModelFactory.cs

@ -15,6 +15,6 @@ namespace ICSharpCode.SharpDevelop.Dom
{ {
ITypeDefinitionModel CreateTypeDefinitionModel(IEntityModelContext context, params IUnresolvedTypeDefinition[] parts); ITypeDefinitionModel CreateTypeDefinitionModel(IEntityModelContext context, params IUnresolvedTypeDefinition[] parts);
IMemberModel CreateMemberModel(IEntityModelContext context, IUnresolvedMember member); IMemberModel CreateMemberModel(IEntityModelContext context, IUnresolvedMember member);
IAssemblyModel CreateAssemblyModel(IEntityModelContext context); IUpdateableAssemblyModel CreateAssemblyModel(IEntityModelContext context);
} }
} }

31
src/Main/Base/Project/Parser/IAssemblyParserService.cs

@ -7,6 +7,8 @@ using System.Threading.Tasks;
using ICSharpCode.Core; using ICSharpCode.Core;
using ICSharpCode.NRefactory.TypeSystem; using ICSharpCode.NRefactory.TypeSystem;
using ICSharpCode.SharpDevelop.Dom;
using ICSharpCode.SharpDevelop.Dom.ClassBrowser;
namespace ICSharpCode.SharpDevelop.Parser namespace ICSharpCode.SharpDevelop.Parser
{ {
@ -41,5 +43,34 @@ namespace ICSharpCode.SharpDevelop.Parser
/// May return <c>null</c> if on-disk caching is disabled. /// May return <c>null</c> if on-disk caching is disabled.
/// </summary> /// </summary>
string DomPersistencePath { get; } string DomPersistencePath { get; }
/// <summary>
/// Creates a compilation for the specified assembly.
/// </summary>
ICompilation CreateCompilationForAssembly(IAssemblyModel assembly);
}
public interface IAssemblySearcher
{
FileName FindAssembly(DomAssemblyName fullName);
}
public class DefaultAssemblySearcher : IAssemblySearcher
{
FileName mainAssemblyFileName;
DirectoryName baseDirectory;
public DefaultAssemblySearcher(FileName mainAssemblyFileName)
{
if (mainAssemblyFileName == null)
throw new ArgumentNullException("mainAssemblyFileName");
this.mainAssemblyFileName = mainAssemblyFileName;
this.baseDirectory = mainAssemblyFileName.GetParentDirectory();
}
public FileName FindAssembly(DomAssemblyName fullName)
{
throw new NotImplementedException();
}
} }
} }

4
src/Main/SharpDevelop/Dom/AssemblyModel.cs

@ -129,5 +129,9 @@ namespace ICSharpCode.SharpDevelop.Dom
d.Dispose(); d.Dispose();
} }
} }
public IReadOnlyList<DomAssemblyName> References {
get { throw new NotImplementedException(); }
}
} }
} }

2
src/Main/SharpDevelop/Dom/ModelFactory.cs

@ -8,7 +8,7 @@ namespace ICSharpCode.SharpDevelop.Dom
{ {
sealed class ModelFactory : IModelFactory sealed class ModelFactory : IModelFactory
{ {
public IAssemblyModel CreateAssemblyModel(IEntityModelContext context) public IUpdateableAssemblyModel CreateAssemblyModel(IEntityModelContext context)
{ {
return new AssemblyModel(context); return new AssemblyModel(context);
} }

17
src/Main/SharpDevelop/Parser/AssemblyParserService.cs

@ -5,6 +5,7 @@ using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.IO; using System.IO;
using System.Diagnostics; using System.Diagnostics;
using System.Linq;
using System.Runtime.Serialization; using System.Runtime.Serialization;
using System.Threading; using System.Threading;
using System.Threading.Tasks; using System.Threading.Tasks;
@ -12,7 +13,9 @@ using System.Xml;
using ICSharpCode.Core; using ICSharpCode.Core;
using ICSharpCode.NRefactory.Documentation; using ICSharpCode.NRefactory.Documentation;
using ICSharpCode.NRefactory.TypeSystem; using ICSharpCode.NRefactory.TypeSystem;
using ICSharpCode.NRefactory.TypeSystem.Implementation;
using ICSharpCode.NRefactory.Utils; using ICSharpCode.NRefactory.Utils;
using ICSharpCode.SharpDevelop.Dom;
using Mono.Cecil; using Mono.Cecil;
namespace ICSharpCode.SharpDevelop.Parser namespace ICSharpCode.SharpDevelop.Parser
@ -305,5 +308,19 @@ namespace ICSharpCode.SharpDevelop.Parser
} }
} }
#endregion #endregion
public ICompilation CreateCompilationForAssembly(IAssemblyModel assembly)
{
var mainAssembly = GetAssembly(new FileName(assembly.Context.Location));
var references = assembly.References
.Select(r => FindAssembly(r, assembly))
.Where(f => f != null);
return new SimpleCompilation(mainAssembly, references.Select(fn => GetAssembly(fn)));
}
FileName FindAssembly(DomAssemblyName name, IAssemblyModel mainAssembly)
{
throw new NotImplementedException();
}
} }
} }

Loading…
Cancel
Save