Browse Source

Integrate document model with IProject.

Move some parser classes to new folder structure.
newNRvisualizers
Daniel Grunwald 13 years ago
parent
commit
b432c0bfa4
  1. 3
      src/Main/Base/Project/Dom/ConcatModelCollection.cs
  2. 24
      src/Main/Base/Project/Dom/IModelFactory.cs
  3. 15
      src/Main/Base/Project/Dom/IModelService.cs
  4. 8
      src/Main/Base/Project/Dom/ITypeDefinitionModelCollection.cs
  5. 2
      src/Main/Base/Project/ICSharpCode.SharpDevelop.addin
  6. 21
      src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj
  7. 0
      src/Main/Base/Project/Parser/DomAssemblyName.cs
  8. 0
      src/Main/Base/Project/Parser/IAssemblyParserService.cs
  9. 0
      src/Main/Base/Project/Parser/IGlobalAssemblyCacheService.cs
  10. 0
      src/Main/Base/Project/Parser/IParser.cs
  11. 0
      src/Main/Base/Project/Parser/IParserService.cs
  12. 22
      src/Main/Base/Project/Parser/ISolutionSnapshotWithProjectMapping.cs
  13. 0
      src/Main/Base/Project/Parser/ParseInformation.cs
  14. 0
      src/Main/Base/Project/Parser/ParseInformationEventArgs.cs
  15. 11
      src/Main/Base/Project/Parser/ProjectContentContainer.cs
  16. 6
      src/Main/Base/Project/Src/Project/AbstractProject.cs
  17. 42
      src/Main/Base/Project/Src/Project/CompilableProject.cs
  18. 7
      src/Main/Base/Project/Src/Project/IProject.cs
  19. 2
      src/Main/Base/Project/Src/Project/Items/ProjectReferenceProjectItem.cs
  20. 5
      src/Main/Base/Project/Src/Project/MSBuildBasedProject.cs
  21. 6
      src/Main/Base/Test/Dom/CSharpModelTests.cs
  22. 26
      src/Main/SharpDevelop/Dom/ModelFactory.cs
  23. 11
      src/Main/SharpDevelop/Dom/TopLevelTypeDefinitionModelCollection.cs
  24. 12
      src/Main/SharpDevelop/Parser/SharpDevelopSolutionSnapshot.cs
  25. 2
      src/Main/SharpDevelop/SharpDevelop.csproj

3
src/Main/Base/Project/Dom/ConcatModelCollection.cs

