Browse Source

Merge f5d7d638ca into 8641fed046

pull/367/merge
sven-n 9 years ago committed by GitHub
parent
commit
c04da5149f
  1. 2
      src/AddIns/Misc/PackageManagement/Project/Src/DocumentNamespaceCreator.cs
  2. 5
      src/AddIns/Misc/SharpRefactoring/Project/Src/ContextActions/AddUsing.cs
  3. 2
      src/AddIns/Misc/SharpRefactoring/Project/Src/MenuItemFactories/ResolveAttribute.cs
  4. 2
      src/AddIns/Misc/SharpRefactoring/Project/Src/MenuItemFactories/ResolveExtensionMethod.cs
  5. 2
      src/Main/Base/Project/Src/Editor/CodeCompletion/CodeCompletionItemProvider.cs
  6. 49
      src/Main/Base/Project/Src/Services/RefactoringService/NamespaceRefactoringService.cs
  7. 10
      src/Main/Base/Project/Src/Services/RefactoringService/RefactoringService.cs

2
src/AddIns/Misc/PackageManagement/Project/Src/DocumentNamespaceCreator.cs

@ -20,7 +20,7 @@ namespace ICSharpCode.PackageManagement @@ -20,7 +20,7 @@ namespace ICSharpCode.PackageManagement
IViewContent view = FileService.OpenFile(compilationUnit.FileName);
var textEditor = view as ITextEditorProvider;
IDocument document = textEditor.TextEditor.Document;
NamespaceRefactoringService.AddUsingDeclaration(compilationUnit, document, newNamespace, false);
NamespaceRefactoringService.AddUsingDeclaration(compilationUnit, document, compilationUnit.UsingScope, newNamespace, false);
}
}
}

5
src/AddIns/Misc/SharpRefactoring/Project/Src/ContextActions/AddUsing.cs

@ -51,8 +51,9 @@ namespace SharpRefactoring.ContextActions @@ -51,8 +51,9 @@ namespace SharpRefactoring.ContextActions
foreach (IProjectContent content in pc.ThreadSafeGetReferencedContents())
SearchAllExtensionMethodsWithName(results, content, rr.CallName);
var compilationUnit = context.CurrentParseInformation.CompilationUnit;
foreach (IClass c in results) {
yield return new RefactoringService.AddUsingAction(context.CurrentParseInformation.CompilationUnit, context.Editor, c.Namespace);
yield return new RefactoringService.AddUsingAction(compilationUnit, context.Editor, c.Namespace, compilationUnit.UsingScope);
}
}
@ -92,7 +93,7 @@ namespace SharpRefactoring.ContextActions @@ -92,7 +93,7 @@ namespace SharpRefactoring.ContextActions
}
foreach (IClass c in results) {
yield return new RefactoringService.AddUsingAction(unit, context.Editor, c.Namespace);
yield return new RefactoringService.AddUsingAction(unit, context.Editor, c.Namespace, unit.UsingScope);
}
}

2
src/AddIns/Misc/SharpRefactoring/Project/Src/MenuItemFactories/ResolveAttribute.cs

@ -73,7 +73,7 @@ namespace SharpRefactoring @@ -73,7 +73,7 @@ namespace SharpRefactoring
subItem.Icon = ClassBrowserIconService.Namespace.CreateImage();
item.Items.Add(subItem);
subItem.Click += delegate {
NamespaceRefactoringService.AddUsingDeclaration(unit, context.Editor.Document, newNamespace, true);
NamespaceRefactoringService.AddUsingDeclaration(unit, context.Editor.Document, unit.UsingScope, newNamespace, true);
ParserService.BeginParse(context.Editor.FileName, context.Editor.Document);
};
}

2
src/AddIns/Misc/SharpRefactoring/Project/Src/MenuItemFactories/ResolveExtensionMethod.cs

@ -51,7 +51,7 @@ namespace SharpRefactoring @@ -51,7 +51,7 @@ namespace SharpRefactoring
subItem.Icon = ClassBrowserIconService.Namespace.CreateImage();
item.Items.Add(subItem);
subItem.Click += delegate {
NamespaceRefactoringService.AddUsingDeclaration(context.CompilationUnit, context.Editor.Document, newNamespace, true);
NamespaceRefactoringService.AddUsingDeclaration(context.CompilationUnit, context.Editor.Document, context.CompilationUnit.UsingScope, newNamespace, true);
ParserService.BeginParse(context.Editor.FileName, context.Editor.Document);
};
}

