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

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

@ -13,6 +13,8 @@ using ICSharpCode.NRefactory.CSharp.Resolver; @@ -13,6 +13,8 @@ using ICSharpCode.NRefactory.CSharp.Resolver;
using ICSharpCode.NRefactory.Editor;
using ICSharpCode.NRefactory.Semantics;
using ICSharpCode.NRefactory.TypeSystem;
using ICSharpCode.SharpDevelop;
using ICSharpCode.SharpDevelop.Dom.ClassBrowser;
using ICSharpCode.SharpDevelop.Editor.Search;
using ICSharpCode.SharpDevelop.Parser;
using ICSharpCode.SharpDevelop.Project;
@ -65,6 +67,11 @@ namespace ICSharpCode.ILSpyAddIn @@ -65,6 +67,11 @@ namespace ICSharpCode.ILSpyAddIn
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()
.AddAssemblyReferences(defaultReferences.Value)
.AddOrUpdateFiles(unresolvedFile)

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

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

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

@ -4,7 +4,9 @@ @@ -4,7 +4,9 @@
using System;
using System.Collections.Generic;
using System.Linq;
using ICSharpCode.NRefactory;
using ICSharpCode.NRefactory.TypeSystem;
using ICSharpCode.SharpDevelop.Parser;
namespace ICSharpCode.SharpDevelop.Dom
{
@ -47,6 +49,11 @@ namespace ICSharpCode.SharpDevelop.Dom @@ -47,6 +49,11 @@ namespace ICSharpCode.SharpDevelop.Dom
/// Gets the <see cref="IEntityModelContext"/> of this assembly model.
/// </summary>
IEntityModelContext Context { get; }
/// <summary>
/// Returns the assembly references.
/// </summary>
IReadOnlyList<DomAssemblyName> References { get; }
}
/// <summary>
@ -103,6 +110,10 @@ namespace ICSharpCode.SharpDevelop.Dom @@ -103,6 +110,10 @@ namespace ICSharpCode.SharpDevelop.Dom
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 @@ -15,6 +15,6 @@ namespace ICSharpCode.SharpDevelop.Dom
{
ITypeDefinitionModel CreateTypeDefinitionModel(IEntityModelContext context, params IUnresolvedTypeDefinition[] parts);
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; @@ -7,6 +7,8 @@ using System.Threading.Tasks;
using ICSharpCode.Core;
using ICSharpCode.NRefactory.TypeSystem;
using ICSharpCode.SharpDevelop.Dom;
using ICSharpCode.SharpDevelop.Dom.ClassBrowser;
namespace ICSharpCode.SharpDevelop.Parser
{
@ -41,5 +43,34 @@ namespace ICSharpCode.SharpDevelop.Parser @@ -41,5 +43,34 @@ namespace ICSharpCode.SharpDevelop.Parser
/// May return <c>null</c> if on-disk caching is disabled.
/// </summary>
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 @@ -129,5 +129,9 @@ namespace ICSharpCode.SharpDevelop.Dom
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 @@ -8,7 +8,7 @@ namespace ICSharpCode.SharpDevelop.Dom
{
sealed class ModelFactory : IModelFactory
{
public IAssemblyModel CreateAssemblyModel(IEntityModelContext context)
public IUpdateableAssemblyModel CreateAssemblyModel(IEntityModelContext context)
{
return new AssemblyModel(context);
}

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

@ -5,6 +5,7 @@ using System; @@ -5,6 +5,7 @@ using System;
using System.Collections.Generic;
using System.IO;
using System.Diagnostics;
using System.Linq;
using System.Runtime.Serialization;
using System.Threading;
using System.Threading.Tasks;
@ -12,7 +13,9 @@ using System.Xml; @@ -12,7 +13,9 @@ using System.Xml;
using ICSharpCode.Core;
using ICSharpCode.NRefactory.Documentation;
using ICSharpCode.NRefactory.TypeSystem;
using ICSharpCode.NRefactory.TypeSystem.Implementation;
using ICSharpCode.NRefactory.Utils;
using ICSharpCode.SharpDevelop.Dom;
using Mono.Cecil;
namespace ICSharpCode.SharpDevelop.Parser
@ -305,5 +308,19 @@ namespace ICSharpCode.SharpDevelop.Parser @@ -305,5 +308,19 @@ namespace ICSharpCode.SharpDevelop.Parser
}
}
#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