From 7fa7a51b5ac6306c2ae4afc944ef277a34a6a67c Mon Sep 17 00:00:00 2001 From: Daniel Grunwald Date: Sat, 15 Jun 2013 12:00:35 +0200 Subject: [PATCH] Started implementing the EnvDTE code model. --- .../Project/Src/EnvDTE/CodeElement.cs | 140 ++++++++---------- .../Project/Src/EnvDTE/CodeElementsList.cs | 102 ++++++------- .../Project/Src/EnvDTE/CodeTypeMembers.cs | 95 ++++++------ .../Project/Src/EnvDTE/CodeVariable.cs | 92 ++++++------ .../Project/Src/EnvDTE/EditPoint.cs | 65 ++++---- .../Project/Src/EnvDTE/Project.cs | 2 +- .../Project/Src/EnvDTE/ProjectKind.cs | 2 +- .../Project/Src/EnvDTE/ProjectType.cs | 24 +-- .../Project/Src/EnvDTE/TextPoint.cs | 90 +++++------ .../Project/Src/IDocumentLoader.cs | 25 ++-- .../Project/Src/IProjectContentExtensions.cs | 67 ++++++--- .../Src/VisualStudio/FlavoredProject.cs | 6 +- .../Test/Src/EnvDTE/ProjectTests.cs | 4 +- .../Test/Src/Helpers/ProjectHelper.cs | 10 +- .../Test/Src/Helpers/TestableProject.cs | 14 ++ src/Main/Base/Project/Dom/IEntityModel.cs | 10 ++ src/Main/Base/Project/Dom/IEventModel.cs | 12 ++ src/Main/Base/Project/Dom/IFieldModel.cs | 12 ++ src/Main/Base/Project/Dom/IMethodModel.cs | 12 ++ src/Main/Base/Project/Dom/IPropertyModel.cs | 12 ++ .../Project/ICSharpCode.SharpDevelop.csproj | 4 + src/Main/SharpDevelop/Dom/MemberModel.cs | 5 + .../SharpDevelop/Dom/TypeDefinitionModel.cs | 17 +++ 23 files changed, 451 insertions(+), 371 deletions(-) create mode 100644 src/Main/Base/Project/Dom/IEventModel.cs create mode 100644 src/Main/Base/Project/Dom/IFieldModel.cs create mode 100644 src/Main/Base/Project/Dom/IMethodModel.cs create mode 100644 src/Main/Base/Project/Dom/IPropertyModel.cs diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeElement.cs b/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeElement.cs index aa18fbfb8c..016324c25e 100644 --- a/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeElement.cs +++ b/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeElement.cs @@ -1,77 +1,63 @@ -//// 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.SharpDevelop.Dom; -//using ICSharpCode.SharpDevelop.Project; -// -//namespace ICSharpCode.PackageManagement.EnvDTE -//{ -// public class CodeElement : global::EnvDTE.CodeElementBase, global::EnvDTE.CodeElement -// { -// DTE dte; -// -// public CodeElement() -// { -// } -// -// public CodeElement(IEntity entity) -// { -// this.Entity = entity; -// this.Language = entity.ProjectContent.GetCodeModelLanguage(); -// } -// -// protected IEntity Entity { get; private set; } -// -// public virtual string Name { -// get { return GetName(); } -// } -// -// string GetName() -// { -// int index = Entity.FullyQualifiedName.LastIndexOf('.'); -// return Entity.FullyQualifiedName.Substring(index + 1); -// } -// -// public virtual string Language { get; protected set; } -// -// // default is vsCMPart.vsCMPartWholeWithAttributes -// public virtual global::EnvDTE.TextPoint GetStartPoint() -// { -// return null; -// } -// -// public virtual global::EnvDTE.TextPoint GetEndPoint() -// { -// return null; -// } -// -// public virtual global::EnvDTE.vsCMInfoLocation InfoLocation { get; protected set; } -// -// public virtual global::EnvDTE.DTE DTE { -// get { -// if (dte == null) { -// dte = new DTE(); -// } -// return dte; -// } -// } -// -// protected global::EnvDTE.vsCMAccess GetAccess() -// { -// if (Entity.IsPublic) { -// return global::EnvDTE.vsCMAccess.vsCMAccessPublic; -// } -// return global::EnvDTE.vsCMAccess.vsCMAccessPrivate; -// } -// -// public virtual global::EnvDTE.vsCMElement Kind { -// get { return global::EnvDTE.vsCMElement.vsCMElementOther; } -// } -// -// protected override bool GetIsDerivedFrom(string fullName) -// { -// return false; -// } -// } -//} +// 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; +using ICSharpCode.SharpDevelop.Dom; +using ICSharpCode.SharpDevelop.Project; + +namespace ICSharpCode.PackageManagement.EnvDTE +{ + public class CodeElement : global::EnvDTE.CodeElementBase, global::EnvDTE.CodeElement + { + DTE dte; + IEntityModel entityModel; + + public CodeElement() + { + } + + public CodeElement(IEntityModel entityModel) + { + this.entityModel = entityModel; + this.Language = entityModel.ParentProject.GetCodeModelLanguage(); + } + + public virtual string Name { + get { return entityModel.Name; } + } + + public virtual string Language { get; protected set; } + + // default is vsCMPart.vsCMPartWholeWithAttributes + public virtual global::EnvDTE.TextPoint GetStartPoint() + { + return null; + } + + public virtual global::EnvDTE.TextPoint GetEndPoint() + { + return null; + } + + public virtual global::EnvDTE.vsCMInfoLocation InfoLocation { get; protected set; } + + public virtual global::EnvDTE.DTE DTE { + get { + if (dte == null) { + dte = new DTE(); + } + return dte; + } + } + + public virtual global::EnvDTE.vsCMElement Kind { + get { return global::EnvDTE.vsCMElement.vsCMElementOther; } + } + + protected override bool GetIsDerivedFrom(string fullName) + { + return false; + } + } +} diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeElementsList.cs b/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeElementsList.cs index 50b9fd738b..37224dd41e 100644 --- a/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeElementsList.cs +++ b/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeElementsList.cs @@ -1,51 +1,51 @@ -//// 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; -//using System.Collections.Generic; -//using System.Linq; -// -//namespace ICSharpCode.PackageManagement.EnvDTE -//{ -// public class CodeElementsList : MarshalByRefObject, global::EnvDTE.CodeElements -// { -// List elements = new List(); -// -// public CodeElementsList() -// { -// } -// -// protected virtual void AddCodeElement(CodeElement element) -// { -// elements.Add(element); -// } -// -// public int Count { -// get { return elements.Count; } -// } -// -// public IEnumerator GetEnumerator() -// { -// return elements.GetEnumerator(); -// } -// -// public global::EnvDTE.CodeElement Item(object index) -// { -// if (index is int) { -// return Item((int)index); -// } -// return Item((string)index); -// } -// -// global::EnvDTE.CodeElement Item(int index) -// { -// return elements[index - 1]; -// } -// -// global::EnvDTE.CodeElement Item(string name) -// { -// return elements.Single(item => item.Name == name); -// } -// } -//} +// 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; +using System.Collections.Generic; +using System.Linq; + +namespace ICSharpCode.PackageManagement.EnvDTE +{ + public class CodeElementsList : MarshalByRefObject, global::EnvDTE.CodeElements + { + List elements = new List(); + + public CodeElementsList() + { + } + + protected virtual void AddCodeElement(CodeElement element) + { + elements.Add(element); + } + + public int Count { + get { return elements.Count; } + } + + public IEnumerator GetEnumerator() + { + return elements.GetEnumerator(); + } + + public global::EnvDTE.CodeElement Item(object index) + { + if (index is int) { + return Item((int)index); + } + return Item((string)index); + } + + global::EnvDTE.CodeElement Item(int index) + { + return elements[index - 1]; + } + + global::EnvDTE.CodeElement Item(string name) + { + return elements.Single(item => item.Name == name); + } + } +} diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeTypeMembers.cs b/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeTypeMembers.cs index 0be01dc0f0..dc170ae809 100644 --- a/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeTypeMembers.cs +++ b/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeTypeMembers.cs @@ -1,49 +1,46 @@ -//// 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.SharpDevelop.Dom; -// -//namespace ICSharpCode.PackageManagement.EnvDTE -//{ -// public class CodeTypeMembers : CodeElementsList -// { -// IProjectContent projectContent; -// IClass c; -// -// public CodeTypeMembers(IProjectContent projectContent, IClass c) -// { -// this.projectContent = projectContent; -// this.c = c; -// AddMembers(); -// } -// -// void AddMembers() -// { -// foreach (IProperty property in c.Properties) { -// AddProperty(property); -// } -// foreach (IField field in c.Fields) { -// AddField(field); -// } -// foreach (IMethod method in c.Methods) { -// AddMethod(method); -// } -// } -// -// void AddMethod(IMethod method) -// { -// AddCodeElement(new CodeFunction2(method)); -// } -// -// void AddField(IField field) -// { -// AddCodeElement(new CodeVariable(field)); -// } -// -// void AddProperty(IProperty property) -// { -// AddCodeElement(new CodeProperty2(property)); -// } -// } -//} +// 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; +using ICSharpCode.SharpDevelop.Dom; + +namespace ICSharpCode.PackageManagement.EnvDTE +{ + public class CodeTypeMembers : CodeElementsList + { + public CodeTypeMembers(IModelCollection members) + { + foreach (var m in members) { + var e = CreateMember(m); + if (e != null) + base.AddCodeElement(e); + } + // TODO track collection changes + //members.CollectionChanged += members_CollectionChanged; + } + + CodeElement CreateMember(IMemberModel m) + { + switch (m.SymbolKind) { + case SymbolKind.Field: +// return new CodeVariable(m); + throw new NotImplementedException(); + case SymbolKind.Property: + case SymbolKind.Indexer: +// return new CodeProperty2(m); + throw new NotImplementedException(); + case SymbolKind.Event: + return null; // events are not supported in EnvDTE? + case SymbolKind.Method: + case SymbolKind.Operator: + case SymbolKind.Constructor: + case SymbolKind.Destructor: +// return new CodeFunction2(m); + throw new NotImplementedException(); + default: + throw new NotSupportedException("Invalid value for SymbolKind"); + } + } + } +} diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeVariable.cs b/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeVariable.cs index 4fd0ed44a2..17772d6a25 100644 --- a/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeVariable.cs +++ b/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/CodeVariable.cs @@ -1,49 +1,43 @@ -//// 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.SharpDevelop.Dom; -// -//namespace ICSharpCode.PackageManagement.EnvDTE -//{ -// public class CodeVariable : CodeElement, global::EnvDTE.CodeVariable -// { -// IField field; -// IDocumentLoader documentLoader; -// -// public CodeVariable() -// { -// } -// -// public CodeVariable(IField field) -// : this(field, new DocumentLoader()) -// { -// } -// -// public CodeVariable(IField field, IDocumentLoader documentLoader) -// : base(field) -// { -// this.field = field; -// this.documentLoader = documentLoader; -// } -// -// public override global::EnvDTE.vsCMElement Kind { -// get { return global::EnvDTE.vsCMElement.vsCMElementVariable; } -// } -// -// public global::EnvDTE.vsCMAccess Access { -// get { return GetAccess(); } -// set { } -// } -// -// public override global::EnvDTE.TextPoint GetStartPoint() -// { -// return new TextPoint(field.GetStartPosition(), documentLoader); -// } -// -// public override global::EnvDTE.TextPoint GetEndPoint() -// { -// return new TextPoint(field.GetEndPosition(), documentLoader); -// } -// } -//} +// 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.SharpDevelop.Dom; + +namespace ICSharpCode.PackageManagement.EnvDTE +{ + public class CodeVariable : CodeElement, global::EnvDTE.CodeVariable + { + readonly IFieldModel field; + readonly IDocumentLoader documentLoader; + + public CodeVariable() + { + } + + public CodeVariable(IFieldModel field, IDocumentLoader documentLoader) + { + this.field = field; + this.documentLoader = documentLoader; + } + + public override global::EnvDTE.vsCMElement Kind { + get { return global::EnvDTE.vsCMElement.vsCMElementVariable; } + } + + public global::EnvDTE.vsCMAccess Access { + get { return field.Accessibility.ToAccess(); } + set { field.Accessibility = value.ToAccessibility(); } + } + + public override global::EnvDTE.TextPoint GetStartPoint() + { + return TextPoint.CreateStartPoint(field.Region, documentLoader); + } + + public override global::EnvDTE.TextPoint GetEndPoint() + { + return TextPoint.CreateEndPoint(field.Region, documentLoader); + } + } +} diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/EditPoint.cs b/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/EditPoint.cs index 45fc3854d3..481e57e8ba 100644 --- a/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/EditPoint.cs +++ b/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/EditPoint.cs @@ -1,36 +1,37 @@ -//// 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.SharpDevelop.Dom; -//using ICSharpCode.SharpDevelop.Dom.Refactoring; -// -//namespace ICSharpCode.PackageManagement.EnvDTE -//{ -// public class EditPoint : TextPoint, global::EnvDTE.EditPoint -// { +// 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; +using ICSharpCode.SharpDevelop.Dom; + +namespace ICSharpCode.PackageManagement.EnvDTE +{ + public class EditPoint : TextPoint, global::EnvDTE.EditPoint + { // IRefactoringDocument document; // IRefactoringDocumentView documentView; -// -// internal EditPoint(FilePosition filePosition, IDocumentLoader documentLoader) -// : base(filePosition, documentLoader) -// { -// } -// -// public void ReplaceText(object pointOrCount, string text, int flags) -// { -// ReplaceText((TextPoint)pointOrCount, text, (global::EnvDTE.vsEPReplaceTextOptions)flags); -// } -// -// void ReplaceText(TextPoint endPoint, string text, global::EnvDTE.vsEPReplaceTextOptions textFormatOptions) -// { + + internal EditPoint(string fileName, TextLocation location, IDocumentLoader documentLoader) + : base(fileName, location, documentLoader) + { + } + + public void ReplaceText(object pointOrCount, string text, int flags) + { + ReplaceText((TextPoint)pointOrCount, text, (global::EnvDTE.vsEPReplaceTextOptions)flags); + } + + void ReplaceText(TextPoint endPoint, string text, global::EnvDTE.vsEPReplaceTextOptions textFormatOptions) + { + throw new NotImplementedException(); // OpenDocument(); // int offset = GetStartOffset(); // int endOffset = GetEndOffset(endPoint); // document.Replace(offset, endOffset - offset, text); // IndentReplacedText(text); -// } -// + } + // void OpenDocument() // { // documentView = DocumentLoader.LoadRefactoringDocumentView(FilePosition.FileName); @@ -64,9 +65,9 @@ // return text.Split('\n').Length; // } // -// public void Insert(string text) -// { -// throw new NotImplementedException(); -// } -// } -//} + public void Insert(string text) + { + throw new NotImplementedException(); + } + } +} diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/Project.cs b/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/Project.cs index 24648fbf3a..6850022a55 100644 --- a/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/Project.cs +++ b/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/Project.cs @@ -99,7 +99,7 @@ namespace ICSharpCode.PackageManagement.EnvDTE string GetProjectType() { - return new ProjectType(this).Type; + return ProjectType.GetProjectType(MSBuildProject); } public virtual string Kind { diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/ProjectKind.cs b/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/ProjectKind.cs index 7c769cc0d7..a0390a9787 100644 --- a/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/ProjectKind.cs +++ b/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/ProjectKind.cs @@ -15,7 +15,7 @@ namespace ICSharpCode.PackageManagement.EnvDTE string GetProjectKind(Project project) { - string type = new ProjectType(project).Type; + string type = ProjectType.GetProjectType(project); if (type == ProjectType.CSharp) { return SD.ProjectTypeGuids.CSharp.ToString(); } else if (type == ProjectType.VBNet.ToString()) { diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/ProjectType.cs b/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/ProjectType.cs index 06012ac303..73d9c33df5 100644 --- a/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/ProjectType.cs +++ b/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/ProjectType.cs @@ -6,32 +6,22 @@ using ICSharpCode.SharpDevelop.Project; namespace ICSharpCode.PackageManagement.EnvDTE { - public class ProjectType + public static class ProjectType { public static readonly string VBNet = "VB.NET"; public static readonly string CSharp = "C#"; - public ProjectType(Project project) + public static string GetProjectType(Project project) { - this.Type = GetProjectType(project); + return GetProjectType(project.MSBuildProject); } - public ProjectType(MSBuildBasedProject project) - : this(new Project(project)) + public static string GetProjectType(IProject project) { - } - - string GetProjectType(Project project) - { - string extension = project.GetLowercaseFileExtension(); - if (extension == ".csproj") { - return CSharp; - } else if (extension == ".vbproj") { + if (project.Language == "VB") return VBNet; - } - return String.Empty; + else + return project.Language; } - - public string Type { get; private set; } } } diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/TextPoint.cs b/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/TextPoint.cs index 8e8f043297..dccef8e8de 100644 --- a/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/TextPoint.cs +++ b/src/AddIns/Misc/PackageManagement/Project/Src/EnvDTE/TextPoint.cs @@ -1,43 +1,47 @@ -//// 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.SharpDevelop.Dom; -// -//namespace ICSharpCode.PackageManagement.EnvDTE -//{ -// public class TextPoint : MarshalByRefObject, global::EnvDTE.TextPoint -// { -// internal TextPoint(FilePosition filePosition, IDocumentLoader documentLoader) -// { -// this.FilePosition = filePosition; -// this.DocumentLoader = documentLoader; -// } -// -// protected IDocumentLoader DocumentLoader { get; private set; } -// protected FilePosition FilePosition { get; private set; } -// -// public int LineCharOffset { -// get { return FilePosition.Column; } -// } -// -// public int Line { -// get { return FilePosition.Line; } -// } -// -// public global::EnvDTE.EditPoint CreateEditPoint() -// { -// return new EditPoint(FilePosition, DocumentLoader); -// } -// -// internal static TextPoint CreateStartPoint(FilePosition position, IDocumentLoader documentLoader) -// { -// return new TextPoint(position, documentLoader); -// } -// -// internal static TextPoint CreateEndPoint(FilePosition position, IDocumentLoader documentLoader) -// { -// return new TextPoint(position, documentLoader); -// } -// } -//} +// 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; +using ICSharpCode.NRefactory.TypeSystem; +using ICSharpCode.SharpDevelop.Dom; + +namespace ICSharpCode.PackageManagement.EnvDTE +{ + public class TextPoint : MarshalByRefObject, global::EnvDTE.TextPoint + { + protected readonly string fileName; + protected readonly TextLocation location; + protected readonly IDocumentLoader documentLoader; + + internal TextPoint(string fileName, TextLocation location, IDocumentLoader documentLoader) + { + this.fileName = fileName; + this.location = location; + this.documentLoader = documentLoader; + } + + public int LineCharOffset { + get { return location.Column; } + } + + public int Line { + get { return location.Line; } + } + + public global::EnvDTE.EditPoint CreateEditPoint() + { + return new EditPoint(fileName, location, documentLoader); + } + + internal static TextPoint CreateStartPoint(DomRegion region, IDocumentLoader documentLoader) + { + return new TextPoint(region.FileName, region.Begin, documentLoader); + } + + internal static TextPoint CreateEndPoint(DomRegion region, IDocumentLoader documentLoader) + { + return new TextPoint(region.FileName, region.End, documentLoader); + } + } +} diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/IDocumentLoader.cs b/src/AddIns/Misc/PackageManagement/Project/Src/IDocumentLoader.cs index 1166550dea..c5ea366850 100644 --- a/src/AddIns/Misc/PackageManagement/Project/Src/IDocumentLoader.cs +++ b/src/AddIns/Misc/PackageManagement/Project/Src/IDocumentLoader.cs @@ -1,15 +1,14 @@ -//// 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.SharpDevelop.Dom.Refactoring; -//using ICSharpCode.SharpDevelop.Editor; -// -//namespace ICSharpCode.PackageManagement -//{ -// public interface IDocumentLoader -// { +// 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.SharpDevelop.Editor; + +namespace ICSharpCode.PackageManagement +{ + public interface IDocumentLoader + { // IRefactoringDocument LoadRefactoringDocument(string fileName); // IRefactoringDocumentView LoadRefactoringDocumentView(string fileName); -// } -//} + } +} diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/IProjectContentExtensions.cs b/src/AddIns/Misc/PackageManagement/Project/Src/IProjectContentExtensions.cs index 44211829fe..840293d7d4 100644 --- a/src/AddIns/Misc/PackageManagement/Project/Src/IProjectContentExtensions.cs +++ b/src/AddIns/Misc/PackageManagement/Project/Src/IProjectContentExtensions.cs @@ -1,24 +1,43 @@ -//// 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.PackageManagement.EnvDTE; -//using ICSharpCode.SharpDevelop.Dom; -//using ICSharpCode.SharpDevelop.Project; -// -//namespace ICSharpCode.PackageManagement -//{ -// public static class IProjectContentExtensions -// { -// public static string GetCodeModelLanguage(this IProjectContent projectContent) -// { -// if (projectContent.Project != null) { -// var projectType = new ProjectType(projectContent.Project as MSBuildBasedProject); -// if (projectType.Type == ProjectType.VBNet) { -// return global::EnvDTE.CodeModelLanguageConstants.vsCMLanguageVB; -// } -// } -// return global::EnvDTE.CodeModelLanguageConstants.vsCMLanguageCSharp; -// } -// } -//} +// 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; +using ICSharpCode.PackageManagement.EnvDTE; +using ICSharpCode.SharpDevelop; +using ICSharpCode.SharpDevelop.Dom; +using ICSharpCode.SharpDevelop.Project; + +namespace ICSharpCode.PackageManagement +{ + public static class NRefactoryExtensionsForEnvDTE + { + public static string GetCodeModelLanguage(this IProject project) + { + if (project != null && project.Language == "VB") { + return global::EnvDTE.CodeModelLanguageConstants.vsCMLanguageVB; + } + return global::EnvDTE.CodeModelLanguageConstants.vsCMLanguageCSharp; + } + + public static global::EnvDTE.vsCMAccess ToAccess(this Accessibility accessiblity) + { + if (accessiblity == Accessibility.Public) + return global::EnvDTE.vsCMAccess.vsCMAccessPublic; + else + return global::EnvDTE.vsCMAccess.vsCMAccessPrivate; + } + + public static Accessibility ToAccessibility(this global::EnvDTE.vsCMAccess access) + { + switch (access) { + case global::EnvDTE.vsCMAccess.vsCMAccessPublic: + return Accessibility.Public; + case global::EnvDTE.vsCMAccess.vsCMAccessPrivate: + return Accessibility.Private; + default: + throw new Exception("Invalid value for vsCMAccess"); + } + } + } +} diff --git a/src/AddIns/Misc/PackageManagement/Project/Src/VisualStudio/FlavoredProject.cs b/src/AddIns/Misc/PackageManagement/Project/Src/VisualStudio/FlavoredProject.cs index 45b2c97aa3..a93835a210 100644 --- a/src/AddIns/Misc/PackageManagement/Project/Src/VisualStudio/FlavoredProject.cs +++ b/src/AddIns/Misc/PackageManagement/Project/Src/VisualStudio/FlavoredProject.cs @@ -33,10 +33,10 @@ namespace Microsoft.VisualStudio.Shell.Flavor string GetProjectTypeGuidsBasedOnProjectFileExtension() { - var projectType = new ProjectType(project); - if (projectType.Type == ProjectType.CSharp) { + var projectType = ProjectType.GetProjectType(project); + if (projectType == ProjectType.CSharp) { return ProjectTypeGuids.CSharp.ToString(); - } else if (projectType.Type == ProjectType.VBNet) { + } else if (projectType == ProjectType.VBNet) { return ProjectTypeGuids.VBNet.ToString(); } return String.Empty; diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/ProjectTests.cs b/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/ProjectTests.cs index 970f29f75f..9ce4e1a081 100644 --- a/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/ProjectTests.cs +++ b/src/AddIns/Misc/PackageManagement/Test/Src/EnvDTE/ProjectTests.cs @@ -22,7 +22,7 @@ namespace PackageManagement.Tests.EnvDTE IPackageManagementProjectService fakeProjectService; IPackageManagementFileService fakeFileService; - void CreateProject(string fileName = @"d:\projects\MyProject\MyProject.csproj") + void CreateProject(string fileName = @"d:\projects\MyProject\MyProject.csproj", string language = "C#") { msbuildProject = ProjectHelper.CreateTestProject(); msbuildProject.FileName = new FileName(fileName); @@ -86,7 +86,7 @@ namespace PackageManagement.Tests.EnvDTE [Test] public void Type_ProjectIsCSharpProject_ReturnsCSharp() { - CreateProject(@"c:\projects\myproject\test.csproj"); + CreateProject(@"c:\projects\myproject\test.csproj", "C#"); string projectType = project.Type; diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/ProjectHelper.cs b/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/ProjectHelper.cs index 260f5f2a24..5fefaf46f7 100644 --- a/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/ProjectHelper.cs +++ b/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/ProjectHelper.cs @@ -102,15 +102,7 @@ namespace PackageManagement.Tests.Helpers public static FileProjectItem GetFile(MSBuildBasedProject project, string fileName) { - foreach (ProjectItem projectItem in project.Items) { - FileProjectItem fileItem = projectItem as FileProjectItem; - if (fileItem != null) { - if (fileItem.FileName == fileName) { - return fileItem; - } - } - } - return null; + return project.FindFile(FileName.Create(fileName)); } public static FileProjectItem GetFileFromInclude(TestableProject project, string include) diff --git a/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/TestableProject.cs b/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/TestableProject.cs index a0957120ec..ef8a51d2d8 100644 --- a/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/TestableProject.cs +++ b/src/AddIns/Misc/PackageManagement/Test/Src/Helpers/TestableProject.cs @@ -28,6 +28,20 @@ namespace PackageManagement.Tests.Helpers { } + public override string Language { + get { + // HACK: unit tests only provide the file extension, but we now need the language + switch (this.FileName.GetExtension().ToLowerInvariant()) { + case ".csproj": + return "C#"; + case ".vbproj": + return "VB"; + default: + return string.Empty; + } + } + } + public override bool IsStartable { get { return isStartable; } } diff --git a/src/Main/Base/Project/Dom/IEntityModel.cs b/src/Main/Base/Project/Dom/IEntityModel.cs index f9d725c41d..2ee42e005f 100644 --- a/src/Main/Base/Project/Dom/IEntityModel.cs +++ b/src/Main/Base/Project/Dom/IEntityModel.cs @@ -19,6 +19,16 @@ namespace ICSharpCode.SharpDevelop.Dom /// string Name { get; } + /// + /// Gets the symbol kind of the entity. + /// + SymbolKind SymbolKind { get; } + + /// + /// Gets/sets the accessibility of the entity. + /// + Accessibility Accessibility { get; set; } + /// /// Gets the parent project that contains this entity. /// May return null if the entity is not part of a project. diff --git a/src/Main/Base/Project/Dom/IEventModel.cs b/src/Main/Base/Project/Dom/IEventModel.cs new file mode 100644 index 0000000000..710b244bab --- /dev/null +++ b/src/Main/Base/Project/Dom/IEventModel.cs @@ -0,0 +1,12 @@ +// 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; + +namespace ICSharpCode.SharpDevelop.Dom +{ + public interface IEventModel : IMemberModel + { + + } +} diff --git a/src/Main/Base/Project/Dom/IFieldModel.cs b/src/Main/Base/Project/Dom/IFieldModel.cs new file mode 100644 index 0000000000..437efb2256 --- /dev/null +++ b/src/Main/Base/Project/Dom/IFieldModel.cs @@ -0,0 +1,12 @@ +// 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; + +namespace ICSharpCode.SharpDevelop.Dom +{ + public interface IFieldModel : IMemberModel + { + + } +} diff --git a/src/Main/Base/Project/Dom/IMethodModel.cs b/src/Main/Base/Project/Dom/IMethodModel.cs new file mode 100644 index 0000000000..ecc11a80ca --- /dev/null +++ b/src/Main/Base/Project/Dom/IMethodModel.cs @@ -0,0 +1,12 @@ +// 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; + +namespace ICSharpCode.SharpDevelop.Dom +{ + public interface IMethodModel : IMemberModel + { + + } +} diff --git a/src/Main/Base/Project/Dom/IPropertyModel.cs b/src/Main/Base/Project/Dom/IPropertyModel.cs new file mode 100644 index 0000000000..0b2ebe4c06 --- /dev/null +++ b/src/Main/Base/Project/Dom/IPropertyModel.cs @@ -0,0 +1,12 @@ +// 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; + +namespace ICSharpCode.SharpDevelop.Dom +{ + public interface IPropertyModel : IMemberModel + { + + } +} diff --git a/src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj b/src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj index 8c5609fba4..8c746ab3de 100644 --- a/src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj +++ b/src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj @@ -85,8 +85,12 @@ + + + + diff --git a/src/Main/SharpDevelop/Dom/MemberModel.cs b/src/Main/SharpDevelop/Dom/MemberModel.cs index f6f513f9a2..a56d00b274 100644 --- a/src/Main/SharpDevelop/Dom/MemberModel.cs +++ b/src/Main/SharpDevelop/Dom/MemberModel.cs @@ -58,6 +58,11 @@ namespace ICSharpCode.SharpDevelop.Dom get { return member.SymbolKind; } } + public Accessibility Accessibility { + get { return member.Accessibility; } + set { throw new NotImplementedException(); } + } + public DomRegion Region { get { return member.Region; } } diff --git a/src/Main/SharpDevelop/Dom/TypeDefinitionModel.cs b/src/Main/SharpDevelop/Dom/TypeDefinitionModel.cs index 025808fb30..9fe6786f8d 100644 --- a/src/Main/SharpDevelop/Dom/TypeDefinitionModel.cs +++ b/src/Main/SharpDevelop/Dom/TypeDefinitionModel.cs @@ -42,6 +42,23 @@ namespace ICSharpCode.SharpDevelop.Dom get { return context.Project; } } + public SymbolKind SymbolKind { + get { return SymbolKind.TypeDefinition; } + } + + public Accessibility Accessibility { + get { + var td = Resolve(); + if (td != null) + return td.Accessibility; + else + return Accessibility.None; + } + set { + throw new NotImplementedException(); + } + } + public FullTypeName FullTypeName { get { return fullTypeName; } }