@ -16,6 +16,9 @@ namespace ICSharpCode.SharpDevelop.Dom @@ -16,6 +16,9 @@ namespace ICSharpCode.SharpDevelop.Dom
/// </summary>
public sealed class ConcatModelCollection<T> : IModelCollection<T>
{
// TODO: do we still need this class? maybe we should remove it?
// the indirection through this collection wrapper makes the weak reference/weak event stuff too complicated...
sealed class InputCollection : Collection<IModelCollection<T>>
{
readonly ConcatModelCollection<T> owner;

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

@ -0,0 +1,24 @@ @@ -0,0 +1,24 @@
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System;
using ICSharpCode.Core;
using ICSharpCode.NRefactory.TypeSystem;
namespace ICSharpCode.SharpDevelop.Dom
{
/// <summary>
/// Allows creating models using the default implementation in SharpDevelop.exe.
/// </summary>
[SDService]
public interface IModelFactory
{
/// <summary>
/// Creates an empty type definition collection that holds the top-level types for a project.
/// </summary>
IMutableTypeDefinitionModelCollection CreateTopLevelTypeDefinitionCollection(IEntityModelContext context);
ITypeDefinitionModel CreateTypeDefinitionModel(IEntityModelContext context, params IUnresolvedTypeDefinition[] parts);
IMemberModel CreateMemberModel(IEntityModelContext context, IUnresolvedMember member);
}
}

15
src/Main/Base/Project/Dom/IModelService.cs

@ -1,15 +0,0 @@ @@ -1,15 +0,0 @@
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System;
using ICSharpCode.NRefactory.TypeSystem;
namespace ICSharpCode.SharpDevelop.Dom
{
/// <summary>
/// Service that enables lookup of model objects from NRefactory objects.
/// </summary>
public interface IModelService
{
}
}

8
src/Main/Base/Project/Dom/ITypeDefinitionModelCollection.cs

@ -29,6 +29,14 @@ namespace ICSharpCode.SharpDevelop.Dom @@ -29,6 +29,14 @@ namespace ICSharpCode.SharpDevelop.Dom
ITypeDefinitionModel this[TopLevelTypeName topLevelTypeName] { get; }
}
public interface IMutableTypeDefinitionModelCollection : ITypeDefinitionModelCollection, IList<ITypeDefinitionModel>
{
/// <summary>
/// Updates the collection when the parse information has changed.
/// </summary>
void Update(IUnresolvedFile oldFile, IUnresolvedFile newFile);
}
public sealed class EmptyTypeDefinitionModelCollection : ITypeDefinitionModelCollection
{
public static readonly EmptyTypeDefinitionModelCollection Instance = new EmptyTypeDefinitionModelCollection();

2
src/Main/Base/Project/ICSharpCode.SharpDevelop.addin

@ -66,6 +66,8 @@ @@ -66,6 +66,8 @@
class="ICSharpCode.SharpDevelop.Workbench.ShutdownService"/>
<Service id="ICSharpCode.SharpDevelop.Dom.ITreeNodeFactory"
class="ICSharpCode.SharpDevelop.Dom.TreeNodeFactoryService"/>
<Service id="ICSharpCode.SharpDevelop.Dom.IModelFactory"
class="ICSharpCode.SharpDevelop.Dom.ModelFactory"/>
<Service id="ICSharpCode.SharpDevelop.IClipboard"
class="ICSharpCode.SharpDevelop.ClipboardWrapper"/>

21
src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj

@ -98,7 +98,7 @@ @@ -98,7 +98,7 @@
<Compile Include="Dom\ConcatModelCollection.cs" />
<Compile Include="Dom\IEntityModelContext.cs" />
<Compile Include="Dom\IMemberModel.cs" />
<Compile Include="Dom\IModelService.cs" />
<Compile Include="Dom\IModelFactory.cs" />
<Compile Include="Dom\ITypeDefinitionModel.cs" />
<Compile Include="Dom\ITypeDefinitionModelCollection.cs" />
<Compile Include="Dom\KeyedModelCollection.cs" />
@ -114,6 +114,15 @@ @@ -114,6 +114,15 @@
<Compile Include="Editor\ITextMarker.cs" />
<Compile Include="Editor\OnDiskTextSourceVersion.cs" />
<Compile Include="Editor\HighlighterKnownSpanNames.cs" />
<Compile Include="Parser\DomAssemblyName.cs" />
<Compile Include="Parser\IAssemblyParserService.cs" />
<Compile Include="Parser\IGlobalAssemblyCacheService.cs" />
<Compile Include="Parser\IParser.cs" />
<Compile Include="Parser\IParserService.cs" />
<Compile Include="Parser\ISolutionSnapshotWithProjectMapping.cs" />
<Compile Include="Parser\ParseInformation.cs" />
<Compile Include="Parser\ParseInformationEventArgs.cs" />
<Compile Include="Parser\ProjectContentContainer.cs" />
<Compile Include="Services\IClipboard.cs" />
<Compile Include="Services\IMessageLoop.cs" />
<Compile Include="Services\SD.cs" />
@ -443,13 +452,6 @@ @@ -443,13 +452,6 @@
<Compile Include="Src\Internal\Doozers\IOptionPanelDescriptor.cs" />
<Compile Include="Workbench\File\FileEventArgs.cs" />
<Compile Include="Src\Services\MimeTypeDetection.cs" />
<Compile Include="Src\Services\ParserService\DomAssemblyName.cs" />
<Compile Include="Src\Services\ParserService\IAssemblyParserService.cs" />
<Compile Include="Src\Services\ParserService\IGlobalAssemblyCacheService.cs" />
<Compile Include="Src\Services\ParserService\IParserService.cs" />
<Compile Include="Src\Services\ParserService\IParser.cs" />
<Compile Include="Src\Services\ParserService\ParseInformation.cs" />
<Compile Include="Src\Services\ParserService\SharpDevelopSolutionSnapshot.cs" />
<Compile Include="Src\Services\ProjectService\CompileModifiedProjectsOnly.cs" />
<Compile Include="Src\Services\ProjectService\SolutionConfigurationEventHandler.cs" />
<Compile Include="Src\Services\RefactoringService\ExtractInterfaceOptions.cs" />
@ -595,7 +597,6 @@ @@ -595,7 +597,6 @@
<Compile Include="Src\Services\ProjectService\SolutionEventHandler.cs" />
<Compile Include="Src\Services\ProjectService\ProjectEventHandler.cs" />
<Compile Include="Src\Commands\FileMenuCommands.cs" />
<Compile Include="Src\Services\ParserService\ParseInformationEventArgs.cs" />
<Compile Include="Src\Services\ProjectService\ProjectConfigurationEventHandler.cs" />
<Compile Include="Src\Commands\DebugCommands.cs" />
<Compile Include="Src\Gui\Pads\ProjectBrowser\TreeNodes\AbstractProjectBrowserTreeNode.cs" />
@ -703,7 +704,6 @@ @@ -703,7 +704,6 @@
<Compile Include="Src\Services\RefactoringService\RefactoringService.cs" />
<Compile Include="Src\Services\RefactoringService\Reference.cs" />
<Compile Include="Src\Services\ProjectService\ParseableFileContentFinder.cs" />
<Compile Include="Src\Services\ParserService\ParseProjectContent.cs" />
<Compile Include="Src\Project\Items\ImportProjectItem.cs" />
<EmbeddedResource Include="Resources\CodeCompletionOptionPanel.xfrm" />
<Compile Include="Src\Services\Debugger\CurrentLineBookmark.cs" />
@ -858,6 +858,7 @@ @@ -858,6 +858,7 @@
</ProjectReference>
<Folder Include="Dom" />
<Folder Include="Editor" />
<Folder Include="Parser" />
<Folder Include="Services" />
<Folder Include="WinForms" />
<Folder Include="Workbench" />

0
src/Main/Base/Project/Src/Services/ParserService/DomAssemblyName.cs → src/Main/Base/Project/Parser/DomAssemblyName.cs

0
src/Main/Base/Project/Src/Services/ParserService/IAssemblyParserService.cs → src/Main/Base/Project/Parser/IAssemblyParserService.cs

0
src/Main/Base/Project/Src/Services/ParserService/IGlobalAssemblyCacheService.cs → src/Main/Base/Project/Parser/IGlobalAssemblyCacheService.cs

0
src/Main/Base/Project/Src/Services/ParserService/IParser.cs → src/Main/Base/Project/Parser/IParser.cs

0
src/Main/Base/Project/Src/Services/ParserService/IParserService.cs → src/Main/Base/Project/Parser/IParserService.cs

22
src/Main/Base/Project/Parser/ISolutionSnapshotWithProjectMapping.cs

@ -0,0 +1,22 @@ @@ -0,0 +1,22 @@
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System;
using System.Collections.Concurrent;
using System.Collections.Generic;
using ICSharpCode.NRefactory.TypeSystem;
using ICSharpCode.NRefactory.TypeSystem.Implementation;
using ICSharpCode.SharpDevelop.Project;
namespace ICSharpCode.SharpDevelop.Parser
{
/// <summary>
/// ISolutionSnapshot implementation that supports the <c>IAssembly.GetProject()</c> extension method.
/// </summary>
public interface ISolutionSnapshotWithProjectMapping : ISolutionSnapshot
{
IProject GetProject(IAssembly assembly);
IProjectContent GetProjectContent(IProject project);
ICompilation GetCompilation(IProject project);
}
}

0
src/Main/Base/Project/Src/Services/ParserService/ParseInformation.cs → src/Main/Base/Project/Parser/ParseInformation.cs

0
src/Main/Base/Project/Src/Services/ParserService/ParseInformationEventArgs.cs → src/Main/Base/Project/Parser/ParseInformationEventArgs.cs

11
src/Main/Base/Project/Src/Services/ParserService/ParseProjectContent.cs → src/Main/Base/Project/Parser/ProjectContentContainer.cs

@ -19,9 +19,10 @@ using ICSharpCode.SharpDevelop.Util; @@ -19,9 +19,10 @@ using ICSharpCode.SharpDevelop.Util;
namespace ICSharpCode.SharpDevelop.Parser
{
public class ParseProjectContentContainer : IDisposable
sealed class ProjectContentContainer : IDisposable
{
readonly MSBuildBasedProject project;
readonly IProject project;
readonly IParserService parserService = SD.ParserService;
/// <summary>
/// Lock for accessing mutable fields of this class.
@ -47,7 +48,7 @@ namespace ICSharpCode.SharpDevelop.Parser @@ -47,7 +48,7 @@ namespace ICSharpCode.SharpDevelop.Parser
string cacheFileName;
#region Constructor + Dispose
public ParseProjectContentContainer(MSBuildBasedProject project, IProjectContent initialProjectContent)
public ProjectContentContainer(MSBuildBasedProject project, IProjectContent initialProjectContent)
{
if (project == null)
throw new ArgumentNullException("project");
@ -88,7 +89,7 @@ namespace ICSharpCode.SharpDevelop.Parser @@ -88,7 +89,7 @@ namespace ICSharpCode.SharpDevelop.Parser
serializeOnDispose = !this.serializedProjectContentIsUpToDate;
}
foreach (var unresolvedFile in pc.Files) {
SD.ParserService.RemoveOwnerProject(FileName.Create(unresolvedFile.FileName), project);
parserService.RemoveOwnerProject(FileName.Create(unresolvedFile.FileName), project);
}
if (serializeOnDispose)
SerializeAsync(cacheFileName, pc).FireAndForget();
@ -139,7 +140,7 @@ namespace ICSharpCode.SharpDevelop.Parser @@ -139,7 +140,7 @@ namespace ICSharpCode.SharpDevelop.Parser
string cacheFileName = Path.GetFileNameWithoutExtension(projectFileName);
if (cacheFileName.Length > 32)
cacheFileName = cacheFileName.Substring(cacheFileName.Length - 32); // use 32 last characters
cacheFileName = Path.Combine(persistencePath, cacheFileName + "." + projectFileName.GetHashCode().ToString("x8") + ".prj");
cacheFileName = Path.Combine(persistencePath, cacheFileName + "." + projectFileName.ToString().GetStableHashCode().ToString("x8") + ".prj");
return cacheFileName;
}

6
src/Main/Base/Project/Src/Project/AbstractProject.cs

@ -471,17 +471,12 @@ namespace ICSharpCode.SharpDevelop.Project @@ -471,17 +471,12 @@ namespace ICSharpCode.SharpDevelop.Project
get { return Solution.SolutionVersionVS2005; }
}
public virtual void ResolveAssemblyReferences()
{
}
/// <summary>
/// Resolves assembly references for this project.
/// The resulting list of resolved references will include project references.
/// </summary>
public virtual IEnumerable<ReferenceProjectItem> ResolveAssemblyReferences(CancellationToken cancellationToken)
{
ResolveAssemblyReferences();
List<ReferenceProjectItem> referenceItems = new List<ReferenceProjectItem>();
bool mscorlib = false;
foreach (ProjectItem item in this.Items) {
@ -672,6 +667,7 @@ namespace ICSharpCode.SharpDevelop.Project @@ -672,6 +667,7 @@ namespace ICSharpCode.SharpDevelop.Project
}
}
[Browsable(false)]
public virtual ICSharpCode.SharpDevelop.Dom.ITypeDefinitionModelCollection TypeDefinitionModels {
get {
return EmptyTypeDefinitionModelCollection.Instance;

42
src/Main/Base/Project/Src/Project/CompilableProject.cs

@ -9,9 +9,11 @@ using System.IO; @@ -9,9 +9,11 @@ using System.IO;
using System.Linq;
using System.Runtime.InteropServices.ComTypes;
using System.Xml.Linq;
using ICSharpCode.Core;
using ICSharpCode.NRefactory.TypeSystem;
using ICSharpCode.NRefactory.TypeSystem.Implementation;
using ICSharpCode.SharpDevelop.Dom;
using ICSharpCode.SharpDevelop.Parser;
using ICSharpCode.SharpDevelop.Project.Converter;
using ICSharpCode.SharpDevelop.Util;
@ -233,16 +235,16 @@ namespace ICSharpCode.SharpDevelop.Project @@ -233,16 +235,16 @@ namespace ICSharpCode.SharpDevelop.Project
void Reparse(bool references, bool code)
{
lock (SyncRoot) {
if (parseProjectContentContainer == null)
if (projectContentContainer == null)
return; // parsing hasn't started yet; no need to re-parse
parseProjectContentContainer.SetAssemblyName(this.AssemblyName);
parseProjectContentContainer.SetLocation(this.OutputAssemblyFullPath);
projectContentContainer.SetAssemblyName(this.AssemblyName);
projectContentContainer.SetLocation(this.OutputAssemblyFullPath);
if (references) {
parseProjectContentContainer.ReparseReferences();
projectContentContainer.ReparseReferences();
}
if (code) {
parseProjectContentContainer.SetCompilerSettings(CreateCompilerSettings());
parseProjectContentContainer.ReparseCode();
projectContentContainer.SetCompilerSettings(CreateCompilerSettings());
projectContentContainer.ReparseCode();
}
}
}
@ -279,8 +281,8 @@ namespace ICSharpCode.SharpDevelop.Project @@ -279,8 +281,8 @@ namespace ICSharpCode.SharpDevelop.Project
public override void Dispose()
{
lock (SyncRoot) {
if (parseProjectContentContainer != null)
parseProjectContentContainer.Dispose();
if (projectContentContainer != null)
projectContentContainer.Dispose();
}
base.Dispose();
}
@ -343,15 +345,16 @@ namespace ICSharpCode.SharpDevelop.Project @@ -343,15 +345,16 @@ namespace ICSharpCode.SharpDevelop.Project
#endregion
#region Type System
volatile ParseProjectContentContainer parseProjectContentContainer;
volatile ProjectContentContainer projectContentContainer;
IMutableTypeDefinitionModelCollection typeDefinitionModels;
protected void InitializeProjectContent(IProjectContent initialProjectContent)
{
lock (SyncRoot) {
if (parseProjectContentContainer != null)
if (projectContentContainer != null)
throw new InvalidOperationException("Already initialized.");
parseProjectContentContainer = new ParseProjectContentContainer(this, initialProjectContent);
parseProjectContentContainer.SetCompilerSettings(CreateCompilerSettings());
projectContentContainer = new ProjectContentContainer(this, initialProjectContent);
projectContentContainer.SetCompilerSettings(CreateCompilerSettings());
}
}
@ -362,20 +365,31 @@ namespace ICSharpCode.SharpDevelop.Project @@ -362,20 +365,31 @@ namespace ICSharpCode.SharpDevelop.Project
public override IProjectContent ProjectContent {
get {
var c = parseProjectContentContainer;
var c = projectContentContainer;
return c != null ? c.ProjectContent : null;
}
}
public override ITypeDefinitionModelCollection TypeDefinitionModels {
get {
SD.MainThread.VerifyAccess();
if (typeDefinitionModels == null)
typeDefinitionModels = SD.GetRequiredService<IModelFactory>().CreateTopLevelTypeDefinitionCollection(new ProjectEntityModelContext(this, ".cs"));
return typeDefinitionModels;
}
}
public override void OnParseInformationUpdated(ParseInformationEventArgs args)
{
var c = parseProjectContentContainer;
var c = projectContentContainer;
if (c != null)
c.ParseInformationUpdated(args.OldUnresolvedFile, args.NewUnresolvedFile);
// OnParseInformationUpdated is called inside a lock, but we don't want to raise the event inside that lock.
// To ensure events are raised in the same order, we always invoke on the main thread.
SD.MainThread.InvokeAsync(
delegate {
if (typeDefinitionModels != null)
typeDefinitionModels.Update(args.OldUnresolvedFile, args.NewUnresolvedFile);
ParseInformationUpdated(null, args);
}).FireAndForget();
}

7
src/Main/Base/Project/Src/Project/IProject.cs

@ -7,6 +7,7 @@ using System.Collections.Generic; @@ -7,6 +7,7 @@ using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.IO;
using System.Threading;
using System.Xml;
using System.Xml.Linq;
@ -238,10 +239,10 @@ namespace ICSharpCode.SharpDevelop.Project @@ -238,10 +239,10 @@ namespace ICSharpCode.SharpDevelop.Project
int MinimumSolutionVersion { get; }
/// <summary>
/// Retrieve the fully qualified assembly names and file location of referenced assemblies.
/// This method is thread safe.
/// Resolves assembly references for this project.
/// The resulting list of resolved references will include project references.
/// </summary>
void ResolveAssemblyReferences();
IEnumerable<ReferenceProjectItem> ResolveAssemblyReferences(CancellationToken cancellationToken);
/// <summary>
/// Notifies the project that it was succesfully created from a project template.

2
src/Main/Base/Project/Src/Project/Items/ProjectReferenceProjectItem.cs

@ -102,7 +102,7 @@ namespace ICSharpCode.SharpDevelop.Project @@ -102,7 +102,7 @@ namespace ICSharpCode.SharpDevelop.Project
IProject p = this.ReferencedProject;
if (p == null)
return null;
var snapshot = context.Compilation.SolutionSnapshot as SharpDevelopSolutionSnapshot;
var snapshot = context.Compilation.SolutionSnapshot as ISolutionSnapshotWithProjectMapping;
IProjectContent pc = (snapshot != null) ? snapshot.GetProjectContent(p) : p.ProjectContent;
return (pc != null) ? pc.Resolve(context) : null;
}

5
src/Main/Base/Project/Src/Project/MSBuildBasedProject.cs

@ -143,11 +143,6 @@ namespace ICSharpCode.SharpDevelop.Project @@ -143,11 +143,6 @@ namespace ICSharpCode.SharpDevelop.Project
}
}
public override void ResolveAssemblyReferences()
{
MSBuildInternals.ResolveAssemblyReferences(this);
}
public override IEnumerable<ReferenceProjectItem> ResolveAssemblyReferences(CancellationToken cancellationToken)
{
ReferenceProjectItem[] additionalItems = {

6
src/Main/Base/Test/Dom/CSharpModelTests.cs

@ -45,7 +45,7 @@ namespace ICSharpCode.SharpDevelop.Dom @@ -45,7 +45,7 @@ namespace ICSharpCode.SharpDevelop.Dom
Assert.IsNull(oldFile);
var newFile = Parse(fileName, code);
projectContent = projectContent.AddOrUpdateFiles(newFile);
topLevelTypeModels.NotifyParseInformationChanged(oldFile, newFile);
topLevelTypeModels.Update(oldFile, newFile);
}
IUnresolvedFile Parse(string fileName, string code)
@ -62,14 +62,14 @@ namespace ICSharpCode.SharpDevelop.Dom @@ -62,14 +62,14 @@ namespace ICSharpCode.SharpDevelop.Dom
Assert.IsNotNull(oldFile);
var newFile = Parse(fileName, code);
projectContent = projectContent.AddOrUpdateFiles(newFile);
topLevelTypeModels.NotifyParseInformationChanged(oldFile, newFile);
topLevelTypeModels.Update(oldFile, newFile);
}
protected void RemoveCodeFile(string fileName)
{
var oldFile = projectContent.GetFile(fileName);
projectContent = projectContent.RemoveFiles(fileName);
topLevelTypeModels.NotifyParseInformationChanged(oldFile, null);
topLevelTypeModels.Update(oldFile, null);
}
#endregion

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

@ -0,0 +1,26 @@ @@ -0,0 +1,26 @@
// Copyright (c) AlphaSierraPapa for the SharpDevelop Team (for details please see \doc\copyright.txt)
// This code is distributed under the GNU LGPL (for details please see \doc\license.txt)
using System;
using ICSharpCode.NRefactory.TypeSystem;
namespace ICSharpCode.SharpDevelop.Dom
{
sealed class ModelFactory : IModelFactory
{
public IMutableTypeDefinitionModelCollection CreateTopLevelTypeDefinitionCollection(IEntityModelContext context)
{
return new TopLevelTypeDefinitionModelCollection(context);
}
public ITypeDefinitionModel CreateTypeDefinitionModel(IEntityModelContext context, params IUnresolvedTypeDefinition[] parts)
{
return new TypeDefinitionModel(context, parts);
}
public IMemberModel CreateMemberModel(IEntityModelContext context, IUnresolvedMember member)
{
return new MemberModel(context, member);
}
}
}

11
src/Main/SharpDevelop/Dom/TopLevelTypeDefinitionModelCollection.cs

@ -13,7 +13,7 @@ namespace ICSharpCode.SharpDevelop.Dom @@ -13,7 +13,7 @@ namespace ICSharpCode.SharpDevelop.Dom
/// <summary>
/// A TypeDefinitionModel-collection that holds models for all top-level types in a project content.
/// </summary>
sealed class TopLevelTypeDefinitionModelCollection : KeyedModelCollection<TopLevelTypeName, TypeDefinitionModel>
sealed class TopLevelTypeDefinitionModelCollection : KeyedModelCollection<TopLevelTypeName, ITypeDefinitionModel>, IMutableTypeDefinitionModelCollection
{
readonly IEntityModelContext context;
@ -24,9 +24,9 @@ namespace ICSharpCode.SharpDevelop.Dom @@ -24,9 +24,9 @@ namespace ICSharpCode.SharpDevelop.Dom
this.context = context;
}
public TypeDefinitionModel this[FullTypeName fullTypeName] {
public ITypeDefinitionModel this[FullTypeName fullTypeName] {
get {
TypeDefinitionModel model = base[fullTypeName.TopLevelTypeName];
ITypeDefinitionModel model = base[fullTypeName.TopLevelTypeName];
for (int i = 0; i < fullTypeName.NestingLevel; i++) {
throw new NotImplementedException();
}
@ -37,14 +37,15 @@ namespace ICSharpCode.SharpDevelop.Dom @@ -37,14 +37,15 @@ namespace ICSharpCode.SharpDevelop.Dom
/// <summary>
/// Updates the parse information.
/// </summary>
public void NotifyParseInformationChanged(IUnresolvedFile oldFile, IUnresolvedFile newFile)
public void Update(IUnresolvedFile oldFile, IUnresolvedFile newFile)
{
if (oldFile != null) {
}
throw new NotImplementedException();
}
protected override TopLevelTypeName GetKeyForItem(TypeDefinitionModel item)
protected override TopLevelTypeName GetKeyForItem(ITypeDefinitionModel item)
{
return item.FullTypeName.TopLevelTypeName;
}

12
src/Main/Base/Project/Src/Services/ParserService/SharpDevelopSolutionSnapshot.cs → src/Main/SharpDevelop/Parser/SharpDevelopSolutionSnapshot.cs

@ -10,17 +10,7 @@ using ICSharpCode.SharpDevelop.Project; @@ -10,17 +10,7 @@ using ICSharpCode.SharpDevelop.Project;
namespace ICSharpCode.SharpDevelop.Parser
{
/// <summary>
/// ISolutionSnapshot implementation that supports the <c>IAssembly.GetProject()</c> extension method.
/// </summary>
public interface ISolutionSnapshotWithProjectMapping : ISolutionSnapshot
{
IProject GetProject(IAssembly assembly);
ICompilation GetCompilation(IProject project);
}
public class SharpDevelopSolutionSnapshot : DefaultSolutionSnapshot, ISolutionSnapshotWithProjectMapping
sealed class SharpDevelopSolutionSnapshot : DefaultSolutionSnapshot, ISolutionSnapshotWithProjectMapping
{
Dictionary<IProject, IProjectContent> projectContentSnapshots = new Dictionary<IProject, IProjectContent>();
Lazy<ICompilation> dummyCompilation;

2
src/Main/SharpDevelop/SharpDevelop.csproj

@ -81,6 +81,7 @@ @@ -81,6 +81,7 @@
</Reference>
</ItemGroup>
<ItemGroup>
<Compile Include="Dom\ModelFactory.cs" />
<Compile Include="Dom\MemberModel.cs" />
<Compile Include="Dom\TopLevelTypeDefinitionModelCollection.cs" />
<Compile Include="Dom\TreeNodeFactoryService.cs" />
@ -91,6 +92,7 @@ @@ -91,6 +92,7 @@
</Compile>
<Compile Include="Parser\AssemblyParserService.cs" />
<Compile Include="Parser\LoadSolutionProjects.cs" />
<Compile Include="Parser\SharpDevelopSolutionSnapshot.cs" />
<Compile Include="Services\ClipboardWrapper.cs" />
<Compile Include="Services\DispatcherMessageLoop.cs" />
<Compile Include="Startup\App.xaml.cs" />

Loading…
Cancel
Save