7 changed files with 377 additions and 3 deletions
@ -0,0 +1,23 @@
@@ -0,0 +1,23 @@
|
||||
// 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.IO; |
||||
using SD = ICSharpCode.SharpDevelop.Project; |
||||
|
||||
namespace ICSharpCode.PackageManagement.EnvDTE |
||||
{ |
||||
public class ProjectItem |
||||
{ |
||||
SD.ProjectItem projectItem; |
||||
|
||||
public ProjectItem(SD.ProjectItem projectItem) |
||||
{ |
||||
this.projectItem = projectItem; |
||||
} |
||||
|
||||
public string Name { |
||||
get { return Path.GetFileName(projectItem.Include); } |
||||
} |
||||
} |
||||
} |
@ -0,0 +1,133 @@
@@ -0,0 +1,133 @@
|
||||
// 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.IO; |
||||
|
||||
using SD = ICSharpCode.SharpDevelop.Project; |
||||
|
||||
namespace ICSharpCode.PackageManagement.EnvDTE |
||||
{ |
||||
public class ProjectItemsInsideDirectory : IEnumerable<ProjectItem> |
||||
{ |
||||
Project project; |
||||
Dictionary<string, string> directoriesIncluded = new Dictionary<string, string>(); |
||||
|
||||
public ProjectItemsInsideDirectory(Project project) |
||||
{ |
||||
this.project = project; |
||||
} |
||||
|
||||
public IEnumerator<ProjectItem> GetEnumerator() |
||||
{ |
||||
foreach (SD.ProjectItem item in project.MSBuildProject.Items) { |
||||
ProjectItem projectItem = ConvertToProjectItem(item); |
||||
if (projectItem != null) { |
||||
yield return projectItem; |
||||
} |
||||
} |
||||
} |
||||
|
||||
ProjectItem ConvertToProjectItem(SD.ProjectItem item) |
||||
{ |
||||
var fileItem = item as SD.FileProjectItem; |
||||
if (fileItem != null) { |
||||
return ConvertFileToProjectItem(fileItem); |
||||
} |
||||
return null; |
||||
} |
||||
|
||||
ProjectItem ConvertFileToProjectItem(SD.FileProjectItem fileItem) |
||||
{ |
||||
if (IsInProjectRootFolder(fileItem)) { |
||||
if (IsDirectory(fileItem)) { |
||||
return CreateDirectoryProjectItemIfDirectoryNotAlreadyIncluded(fileItem); |
||||
} |
||||
return new ProjectItem(fileItem); |
||||
} |
||||
return ConvertDirectoryToProjectItem(fileItem); |
||||
} |
||||
|
||||
bool IsInProjectRootFolder(SD.FileProjectItem item) |
||||
{ |
||||
if (item.IsLink) { |
||||
return !HasDirectoryInPath(item.VirtualName); |
||||
} |
||||
return !HasDirectoryInPath(item.Include); |
||||
} |
||||
|
||||
bool HasDirectoryInPath(string path) |
||||
{ |
||||
string directoryName = Path.GetDirectoryName(path); |
||||
return !String.IsNullOrEmpty(directoryName); |
||||
} |
||||
|
||||
bool IsDirectory(SD.FileProjectItem fileItem) |
||||
{ |
||||
return fileItem.ItemType == SD.ItemType.Folder; |
||||
} |
||||
|
||||
ProjectItem CreateDirectoryProjectItemIfDirectoryNotAlreadyIncluded(SD.FileProjectItem fileItem) |
||||
{ |
||||
string directory = fileItem.Include; |
||||
if (!IsDirectoryIncludedAlready(directory)) { |
||||
AddIncludedDirectory(directory); |
||||
return new ProjectItem(fileItem); |
||||
} |
||||
return null; |
||||
} |
||||
|
||||
ProjectItem ConvertDirectoryToProjectItem(SD.FileProjectItem fileItem) |
||||
{ |
||||
string subDirectoryName = GetFirstSubDirectoryName(fileItem.Include); |
||||
if (IsDirectoryInsideProject(subDirectoryName)) { |
||||
return CreateDirectoryProjectItemIfDirectoryNotAlreadyIncluded(subDirectoryName); |
||||
} |
||||
return null; |
||||
} |
||||
|
||||
ProjectItem CreateDirectoryProjectItemIfDirectoryNotAlreadyIncluded(string subDirectoryName) |
||||
{ |
||||
if (!IsDirectoryIncludedAlready(subDirectoryName)) { |
||||
AddIncludedDirectory(subDirectoryName); |
||||
return CreateDirectoryProjectItem(subDirectoryName); |
||||
} |
||||
return null; |
||||
} |
||||
|
||||
bool IsDirectoryInsideProject(string directoryName) |
||||
{ |
||||
return !directoryName.StartsWith(".."); |
||||
} |
||||
|
||||
bool IsDirectoryIncludedAlready(string directory) |
||||
{ |
||||
return directoriesIncluded.ContainsKey(directory); |
||||
} |
||||
|
||||
void AddIncludedDirectory(string directoryName) |
||||
{ |
||||
directoriesIncluded.Add(directoryName, directoryName); |
||||
} |
||||
|
||||
ProjectItem CreateDirectoryProjectItem(string directoryName) |
||||
{ |
||||
var directoryItem = new SD.FileProjectItem(project.MSBuildProject, SD.ItemType.Folder); |
||||
directoryItem.Include = directoryName; |
||||
return new ProjectItem(directoryItem); |
||||
} |
||||
|
||||
string GetFirstSubDirectoryName(string include) |
||||
{ |
||||
string[] directoryNames = include.Split('\\'); |
||||
return directoryNames[0]; |
||||
} |
||||
|
||||
IEnumerator IEnumerable.GetEnumerator() |
||||
{ |
||||
return GetEnumerator(); |
||||
} |
||||
} |
||||
} |
Loading…
Reference in new issue