2
src/Main/Base/Project/Src/Editor/CodeCompletion/CodeCompletionItemProvider.cs

@ -292,7 +292,7 @@ namespace ICSharpCode.SharpDevelop.Editor.CodeCompletion @@ -292,7 +292,7 @@ namespace ICSharpCode.SharpDevelop.Editor.CodeCompletion
if (addUsing && nameResult != null && nameResult.CallingClass != null) {
var cu = nameResult.CallingClass.CompilationUnit;
NamespaceRefactoringService.AddUsingDeclaration(cu, document, selectedClass.Namespace, false);
NamespaceRefactoringService.AddUsingDeclaration(cu, document, nameResult.CallingClass.UsingScope, selectedClass.Namespace, false);
ParserService.BeginParse(editor.FileName, document);
}
} else {

49
src/Main/Base/Project/Src/Services/RefactoringService/NamespaceRefactoringService.cs

@ -1,12 +1,13 @@ @@ -1,12 +1,13 @@
// 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 ICSharpCode.SharpDevelop.Editor;
using System;
using System.Collections.Generic;
using System.Linq;
using ICSharpCode.SharpDevelop.Dom;
using ICSharpCode.SharpDevelop.Dom.Refactoring;
using ICSharpCode.SharpDevelop.Editor;
namespace ICSharpCode.SharpDevelop.Refactoring
{
@ -37,39 +38,35 @@ namespace ICSharpCode.SharpDevelop.Refactoring @@ -37,39 +38,35 @@ namespace ICSharpCode.SharpDevelop.Refactoring
return 0;
}
public static void ManageUsings(Gui.IProgressMonitor progressMonitor, string fileName, IDocument document, bool sort, bool removedUnused)
public static void ManageUsings(Gui.IProgressMonitor progressMonitor, string fileName, IDocument document, bool sort, bool removeUnused)
{
ParseInformation info = ParserService.ParseFile(fileName, document);
if (info == null) return;
ICompilationUnit cu = info.CompilationUnit;
List<IUsing> newUsings = new List<IUsing>(cu.UsingScope.Usings);
var compilationUnit = info.CompilationUnit;
IEnumerable<IUsing> unusedDeclarations = removeUnused ? compilationUnit.ProjectContent.Language.RefactoringProvider.FindUnusedUsingDeclarations(Gui.DomProgressMonitor.Wrap(progressMonitor), fileName, document.Text, compilationUnit) : Enumerable.Empty<IUsing>();
var refactoringDocument = new RefactoringDocumentAdapter(document);
var codeGenerator = compilationUnit.ProjectContent.Language.CodeGenerator;
ManageUsingsForScope(compilationUnit.UsingScope, sort, unusedDeclarations, codeGenerator, refactoringDocument);
}
private static void ManageUsingsForScope(IUsingScope usingScope, bool sort, IEnumerable<IUsing> unusedDeclarations, CodeGenerator codeGenerator, IRefactoringDocument refactoringDocument)
{
List<IUsing> newUsings = new List<IUsing>(usingScope.Usings);
if (sort) {
newUsings.Sort(CompareUsings);
}
if (removedUnused) {
IList<IUsing> decl = cu.ProjectContent.Language.RefactoringProvider.FindUnusedUsingDeclarations(Gui.DomProgressMonitor.Wrap(progressMonitor), fileName, document.Text, cu);
if (decl != null && decl.Count > 0) {
foreach (IUsing u in decl) {
string ns = null;
for (int i = 0; i < u.Usings.Count; i++) {
ns = u.Usings[i];
if (ns == "System") break;
}
if (ns != "System") { // never remove "using System;"
newUsings.Remove(u);
}
}
}
unusedDeclarations.Where(u => !u.Usings.Any(usingName => usingName == "System")).ForEach(u => newUsings.Remove(u));
foreach(var childScope in usingScope.ChildScopes) {
ManageUsingsForScope(childScope, sort, unusedDeclarations, codeGenerator, refactoringDocument);
}
// put empty line after last System namespace
if (sort) {
PutEmptyLineAfterLastSystemNamespace(newUsings);
}
cu.ProjectContent.Language.CodeGenerator.ReplaceUsings(new RefactoringDocumentAdapter(document), cu.UsingScope.Usings, newUsings);
codeGenerator.ReplaceUsings(refactoringDocument, usingScope.Usings, newUsings);
}
static void PutEmptyLineAfterLastSystemNamespace(List<IUsing> newUsings)
@ -90,7 +87,7 @@ namespace ICSharpCode.SharpDevelop.Refactoring @@ -90,7 +87,7 @@ namespace ICSharpCode.SharpDevelop.Refactoring
}
}
public static void AddUsingDeclaration(ICompilationUnit cu, IDocument document, string newNamespace, bool sortExistingUsings)
public static void AddUsingDeclaration(ICompilationUnit cu, IDocument document, IUsingScope usingScope, string newNamespace, bool sortExistingUsings)
{
if (cu == null)
throw new ArgumentNullException("cu");
@ -106,7 +103,11 @@ namespace ICSharpCode.SharpDevelop.Refactoring @@ -106,7 +103,11 @@ namespace ICSharpCode.SharpDevelop.Refactoring
IUsing newUsingDecl = new DefaultUsing(cu.ProjectContent);
newUsingDecl.Usings.Add(newNamespace);
List<IUsing> newUsings = new List<IUsing>(cu.UsingScope.Usings);
while (!usingScope.Usings.Any() && usingScope.Parent != null) {
usingScope = usingScope.Parent;
}
List<IUsing> newUsings = new List<IUsing>(usingScope.Usings);
if (sortExistingUsings) {
newUsings.Sort(CompareUsings);
}
@ -124,7 +125,7 @@ namespace ICSharpCode.SharpDevelop.Refactoring @@ -124,7 +125,7 @@ namespace ICSharpCode.SharpDevelop.Refactoring
if (sortExistingUsings) {
PutEmptyLineAfterLastSystemNamespace(newUsings);
}
cu.ProjectContent.Language.CodeGenerator.ReplaceUsings(new RefactoringDocumentAdapter(document), cu.UsingScope.Usings, newUsings);
cu.ProjectContent.Language.CodeGenerator.ReplaceUsings(new RefactoringDocumentAdapter(document), usingScope.Usings, newUsings);
}
}
}

