diff --git a/src/AddIns/DisplayBindings/ILSpyAddIn/ILSpyDecompilerService.cs b/src/AddIns/DisplayBindings/ILSpyAddIn/ILSpyDecompilerService.cs
index ba2b485a5b..ea29fac22d 100644
--- a/src/AddIns/DisplayBindings/ILSpyAddIn/ILSpyDecompilerService.cs
+++ b/src/AddIns/DisplayBindings/ILSpyAddIn/ILSpyDecompilerService.cs
@@ -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;
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
///
/// Description of DecompilerService.
///
- public class ILSpyDecompilerService
+ public static class ILSpyDecompilerService
{
public static ILSpyUnresolvedFile DecompileType(DecompiledTypeReference name)
{
diff --git a/src/AddIns/DisplayBindings/ILSpyAddIn/ILSpyParser.cs b/src/AddIns/DisplayBindings/ILSpyAddIn/ILSpyParser.cs
index 443d22b3ed..b4ec755972 100644
--- a/src/AddIns/DisplayBindings/ILSpyAddIn/ILSpyParser.cs
+++ b/src/AddIns/DisplayBindings/ILSpyAddIn/ILSpyParser.cs
@@ -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
public ICompilation CreateCompilationForSingleFile(FileName fileName, IUnresolvedFile unresolvedFile)
{
+ DecompiledTypeReference reference = DecompiledTypeReference.FromFileName(fileName);
+ if (reference != null) {
+// var model = SD.GetService().FindAssemblyModel(reference.AssemblyFile);
+// return SD.AssemblyParserService.CreateCompilationForAssembly(model);
+ }
return new CSharpProjectContent()
.AddAssemblyReferences(defaultReferences.Value)
.AddOrUpdateFiles(unresolvedFile)
diff --git a/src/Main/Base/Project/Dom/ClassBrowser/WorkspaceModel.cs b/src/Main/Base/Project/Dom/ClassBrowser/WorkspaceModel.cs
index 9e3e1da6e6..d093409f91 100644
--- a/src/Main/Base/Project/Dom/ClassBrowser/WorkspaceModel.cs
+++ b/src/Main/Base/Project/Dom/ClassBrowser/WorkspaceModel.cs
@@ -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
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
set {
if (assemblyList != value) {
assemblyList = value;
- OnPropertyChanged("AssemblyList");
+ OnPropertyChanged();
}
}
}
+
public WorkspaceModel()
{
this.specialNodes = new SimpleModelCollection();
diff --git a/src/Main/Base/Project/Dom/IAssemblyModel.cs b/src/Main/Base/Project/Dom/IAssemblyModel.cs
index f3df5c2589..29f32dd122 100644
--- a/src/Main/Base/Project/Dom/IAssemblyModel.cs
+++ b/src/Main/Base/Project/Dom/IAssemblyModel.cs
@@ -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
/// Gets the of this assembly model.
///
IEntityModelContext Context { get; }
+
+ ///
+ /// Returns the assembly references.
+ ///
+ IReadOnlyList References { get; }
}
///
@@ -103,6 +110,10 @@ namespace ICSharpCode.SharpDevelop.Dom
return null;
}
}
+
+ public IReadOnlyList References {
+ get { return EmptyList.Instance; }
+ }
}
}
diff --git a/src/Main/Base/Project/Dom/IModelFactory.cs b/src/Main/Base/Project/Dom/IModelFactory.cs
index ea2facca6e..932bb90b17 100644
--- a/src/Main/Base/Project/Dom/IModelFactory.cs
+++ b/src/Main/Base/Project/Dom/IModelFactory.cs
@@ -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);
}
}
diff --git a/src/Main/Base/Project/Parser/IAssemblyParserService.cs b/src/Main/Base/Project/Parser/IAssemblyParserService.cs
index d0fa44ac21..8982d3ecc5 100644
--- a/src/Main/Base/Project/Parser/IAssemblyParserService.cs
+++ b/src/Main/Base/Project/Parser/IAssemblyParserService.cs
@@ -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
/// May return null if on-disk caching is disabled.
///
string DomPersistencePath { get; }
+
+ ///
+ /// Creates a compilation for the specified assembly.
+ ///
+ 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();
+ }
}
}
diff --git a/src/Main/SharpDevelop/Dom/AssemblyModel.cs b/src/Main/SharpDevelop/Dom/AssemblyModel.cs
index b10684186e..8b72f19f8f 100644
--- a/src/Main/SharpDevelop/Dom/AssemblyModel.cs
+++ b/src/Main/SharpDevelop/Dom/AssemblyModel.cs
@@ -129,5 +129,9 @@ namespace ICSharpCode.SharpDevelop.Dom
d.Dispose();
}
}
+
+ public IReadOnlyList References {
+ get { throw new NotImplementedException(); }
+ }
}
}
\ No newline at end of file
diff --git a/src/Main/SharpDevelop/Dom/ModelFactory.cs b/src/Main/SharpDevelop/Dom/ModelFactory.cs
index da921a5031..97b9ea6faf 100644
--- a/src/Main/SharpDevelop/Dom/ModelFactory.cs
+++ b/src/Main/SharpDevelop/Dom/ModelFactory.cs
@@ -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);
}
diff --git a/src/Main/SharpDevelop/Parser/AssemblyParserService.cs b/src/Main/SharpDevelop/Parser/AssemblyParserService.cs
index 10248f16b4..1797c43253 100644
--- a/src/Main/SharpDevelop/Parser/AssemblyParserService.cs
+++ b/src/Main/SharpDevelop/Parser/AssemblyParserService.cs
@@ -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;
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
}
}
#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();
+ }
}
}