10
src/Main/Base/Project/Src/Services/RefactoringService/RefactoringService.cs

@ -648,7 +648,7 @@ namespace ICSharpCode.SharpDevelop.Refactoring @@ -648,7 +648,7 @@ namespace ICSharpCode.SharpDevelop.Refactoring
}
foreach (IClass c in searchResults) {
string newNamespace = c.Namespace;
yield return new AddUsingAction(callingClass.CompilationUnit, editor, newNamespace);
yield return new AddUsingAction(callingClass.CompilationUnit, editor, newNamespace, callingClass.UsingScope);
}
}
@ -666,8 +666,9 @@ namespace ICSharpCode.SharpDevelop.Refactoring @@ -666,8 +666,9 @@ namespace ICSharpCode.SharpDevelop.Refactoring
public ICompilationUnit CompilationUnit { get; private set; }
public ITextEditor Editor { get; private set; }
public string NewNamespace { get; private set; }
public IUsingScope UsingScope { get; private set; }
public AddUsingAction(ICompilationUnit compilationUnit, ITextEditor editor, string newNamespace)
public AddUsingAction(ICompilationUnit compilationUnit, ITextEditor editor, string newNamespace, IUsingScope usingScope)
{
if (compilationUnit == null)
throw new ArgumentNullException("compilationUnit");
@ -675,14 +676,17 @@ namespace ICSharpCode.SharpDevelop.Refactoring @@ -675,14 +676,17 @@ namespace ICSharpCode.SharpDevelop.Refactoring
throw new ArgumentNullException("editor");
if (newNamespace == null)
throw new ArgumentNullException("newNamespace");
if (usingScope == null)
throw new ArgumentNullException("usingScope");
this.CompilationUnit = compilationUnit;
this.Editor = editor;
this.NewNamespace = newNamespace;
this.UsingScope = usingScope;
}
public void Execute()
{
NamespaceRefactoringService.AddUsingDeclaration(CompilationUnit, Editor.Document, NewNamespace, true);
NamespaceRefactoringService.AddUsingDeclaration(CompilationUnit, Editor.Document, UsingScope, NewNamespace, true);
ParserService.BeginParse(Editor.FileName, Editor.Document);
}

Loading…
Cancel
Save