Browse Source

New feature: Removed unused "using" statements.

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@1389 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
shortcuts
Daniel Grunwald 20 years ago
parent
commit
af70e15281
  1. 12
      AddIns/ICSharpCode.SharpDevelop.addin
  2. 7
      src/AddIns/BackendBindings/Boo/BooBinding/Project/Src/CodeCompletion/BooResolver.cs
  3. 8
      src/AddIns/BackendBindings/Boo/BooBinding/Project/Src/CodeCompletion/ResolveVisitor.cs
  4. 19
      src/AddIns/DisplayBindings/FormsDesigner/Project/Src/DesignerLoader/NRefactoryDesignerLoader.cs
  5. 12
      src/AddIns/Misc/SubversionAddIn/Project/Src/Commands/AutostartCommands.cs
  6. 7
      src/Libraries/NRefactory/Project/Src/Parser/AST/TypeReference.cs
  7. 7
      src/Main/Base/Project/ICSharpCode.SharpDevelop.csproj
  8. 2
      src/Main/Base/Project/Src/Dom/ClassFinder.cs
  9. 2
      src/Main/Base/Project/Src/Dom/Implementations/SearchClassReturnType.cs
  10. 18
      src/Main/Base/Project/Src/Dom/LanguageProperties.cs
  11. 5
      src/Main/Base/Project/Src/Dom/NRefactoryResolver/NRefactoryResolver.cs
  12. 7
      src/Main/Base/Project/Src/Dom/NRefactoryResolver/TypeVisitor.cs
  13. 6
      src/Main/Base/Project/Src/Dom/ResolveResult.cs
  14. 74
      src/Main/Base/Project/Src/Services/ParserService/DefaultProjectContent.cs
  15. 80
      src/Main/Base/Project/Src/Services/ParserService/IProjectContent.cs
  16. 20
      src/Main/Base/Project/Src/Services/ParserService/ParserService.cs
  17. 83
      src/Main/Base/Project/Src/Services/RefactoringService/CodeGenerator.cs
  18. 9
      src/Main/Base/Project/Src/Services/RefactoringService/FindReferencesAndRenameHelper.cs
  19. 1
      src/Main/Base/Project/Src/Services/RefactoringService/LocalVariableRefactoring.cs
  20. 2
      src/Main/Base/Project/Src/Services/RefactoringService/NRefactoryCodeGenerator.cs
  21. 129
      src/Main/Base/Project/Src/Services/RefactoringService/NRefactoryRefactoringProvider.cs
  22. 16
      src/Main/Base/Project/Src/Services/RefactoringService/NamespaceRefactoring.cs
  23. 70
      src/Main/Base/Project/Src/Services/RefactoringService/NamespaceRefactoringService.cs
  24. 87
      src/Main/Base/Project/Src/Services/RefactoringService/RefactorMenu.cs
  25. 34
      src/Main/Base/Project/Src/Services/RefactoringService/RefactoringProvider.cs
  26. 7
      src/Main/Base/Project/Src/Services/RefactoringService/RefactoringService.cs
  27. 1
      src/Main/Base/Project/Src/Services/RefactoringService/Reference.cs
  28. 0
      src/Main/Base/Project/Src/TextEditor/Commands/CodeGenerators/CodeGeneratorBase.cs
  29. 11
      src/Main/StartUp/Project/SharpDevelopMain.cs

12
AddIns/ICSharpCode.SharpDevelop.addin

@ -1260,6 +1260,16 @@
class = "ICSharpCode.SharpDevelop.Commands.ToggleFullscreenCommand" /> class = "ICSharpCode.SharpDevelop.Commands.ToggleFullscreenCommand" />
</MenuItem> <!-- end VIEW menu --> </MenuItem> <!-- end VIEW menu -->
<Condition name="RefactoringProviderSupports" supports="*">
<MenuItem id = "Refactor" label = "${res:XML.MainMenu.RefactorMenu}" type="Menu">
<Condition name="RefactoringProviderSupports" supports="FindUnusedUsingDeclarations">
<MenuItem id = "RemoveUnusedUsings"
label = "Removed unused import statements"
class = "ICSharpCode.SharpDevelop.Refactoring.RemoveUnusedUsingsCommand" />
</Condition>
</MenuItem>
</Condition> <!-- end REFACTOR menu -->
<Condition name = "ProjectActive" activeproject="*"> <Condition name = "ProjectActive" activeproject="*">
<MenuItem id = "Project" label = "${res:XML.MainMenu.ProjectMenu}" type="Menu"> <MenuItem id = "Project" label = "${res:XML.MainMenu.ProjectMenu}" type="Menu">
<MenuItem id = "ProjectAddMenu" label = "${res:ProjectComponent.ContextMenu.AddMenu}" type = "Menu" > <MenuItem id = "ProjectAddMenu" label = "${res:ProjectComponent.ContextMenu.AddMenu}" type = "Menu" >
@ -1339,7 +1349,7 @@
<MenuItem id = "ConfigurationBuilder" type = "Builder" class = "ICSharpCode.SharpDevelop.Project.Commands.SetConfigurationMenuBuilder"/> <MenuItem id = "ConfigurationBuilder" type = "Builder" class = "ICSharpCode.SharpDevelop.Project.Commands.SetConfigurationMenuBuilder"/>
</MenuItem> </MenuItem>
</ComplexCondition> </ComplexCondition>
</MenuItem> <!-- end RUN menu --> </MenuItem> <!-- end BUILD menu -->
<MenuItem id = "Debug" label = "${res:XML.MainMenu.DebugMenu}" type="Menu"> <MenuItem id = "Debug" label = "${res:XML.MainMenu.DebugMenu}" type="Menu">
<ComplexCondition action="Disable"> <ComplexCondition action="Disable">

7
src/AddIns/BackendBindings/Boo/BooBinding/Project/Src/CodeCompletion/BooResolver.cs

@ -10,10 +10,7 @@ using System.Collections;
using System.Collections.Generic; using System.Collections.Generic;
using ICSharpCode.Core; using ICSharpCode.Core;
using ICSharpCode.SharpDevelop.Dom; using ICSharpCode.SharpDevelop.Dom;
using Boo.Lang.Compiler;
using AST = Boo.Lang.Compiler.Ast; using AST = Boo.Lang.Compiler.Ast;
using Boo.Lang.Compiler.IO;
using Boo.Lang.Compiler.Steps;
using NRResolver = ICSharpCode.SharpDevelop.Dom.NRefactoryResolver.NRefactoryResolver; using NRResolver = ICSharpCode.SharpDevelop.Dom.NRefactoryResolver.NRefactoryResolver;
namespace Grunwald.BooBinding.CodeCompletion namespace Grunwald.BooBinding.CodeCompletion
@ -217,10 +214,10 @@ namespace Grunwald.BooBinding.CodeCompletion
if (mie != null) if (mie != null)
expr = mie.Target; expr = mie.Target;
string name = expr.ToCodeString(); string name = expr.ToCodeString();
IReturnType rt = pc.SearchType(name, 0, callingClass, cu, caretLine, caretColumn); IReturnType rt = pc.SearchType(new SearchTypeRequest(name, 0, callingClass, cu, caretLine, caretColumn)).Result;
if (rt != null && rt.GetUnderlyingClass() != null) if (rt != null && rt.GetUnderlyingClass() != null)
return new TypeResolveResult(callingClass, callingMember, rt); return new TypeResolveResult(callingClass, callingMember, rt);
rt = pc.SearchType(name + "Attribute", 0, callingClass, cu, caretLine, caretColumn); rt = pc.SearchType(new SearchTypeRequest(name + "Attribute", 0, callingClass, cu, caretLine, caretColumn)).Result;
if (rt != null && rt.GetUnderlyingClass() != null) if (rt != null && rt.GetUnderlyingClass() != null)
return new TypeResolveResult(callingClass, callingMember, rt); return new TypeResolveResult(callingClass, callingMember, rt);
if (BooProject.BooCompilerPC != null) { if (BooProject.BooCompilerPC != null) {

8
src/AddIns/BackendBindings/Boo/BooBinding/Project/Src/CodeCompletion/ResolveVisitor.cs

@ -9,9 +9,9 @@ using System;
using System.Collections; using System.Collections;
using System.Collections.Generic; using System.Collections.Generic;
using System.Text; using System.Text;
using Boo.Lang.Compiler.Ast;
using ICSharpCode.Core; using ICSharpCode.Core;
using ICSharpCode.SharpDevelop.Dom; using ICSharpCode.SharpDevelop.Dom;
using Boo.Lang.Compiler.Ast;
namespace Grunwald.BooBinding.CodeCompletion namespace Grunwald.BooBinding.CodeCompletion
{ {
@ -110,7 +110,7 @@ namespace Grunwald.BooBinding.CodeCompletion
ResolveResult oldResult = resolveResult; ResolveResult oldResult = resolveResult;
ClearResult(); ClearResult();
// Try to resolve as type: // Try to resolve as type:
IReturnType t = projectContent.SearchType(identifier, 0, callingClass, cu, resolver.CaretLine, resolver.CaretColumn); IReturnType t = projectContent.SearchType(new SearchTypeRequest(identifier, 0, callingClass, cu, resolver.CaretLine, resolver.CaretColumn)).Result;
if (t != null) { if (t != null) {
MakeTypeResult(t); MakeTypeResult(t);
} else { } else {
@ -253,8 +253,8 @@ namespace Grunwald.BooBinding.CodeCompletion
LoggingService.Warn("Unknown expression in GenericReferenceExpression: " + expr); LoggingService.Warn("Unknown expression in GenericReferenceExpression: " + expr);
} }
} }
IReturnType rt = projectContent.SearchType(name.ToString(), typeArguments.Count, callingClass, IReturnType rt = projectContent.SearchType(new SearchTypeRequest(name.ToString(), typeArguments.Count, callingClass,
cu, resolver.CaretLine, resolver.CaretColumn); cu, resolver.CaretLine, resolver.CaretColumn)).Result;
return new ConstructedReturnType(rt, typeArguments); return new ConstructedReturnType(rt, typeArguments);
} }
#endregion #endregion

19
src/AddIns/DisplayBindings/FormsDesigner/Project/Src/DesignerLoader/NRefactoryDesignerLoader.cs

@ -6,26 +6,21 @@
// </file> // </file>
using System; using System;
using System.CodeDom;
using System.CodeDom.Compiler;
using System.Collections; using System.Collections;
using System.Collections.Generic; using System.Collections.Generic;
using System.Drawing;
using System.IO;
using System.ComponentModel.Design; using System.ComponentModel.Design;
using System.CodeDom;
using System.CodeDom.Compiler;
using System.ComponentModel.Design.Serialization; using System.ComponentModel.Design.Serialization;
using System.Drawing;
using System.IO;
using System.Windows.Forms; using System.Windows.Forms;
using System.Windows.Forms.Design;
using ICSharpCode.Core; using ICSharpCode.Core;
using ICSharpCode.TextEditor;
using ICSharpCode.TextEditor.Document;
using ICSharpCode.SharpDevelop.Dom;
using ICSharpCode.FormsDesigner.Services;
using ICSharpCode.NRefactory.Parser; using ICSharpCode.NRefactory.Parser;
using ICSharpCode.NRefactory.Parser.AST; using ICSharpCode.NRefactory.Parser.AST;
using ICSharpCode.NRefactory.PrettyPrinter; using ICSharpCode.SharpDevelop.Dom;
using ICSharpCode.TextEditor;
namespace ICSharpCode.FormsDesigner namespace ICSharpCode.FormsDesigner
{ {
@ -314,7 +309,7 @@ namespace ICSharpCode.FormsDesigner
FixTypeReference(tref, location, domCu); FixTypeReference(tref, location, domCu);
} }
ICSharpCode.SharpDevelop.Dom.IClass curType = domCu.GetInnermostClass(location.Y, location.X); ICSharpCode.SharpDevelop.Dom.IClass curType = domCu.GetInnermostClass(location.Y, location.X);
ICSharpCode.SharpDevelop.Dom.IReturnType rt = domCu.ProjectContent.SearchType(type.Type, type.GenericTypes.Count, curType, domCu, location.Y, location.X); ICSharpCode.SharpDevelop.Dom.IReturnType rt = domCu.ProjectContent.SearchType(new SearchTypeRequest(type.Type, type.GenericTypes.Count, curType, domCu, location.Y, location.X)).Result;
if (rt != null) { if (rt != null) {
type.Type = rt.FullyQualifiedName; type.Type = rt.FullyQualifiedName;
} }

12
src/AddIns/Misc/SubversionAddIn/Project/Src/Commands/AutostartCommands.cs

@ -6,22 +6,11 @@
// </file> // </file>
using System; using System;
using System.Text;
using System.IO; using System.IO;
using System.Threading;
using System.Drawing;
using System.Drawing.Printing;
using System.Collections;
using System.ComponentModel;
using System.Windows.Forms; using System.Windows.Forms;
using System.Diagnostics;
using ICSharpCode.Core; using ICSharpCode.Core;
using ICSharpCode.SharpDevelop;
using ICSharpCode.SharpDevelop.Project; using ICSharpCode.SharpDevelop.Project;
using ICSharpCode.SharpDevelop.Gui;
using NSvn.Common;
using NSvn.Core; using NSvn.Core;
namespace ICSharpCode.Svn.Commands namespace ICSharpCode.Svn.Commands
@ -104,6 +93,7 @@ namespace ICSharpCode.Svn.Commands
switch (status.TextStatus) { switch (status.TextStatus) {
case StatusKind.None: case StatusKind.None:
case StatusKind.Unversioned: case StatusKind.Unversioned:
case StatusKind.Deleted:
return; // nothing to do return; // nothing to do
case StatusKind.Normal: case StatusKind.Normal:
// remove without problem // remove without problem

7
src/Libraries/NRefactory/Project/Src/Parser/AST/TypeReference.cs

@ -6,11 +6,10 @@
// </file> // </file>
using System; using System;
using System.Diagnostics;
using System.Collections;
using System.Collections.Generic; using System.Collections.Generic;
using System.Text; using System.Diagnostics;
using System.Globalization; using System.Globalization;
using System.Text;
namespace ICSharpCode.NRefactory.Parser.AST namespace ICSharpCode.NRefactory.Parser.AST
{ {
@ -20,7 +19,7 @@ namespace ICSharpCode.NRefactory.Parser.AST
string systemType = ""; string systemType = "";
int pointerNestingLevel = 0; int pointerNestingLevel = 0;
int[] rankSpecifier = null; int[] rankSpecifier = null;
List<TypeReference> genericTypes = new List<TypeReference>(1); List<TypeReference> genericTypes = new List<TypeReference>();
bool isGlobal = false; bool isGlobal = false;
static Dictionary<string, string> types = new Dictionary<string, string>(); static Dictionary<string, string> types = new Dictionary<string, string>();

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

@ -502,7 +502,7 @@
<Compile Include="Src\TextEditor\Commands\CodeGenerators\AbstractClassImplementorCodeGenerator.cs" /> <Compile Include="Src\TextEditor\Commands\CodeGenerators\AbstractClassImplementorCodeGenerator.cs" />
<Compile Include="Src\TextEditor\Commands\CodeGenerators\AbstractFieldCodeGenerator.cs" /> <Compile Include="Src\TextEditor\Commands\CodeGenerators\AbstractFieldCodeGenerator.cs" />
<Compile Include="Src\TextEditor\Commands\CodeGenerators\AbstractPropertyCodeGenerator.cs" /> <Compile Include="Src\TextEditor\Commands\CodeGenerators\AbstractPropertyCodeGenerator.cs" />
<Compile Include="Src\TextEditor\Commands\CodeGenerators\CodeGenerator.cs" /> <Compile Include="Src\TextEditor\Commands\CodeGenerators\CodeGeneratorBase.cs" />
<Compile Include="Src\TextEditor\Commands\CodeGenerators\ConstructorCodeGenerator.cs" /> <Compile Include="Src\TextEditor\Commands\CodeGenerators\ConstructorCodeGenerator.cs" />
<Compile Include="Src\TextEditor\Commands\CodeGenerators\EqualsCodeGenerator.cs" /> <Compile Include="Src\TextEditor\Commands\CodeGenerators\EqualsCodeGenerator.cs" />
<Compile Include="Src\TextEditor\Commands\CodeGenerators\GetterAndSetterCodeGenerator.cs" /> <Compile Include="Src\TextEditor\Commands\CodeGenerators\GetterAndSetterCodeGenerator.cs" />
@ -765,7 +765,10 @@
<Compile Include="Src\Gui\Pads\ClassBrowser\NodeBuilder\IClassNodeBuilder.cs" /> <Compile Include="Src\Gui\Pads\ClassBrowser\NodeBuilder\IClassNodeBuilder.cs" />
<Compile Include="Src\Gui\Pads\ClassBrowser\NodeBuilder\IProjectNodeBuilder.cs" /> <Compile Include="Src\Gui\Pads\ClassBrowser\NodeBuilder\IProjectNodeBuilder.cs" />
<Compile Include="Src\TextEditor\SearchAndReplace\Engine\TextSelection.cs" /> <Compile Include="Src\TextEditor\SearchAndReplace\Engine\TextSelection.cs" />
<Compile Include="Src\Services\RefactoringService\NamespaceRefactoring.cs" /> <Compile Include="Src\Services\RefactoringService\RefactoringProvider.cs" />
<Compile Include="Src\Services\RefactoringService\NRefactoryRefactoringProvider.cs" />
<Compile Include="Src\Services\RefactoringService\NamespaceRefactoringService.cs" />
<Compile Include="Src\Services\RefactoringService\RefactorMenu.cs" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ProjectReference Include="..\..\..\Libraries\DockPanel_Src\WinFormsUI\WinFormsUI.csproj"> <ProjectReference Include="..\..\..\Libraries\DockPanel_Src\WinFormsUI\WinFormsUI.csproj">

2
src/Main/Base/Project/Src/Dom/ClassFinder.cs

@ -87,7 +87,7 @@ namespace ICSharpCode.SharpDevelop.Dom
public IReturnType SearchType(string name, int typeParameterCount) public IReturnType SearchType(string name, int typeParameterCount)
{ {
return projectContent.SearchType(name, typeParameterCount, callingClass, cu, caretLine, caretColumn); return projectContent.SearchType(new SearchTypeRequest(name, typeParameterCount, callingClass, cu, caretLine, caretColumn)).Result;
} }
public string SearchNamespace(string name) public string SearchNamespace(string name)

2
src/Main/Base/Project/Src/Dom/Implementations/SearchClassReturnType.cs

@ -130,7 +130,7 @@ namespace ICSharpCode.SharpDevelop.Dom
return type; return type;
try { try {
isSearching = true; isSearching = true;
type = pc.SearchType(name, typeParameterCount, declaringClass, caretLine, caretColumn); type = pc.SearchType(new SearchTypeRequest(name, typeParameterCount, declaringClass, caretLine, caretColumn)).Result;
cache[this] = type; cache[this] = type;
return type; return type;
} finally { } finally {

18
src/Main/Base/Project/Src/Dom/LanguageProperties.cs

@ -38,6 +38,12 @@ namespace ICSharpCode.SharpDevelop.Dom
} }
} }
public virtual RefactoringProvider RefactoringProvider {
get {
return RefactoringProvider.DummyProvider;
}
}
/// <summary> /// <summary>
/// Gets if the language supports calling C# 3-style extension methods /// Gets if the language supports calling C# 3-style extension methods
/// (first parameter = instance parameter) /// (first parameter = instance parameter)
@ -154,6 +160,12 @@ namespace ICSharpCode.SharpDevelop.Dom
{ {
public CSharpProperties() : base(StringComparer.InvariantCulture, CSharpCodeGenerator.Instance) {} public CSharpProperties() : base(StringComparer.InvariantCulture, CSharpCodeGenerator.Instance) {}
public override RefactoringProvider RefactoringProvider {
get {
return NRefactoryRefactoringProvider.NRefactoryProviderInstance;
}
}
public override string ToString() public override string ToString()
{ {
return "[LanguageProperties: C#]"; return "[LanguageProperties: C#]";
@ -230,6 +242,12 @@ namespace ICSharpCode.SharpDevelop.Dom
return u; return u;
} }
public override RefactoringProvider RefactoringProvider {
get {
return NRefactoryRefactoringProvider.NRefactoryProviderInstance;
}
}
public override string ToString() public override string ToString()
{ {
return "[LanguageProperties: VB.NET]"; return "[LanguageProperties: VB.NET]";

5
src/Main/Base/Project/Src/Dom/NRefactoryResolver/NRefactoryResolver.cs

@ -11,9 +11,8 @@ using System.Collections.Generic;
using System.Drawing; using System.Drawing;
using ICSharpCode.Core; using ICSharpCode.Core;
using ICSharpCode.SharpDevelop.Dom;
using ICSharpCode.NRefactory.Parser.AST;
using ICSharpCode.NRefactory.Parser; using ICSharpCode.NRefactory.Parser;
using ICSharpCode.NRefactory.Parser.AST;
namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver
{ {
@ -783,7 +782,7 @@ namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver
public IReturnType SearchType(string name) public IReturnType SearchType(string name)
{ {
return projectContent.SearchType(name, 0, callingClass, cu, caretLine, caretColumn); return projectContent.SearchType(new SearchTypeRequest(name, 0, callingClass, cu, caretLine, caretColumn)).Result;
} }
#region Helper for TypeVisitor #region Helper for TypeVisitor

7
src/Main/Base/Project/Src/Dom/NRefactoryResolver/TypeVisitor.cs

@ -8,15 +8,12 @@
// created on 22.08.2003 at 19:02 // created on 22.08.2003 at 19:02
using System; using System;
using System.Collections;
using System.Collections.Generic; using System.Collections.Generic;
using ICSharpCode.Core;
using ICSharpCode.NRefactory.Parser; using ICSharpCode.NRefactory.Parser;
using ICSharpCode.NRefactory.Parser.AST; using ICSharpCode.NRefactory.Parser.AST;
using ICSharpCode.SharpDevelop.Dom;
using ICSharpCode.Core;
namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver
{ {
public class TypeVisitor : AbstractAstVisitor public class TypeVisitor : AbstractAstVisitor
@ -509,7 +506,7 @@ namespace ICSharpCode.SharpDevelop.Dom.NRefactoryResolver
c = projectContent.GetClass(reference.SystemType, typeParameterCount); c = projectContent.GetClass(reference.SystemType, typeParameterCount);
t = (c != null) ? c.DefaultReturnType : null; t = (c != null) ? c.DefaultReturnType : null;
} else { } else {
t = projectContent.SearchType(reference.SystemType, typeParameterCount, callingClass, caretLine, caretColumn); t = projectContent.SearchType(new SearchTypeRequest(reference.SystemType, typeParameterCount, callingClass, caretLine, caretColumn)).Result;
} }
if (t == null) { if (t == null) {
if (reference.GenericTypes.Count == 0 && !reference.IsArrayType) { if (reference.GenericTypes.Count == 0 && !reference.IsArrayType) {

6
src/Main/Base/Project/Src/Dom/ResolveResult.cs

@ -10,10 +10,8 @@ using System.Collections;
using System.Collections.Generic; using System.Collections.Generic;
using System.Drawing; using System.Drawing;
using ICSharpCode.SharpDevelop.Project;
using ICSharpCode.Core; using ICSharpCode.Core;
namespace ICSharpCode.SharpDevelop.Dom namespace ICSharpCode.SharpDevelop.Dom
{ {
#region ResolveResult #region ResolveResult
@ -32,8 +30,6 @@ namespace ICSharpCode.SharpDevelop.Dom
public ResolveResult(IClass callingClass, IMember callingMember, IReturnType resolvedType) public ResolveResult(IClass callingClass, IMember callingMember, IReturnType resolvedType)
{ {
// if (callingMember != null && callingMember.DeclaringType != callingClass)
// throw new ArgumentException("callingMember.DeclaringType must be equal to callingClass");
this.callingClass = callingClass; this.callingClass = callingClass;
this.callingMember = callingMember; this.callingMember = callingMember;
this.resolvedType = resolvedType; this.resolvedType = resolvedType;
@ -498,7 +494,7 @@ namespace ICSharpCode.SharpDevelop.Dom
return GetDefinitionPosition(resolvedMember); return GetDefinitionPosition(resolvedMember);
} }
public static FilePosition GetDefinitionPosition(IMember resolvedMember) internal static FilePosition GetDefinitionPosition(IMember resolvedMember)
{ {
IClass declaringType = resolvedMember.DeclaringType; IClass declaringType = resolvedMember.DeclaringType;
if (declaringType == null) { if (declaringType == null) {

74
src/Main/Base/Project/Src/Services/ParserService/DefaultProjectContent.cs

@ -6,26 +6,15 @@
// </file> // </file>
using System; using System;
using System.IO;
using System.Threading;
using System.Collections; using System.Collections;
using System.Collections.Generic; using System.Collections.Generic;
using System.Diagnostics; using System.Diagnostics;
using System.Reflection; using System.IO;
using System.Runtime.InteropServices;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters;
using System.Runtime.Serialization.Formatters.Binary;
using System.Security;
using System.Security.Permissions;
using System.Security.Policy;
using System.Xml;
using System.Text; using System.Text;
using System.Threading;
using ICSharpCode.Core;
using ICSharpCode.SharpDevelop.Project;
using ICSharpCode.SharpDevelop.Gui;
using ICSharpCode.SharpDevelop.Dom; using ICSharpCode.SharpDevelop.Dom;
using ICSharpCode.SharpDevelop.Project;
namespace ICSharpCode.Core namespace ICSharpCode.Core
{ {
@ -723,30 +712,23 @@ namespace ICSharpCode.Core
return null; return null;
} }
public IReturnType SearchType(string name, int typeParameterCount, IClass curType, int caretLine, int caretColumn) public SearchTypeResult SearchType(SearchTypeRequest request)
{
if (curType == null) {
return SearchType(name, typeParameterCount, null, null, caretLine, caretColumn);
}
return SearchType(name, typeParameterCount, curType, curType.CompilationUnit, caretLine, caretColumn);
}
public IReturnType SearchType(string name, int typeParameterCount, IClass curType, ICompilationUnit unit, int caretLine, int caretColumn)
{ {
string name = request.Name;
if (name == null || name.Length == 0) { if (name == null || name.Length == 0) {
return null; return SearchTypeResult.Empty;
} }
// Try if name is already the full type name // Try if name is already the full type name
IClass c = GetClass(name, typeParameterCount); IClass c = GetClass(name, request.TypeParameterCount);
if (c != null) { if (c != null) {
return c.DefaultReturnType; return new SearchTypeResult(c.DefaultReturnType);
} }
// fallback-class if the one with the right type parameter count is not found. // fallback-class if the one with the right type parameter count is not found.
IReturnType fallbackClass = null; SearchTypeResult fallbackResult = SearchTypeResult.Empty;
if (curType != null) { if (request.CurrentType != null) {
// Try parent namespaces of the current class // Try parent namespaces of the current class
string fullname = curType.FullyQualifiedName; string fullname = request.CurrentType.FullyQualifiedName;
string[] namespaces = fullname.Split('.'); string[] namespaces = fullname.Split('.');
StringBuilder curnamespace = new StringBuilder(); StringBuilder curnamespace = new StringBuilder();
for (int i = 0; i < namespaces.Length; ++i) { for (int i = 0; i < namespaces.Length; ++i) {
@ -754,12 +736,12 @@ namespace ICSharpCode.Core
curnamespace.Append('.'); curnamespace.Append('.');
curnamespace.Append(name); curnamespace.Append(name);
c = GetClass(curnamespace.ToString(), typeParameterCount); c = GetClass(curnamespace.ToString(), request.TypeParameterCount);
if (c != null) { if (c != null) {
if (c.TypeParameters.Count == typeParameterCount) if (c.TypeParameters.Count == request.TypeParameterCount)
return c.DefaultReturnType; return new SearchTypeResult(c.DefaultReturnType);
else else
fallbackClass = c.DefaultReturnType; fallbackResult = new SearchTypeResult(c.DefaultReturnType);
} }
// remove class name again to try next namespace // remove class name again to try next namespace
curnamespace.Length -= name.Length; curnamespace.Length -= name.Length;
@ -768,42 +750,42 @@ namespace ICSharpCode.Core
if (name.IndexOf('.') < 0) { if (name.IndexOf('.') < 0) {
// Try inner classes (in full inheritance tree) // Try inner classes (in full inheritance tree)
// Don't use loop with cur = cur.BaseType because of inheritance cycles // Don't use loop with cur = cur.BaseType because of inheritance cycles
foreach (IClass baseClass in curType.ClassInheritanceTree) { foreach (IClass baseClass in request.CurrentType.ClassInheritanceTree) {
if (baseClass.ClassType == ClassType.Class) { if (baseClass.ClassType == ClassType.Class) {
foreach (IClass innerClass in baseClass.InnerClasses) { foreach (IClass innerClass in baseClass.InnerClasses) {
if (language.NameComparer.Equals(innerClass.Name, name)) if (language.NameComparer.Equals(innerClass.Name, name))
return innerClass.DefaultReturnType; return new SearchTypeResult(innerClass.DefaultReturnType);
} }
} }
} }
} }
} }
if (unit != null) { if (request.CurrentCompilationUnit != null) {
// Combine name with usings // Combine name with usings
foreach (IUsing u in unit.Usings) { foreach (IUsing u in request.CurrentCompilationUnit.Usings) {
if (u != null) { if (u != null) {
IReturnType r = u.SearchType(name, typeParameterCount); IReturnType r = u.SearchType(name, request.TypeParameterCount);
if (r != null) { if (r != null) {
if (r.TypeParameterCount == typeParameterCount) { if (r.TypeParameterCount == request.TypeParameterCount) {
return r; return new SearchTypeResult(r, u);
} else { } else {
fallbackClass = r; fallbackResult = new SearchTypeResult(r, u);
} }
} }
} }
} }
} }
if (defaultImports != null) { if (defaultImports != null) {
IReturnType r = defaultImports.SearchType(name, typeParameterCount); IReturnType r = defaultImports.SearchType(name, request.TypeParameterCount);
if (r != null) { if (r != null) {
if (r.TypeParameterCount == typeParameterCount) { if (r.TypeParameterCount == request.TypeParameterCount) {
return r; return new SearchTypeResult(r, defaultImports);
} else { } else {
fallbackClass = r; fallbackResult = new SearchTypeResult(r, defaultImports);
} }
} }
} }
return fallbackClass; return fallbackResult;
} }
/// <summary> /// <summary>

80
src/Main/Base/Project/Src/Services/ParserService/IProjectContent.cs

@ -6,26 +6,11 @@
// </file> // </file>
using System; using System;
using System.IO;
using System.Threading;
using System.Collections; using System.Collections;
using System.Collections.Generic; using System.Collections.Generic;
using System.Diagnostics;
using System.Reflection;
using System.Runtime.InteropServices;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters;
using System.Runtime.Serialization.Formatters.Binary;
using System.Security;
using System.Security.Permissions;
using System.Security.Policy;
using System.Xml;
using System.Text;
using ICSharpCode.Core;
using ICSharpCode.SharpDevelop.Project;
using ICSharpCode.SharpDevelop.Gui;
using ICSharpCode.SharpDevelop.Dom; using ICSharpCode.SharpDevelop.Dom;
using ICSharpCode.SharpDevelop.Project;
namespace ICSharpCode.Core namespace ICSharpCode.Core
{ {
@ -89,9 +74,66 @@ namespace ICSharpCode.Core
void AddNamespaceContents(ArrayList list, string subNameSpace, LanguageProperties language, bool lookInReferences); void AddNamespaceContents(ArrayList list, string subNameSpace, LanguageProperties language, bool lookInReferences);
string SearchNamespace(string name, IClass curType, ICompilationUnit unit, int caretLine, int caretColumn); string SearchNamespace(string name, IClass curType, ICompilationUnit unit, int caretLine, int caretColumn);
IReturnType SearchType(string name, int typeParameterCount, IClass curType, int caretLine, int caretColumn); SearchTypeResult SearchType(SearchTypeRequest request);
IReturnType SearchType(string name, int typeParameterCount, IClass curType, ICompilationUnit unit, int caretLine, int caretColumn);
Position GetPosition(string fullMemberName); Position GetPosition(string fullMemberName);
} }
public struct SearchTypeRequest
{
public string Name;
public int TypeParameterCount;
public ICompilationUnit CurrentCompilationUnit;
public IClass CurrentType;
public int CaretLine;
public int CaretColumn;
public SearchTypeRequest(string name, int typeParameterCount, IClass currentType, int caretLine, int caretColumn)
{
this.Name = name;
this.TypeParameterCount = typeParameterCount;
this.CurrentCompilationUnit = currentType.CompilationUnit;
this.CurrentType = currentType;
this.CaretLine = caretLine;
this.CaretColumn = caretColumn;
}
public SearchTypeRequest(string name, int typeParameterCount, IClass currentType, ICompilationUnit currentCompilationUnit, int caretLine, int caretColumn)
{
this.Name = name;
this.TypeParameterCount = typeParameterCount;
this.CurrentCompilationUnit = currentCompilationUnit;
this.CurrentType = currentType;
this.CaretLine = caretLine;
this.CaretColumn = caretColumn;
}
}
public struct SearchTypeResult
{
public static readonly SearchTypeResult Empty = new SearchTypeResult(null);
IReturnType result;
IUsing usedUsing;
public SearchTypeResult(IReturnType result) : this(result, null) {}
public SearchTypeResult(IReturnType result, IUsing usedUsing)
{
this.result = result;
this.usedUsing = usedUsing;
}
public IReturnType Result {
get {
return result;
}
}
public IUsing UsedUsing {
get {
return usedUsing;
}
}
}
} }

20
src/Main/Base/Project/Src/Services/ParserService/ParserService.cs

@ -6,26 +6,16 @@
// </file> // </file>
using System; using System;
using System.IO;
using System.Threading;
using System.Collections; using System.Collections;
using System.Collections.Generic; using System.Collections.Generic;
using System.Diagnostics; using System.Diagnostics;
using System.Reflection; using System.IO;
using System.Runtime.InteropServices;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters;
using System.Runtime.Serialization.Formatters.Binary;
using System.Security;
using System.Security.Permissions;
using System.Security.Policy;
using System.Xml;
using System.Text; using System.Text;
using System.Threading;
using ICSharpCode.Core;
using ICSharpCode.SharpDevelop.Project;
using ICSharpCode.SharpDevelop.Gui;
using ICSharpCode.SharpDevelop.Dom; using ICSharpCode.SharpDevelop.Dom;
using ICSharpCode.SharpDevelop.Gui;
using ICSharpCode.SharpDevelop.Project;
namespace ICSharpCode.Core namespace ICSharpCode.Core
{ {
@ -464,6 +454,8 @@ namespace ICSharpCode.Core
public static ParseInformation ParseFile(IProjectContent fileProjectContent, string fileName, string fileContent, bool updateCommentTags, bool fireUpdate) public static ParseInformation ParseFile(IProjectContent fileProjectContent, string fileName, string fileContent, bool updateCommentTags, bool fireUpdate)
{ {
if (fileName == null) throw new ArgumentNullException("fileName");
IParser parser = GetParser(fileName); IParser parser = GetParser(fileName);
if (parser == null) { if (parser == null) {
return null; return null;

83
src/Main/Base/Project/Src/Services/RefactoringService/CodeGenerator.cs

@ -6,14 +6,13 @@
// </file> // </file>
using System; using System;
using System.Collections;
using System.Collections.Generic; using System.Collections.Generic;
using System.IO; using System.Drawing;
using System.Text; using System.Text;
using ICSharpCode.NRefactory.Parser.AST;
using ICSharpCode.SharpDevelop.Dom; using ICSharpCode.SharpDevelop.Dom;
using ICSharpCode.TextEditor; using ICSharpCode.TextEditor;
using ICSharpCode.TextEditor.Document; using ICSharpCode.TextEditor.Document;
using ICSharpCode.NRefactory.Parser.AST;
namespace ICSharpCode.SharpDevelop.Refactoring namespace ICSharpCode.SharpDevelop.Refactoring
{ {
@ -89,6 +88,20 @@ namespace ICSharpCode.SharpDevelop.Refactoring
return (ParamModifier)m; return (ParamModifier)m;
} }
public static UsingDeclaration ConvertUsing(IUsing u)
{
List<Using> usings = new List<Using>();
foreach (string name in u.Usings) {
usings.Add(new Using(name));
}
if (u.HasAliases) {
foreach (KeyValuePair<string, IReturnType> pair in u.Aliases) {
usings.Add(new Using(pair.Key, ConvertType(pair.Value, null)));
}
}
return new UsingDeclaration(usings);
}
public static List<ParameterDeclarationExpression> ConvertParameters(IList<IParameter> parameters, ClassFinder targetContext) public static List<ParameterDeclarationExpression> ConvertParameters(IList<IParameter> parameters, ClassFinder targetContext)
{ {
List<ParameterDeclarationExpression> l = new List<ParameterDeclarationExpression>(parameters.Count); List<ParameterDeclarationExpression> l = new List<ParameterDeclarationExpression>(parameters.Count);
@ -515,5 +528,69 @@ namespace ICSharpCode.SharpDevelop.Refactoring
return ie; return ie;
} }
#endregion #endregion
#region Using statements
public virtual void ReplaceUsings(IDocument document, IList<IUsing> oldUsings, IList<IUsing> newUsings)
{
if (oldUsings.Count == newUsings.Count) {
bool identical = true;
for (int i = 0; i < oldUsings.Count; i++) {
if (oldUsings[i] != newUsings[i]) {
identical = false;
break;
}
}
if (identical) return;
}
int firstLine = int.MaxValue;
List<KeyValuePair<int, int>> regions = new List<KeyValuePair<int, int>>();
foreach (IUsing u in oldUsings) {
if (u.Region.BeginLine < firstLine)
firstLine = u.Region.BeginLine;
int st = document.PositionToOffset(new Point(u.Region.BeginColumn - 1, u.Region.BeginLine - 1));
int en = document.PositionToOffset(new Point(u.Region.EndColumn - 1, u.Region.EndLine - 1));
regions.Add(new KeyValuePair<int, int>(st, en - st));
}
regions.Sort(delegate(KeyValuePair<int, int> a, KeyValuePair<int, int> b) {
return a.Key.CompareTo(b.Key);
});
int insertionOffset = regions.Count == 0 ? 0 : regions[0].Key;
string indentation;
if (firstLine != int.MaxValue) {
indentation = GetIndentation(document, firstLine);
insertionOffset -= indentation.Length;
} else {
indentation = "";
}
for (int i = regions.Count - 1; i >= 0; i--) {
document.Remove(regions[i].Key, regions[i].Value);
}
int actionCount = regions.Count;
int lastNewLine = insertionOffset;
for (int i = insertionOffset; i < document.TextLength; i++) {
char c = document.GetCharAt(i);
if (!char.IsWhiteSpace(c))
break;
if (c == '\n') {
if (i > 0 && document.GetCharAt(i - 1) == '\r')
lastNewLine = i - 1;
else
lastNewLine = i;
}
}
if (lastNewLine != insertionOffset) {
document.Remove(insertionOffset, lastNewLine - insertionOffset); actionCount++;
}
StringBuilder txt = new StringBuilder();
foreach (IUsing us in newUsings) {
txt.Append(GenerateCode(ConvertUsing(us), indentation));
}
document.Insert(insertionOffset, txt.ToString()); actionCount++;
document.UndoStack.UndoLast(actionCount);
}
#endregion
} }
} }

9
src/Main/Base/Project/Src/Services/RefactoringService/FindReferencesAndRenameHelper.cs

@ -7,18 +7,13 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using ICSharpCode.Core; using ICSharpCode.Core;
using ICSharpCode.TextEditor;
using ICSharpCode.TextEditor.Document;
using ICSharpCode.SharpDevelop.DefaultEditor.Gui.Editor; using ICSharpCode.SharpDevelop.DefaultEditor.Gui.Editor;
using ICSharpCode.SharpDevelop.Dom; using ICSharpCode.SharpDevelop.Dom;
using ICSharpCode.SharpDevelop.Bookmarks;
using ICSharpCode.SharpDevelop.Gui; using ICSharpCode.SharpDevelop.Gui;
using ICSharpCode.TextEditor;
using ICSharpCode.TextEditor.Document;
using SearchAndReplace; using SearchAndReplace;
using ICSharpCode.SharpDevelop.DefaultEditor.Commands;
namespace ICSharpCode.SharpDevelop.Refactoring namespace ICSharpCode.SharpDevelop.Refactoring
{ {

1
src/Main/Base/Project/Src/Services/RefactoringService/LocalVariableRefactoring.cs

@ -8,7 +8,6 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using ICSharpCode.Core; using ICSharpCode.Core;
using ICSharpCode.SharpDevelop;
using ICSharpCode.SharpDevelop.Dom; using ICSharpCode.SharpDevelop.Dom;
namespace ICSharpCode.SharpDevelop.Refactoring namespace ICSharpCode.SharpDevelop.Refactoring

2
src/Main/Base/Project/Src/Services/RefactoringService/NRefactoryCodeGenerator.cs

@ -6,8 +6,6 @@
// </file> // </file>
using System; using System;
using System.IO;
using ICSharpCode.SharpDevelop.Dom;
using ICSharpCode.NRefactory.Parser.AST; using ICSharpCode.NRefactory.Parser.AST;
using ICSharpCode.NRefactory.PrettyPrinter; using ICSharpCode.NRefactory.PrettyPrinter;

129
src/Main/Base/Project/Src/Services/RefactoringService/NRefactoryRefactoringProvider.cs

@ -0,0 +1,129 @@
// <file>
// <copyright see="prj:///doc/copyright.txt"/>
// <license see="prj:///doc/license.txt"/>
// <owner name="Daniel Grunwald" email="daniel@danielgrunwald.de"/>
// <version>$Revision$</version>
// </file>
using System;
using System.Collections.Generic;
using System.IO;
using ICSharpCode.Core;
using ICSharpCode.NRefactory.Parser.AST;
using ICSharpCode.SharpDevelop.Dom;
using NR = ICSharpCode.NRefactory.Parser;
namespace ICSharpCode.SharpDevelop.Refactoring
{
public class NRefactoryRefactoringProvider : RefactoringProvider
{
public static readonly NRefactoryRefactoringProvider NRefactoryProviderInstance = new NRefactoryRefactoringProvider();
protected class PossibleTypeReference
{
internal string Name;
internal bool Global;
internal int TypeParameterCount;
public PossibleTypeReference(string name)
{
this.Name = name;
}
public PossibleTypeReference(TypeReference tr)
{
this.Name = tr.SystemType;
this.Global = tr.IsGlobal;
this.TypeParameterCount = tr.GenericTypes.Count;
}
public override int GetHashCode()
{
return Name.GetHashCode() ^ Global.GetHashCode() ^ TypeParameterCount.GetHashCode();
}
public override bool Equals(object obj)
{
if (!(obj is PossibleTypeReference)) return false;
if (this == obj) return true;
PossibleTypeReference myPossibleTypeReference = (PossibleTypeReference)obj;
return this.Name == myPossibleTypeReference.Name && this.Global == myPossibleTypeReference.Global && this.TypeParameterCount == myPossibleTypeReference.TypeParameterCount;
}
}
private class FindPossibleTypeReferencesVisitor : NR.AbstractAstVisitor
{
internal Dictionary<PossibleTypeReference, object> list = new Dictionary<PossibleTypeReference, object>();
public override object Visit(IdentifierExpression identifierExpression, object data)
{
list[new PossibleTypeReference(identifierExpression.Identifier)] = data;
return base.Visit(identifierExpression, data);
}
public override object Visit(TypeReference typeReference, object data)
{
list[new PossibleTypeReference(typeReference)] = data;
return base.Visit(typeReference, data);
}
}
protected Dictionary<PossibleTypeReference, object> FindPossibleTypeReferences(string extension, string fileContent)
{
NR.IParser parser;
if (extension.Equals(".cs", StringComparison.InvariantCultureIgnoreCase))
parser = NR.ParserFactory.CreateParser(NR.SupportedLanguage.CSharp, new StringReader(fileContent));
else if (extension.Equals(".vb", StringComparison.InvariantCultureIgnoreCase))
parser = NR.ParserFactory.CreateParser(NR.SupportedLanguage.VBNet, new StringReader(fileContent));
else
return null;
parser.Parse();
if (parser.Errors.count > 0) {
MessageService.ShowMessage("The operation cannot be performed because your sourcecode contains errors:\n" + parser.Errors.ErrorOutput);
return null;
} else {
FindPossibleTypeReferencesVisitor visitor = new FindPossibleTypeReferencesVisitor();
parser.CompilationUnit.AcceptVisitor(visitor, null);
return visitor.list;
}
}
public override bool SupportsFindUnusedUsingDeclarations {
get {
return true;
}
}
public override IList<IUsing> FindUnusedUsingDeclarations(string fileName, string fileContent, ICompilationUnit cu)
{
IClass @class = cu.Classes.Count == 0 ? null : cu.Classes[0];
Dictionary<PossibleTypeReference, object> references = FindPossibleTypeReferences(Path.GetExtension(fileName), fileContent);
if (references == null) return new IUsing[0];
Dictionary<IUsing, object> dict = new Dictionary<IUsing, object>();
foreach (PossibleTypeReference tr in references.Keys) {
SearchTypeRequest request = new SearchTypeRequest(tr.Name, tr.TypeParameterCount, @class, cu, 1, 1);
SearchTypeResult response = cu.ProjectContent.SearchType(request);
if (response.UsedUsing != null) {
dict[response.UsedUsing] = null;
}
}
List<IUsing> list = new List<IUsing>();
foreach (IUsing import in cu.Usings) {
if (!dict.ContainsKey(import)) {
if (import.HasAliases) {
foreach (string key in import.Aliases.Keys) {
if (references.ContainsKey(new PossibleTypeReference(key)))
goto checkNextImport;
}
}
list.Add(import); // this using is unused
}
checkNextImport:;
}
return list;
}
}
}

16
src/Main/Base/Project/Src/Services/RefactoringService/NamespaceRefactoring.cs

@ -1,16 +0,0 @@
// <file>
// <copyright see="prj:///doc/copyright.txt"/>
// <license see="prj:///doc/license.txt"/>
// <owner name="Daniel Grunwald" email="daniel@danielgrunwald.de"/>
// <version>$Revision$</version>
// </file>
using System;
namespace ICSharpCode.SharpDevelop.Refactoring
{
public static class NamespaceRefactoring
{
}
}

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

@ -0,0 +1,70 @@
// <file>
// <copyright see="prj:///doc/copyright.txt"/>
// <license see="prj:///doc/license.txt"/>
// <owner name="Daniel Grunwald" email="daniel@danielgrunwald.de"/>
// <version>$Revision$</version>
// </file>
using System;
using System.Collections.Generic;
using ICSharpCode.Core;
using ICSharpCode.SharpDevelop.Dom;
using ICSharpCode.TextEditor.Document;
namespace ICSharpCode.SharpDevelop.Refactoring
{
public static class NamespaceRefactoringService
{
static int CompareUsings(IUsing a, IUsing b)
{
if (a.HasAliases != b.HasAliases)
return a.HasAliases ? 1 : -1;
if (a.Usings.Count != 0 && b.Usings.Count != 0) {
string u1 = a.Usings[0];
string u2 = b.Usings[0];
if (u1.StartsWith("System.") || u1 == "System") {
if (!(u2.StartsWith("System.") || u2 == "System"))
return -1;
} else {
if (u2.StartsWith("System.") || u2 == "System")
return 1;
}
return a.Usings[0].CompareTo(b.Usings[0]);
}
if (a.Aliases.Count != 0 && b.Aliases.Count != 0) {
return a.Aliases.Keys[0].CompareTo(b.Aliases.Keys[0]);
}
return 0;
}
public static void ManageUsings(string fileName, IDocument document, bool sort, bool removedUnused)
{
ParseInformation info = ParserService.ParseFile(fileName, document.TextContent);
if (info == null) return;
ICompilationUnit cu = info.MostRecentCompilationUnit;
List<IUsing> newUsings = new List<IUsing>(cu.Usings);
if (sort) {
newUsings.Sort(CompareUsings);
}
if (removedUnused) {
IList<IUsing> decl = cu.ProjectContent.Language.RefactoringProvider.FindUnusedUsingDeclarations(fileName, document.TextContent, 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);
}
}
}
}
cu.ProjectContent.Language.CodeGenerator.ReplaceUsings(document, cu.Usings, newUsings);
}
}
}

87
src/Main/Base/Project/Src/Services/RefactoringService/RefactorMenu.cs

@ -0,0 +1,87 @@
// <file>
// <copyright see="prj:///doc/copyright.txt"/>
// <license see="prj:///doc/license.txt"/>
// <owner name="Daniel Grunwald" email="daniel@danielgrunwald.de"/>
// <version>$Revision$</version>
// </file>
using System;
using System.Reflection;
using ICSharpCode.Core;
using ICSharpCode.SharpDevelop.DefaultEditor.Gui.Editor;
using ICSharpCode.SharpDevelop.Dom;
using ICSharpCode.SharpDevelop.Gui;
using ICSharpCode.TextEditor;
namespace ICSharpCode.SharpDevelop.Refactoring
{
/// <summary>
/// Tests if the refactoring provider for the current document
/// supports the specified option.
/// </summary>
/// <attribute name="supports">
/// Same of the action that should be supported.
/// "*" to test if refactoring is supported at all.
/// </attribute>
/// <example title="Test if refactoring is supported">
/// &lt;Condition name="RefactoringProviderSupports" supports="*"&gt;
/// </example>
/// <example title="Test if managing imports is supported">
/// &lt;Condition name="RefactoringProviderSupports" supports="FindUnusedUsingDeclarations"&gt;
/// </example>
public class RefactoringProviderSupportsConditionEvaluator : IConditionEvaluator
{
public bool IsValid(object caller, Condition condition)
{
if (WorkbenchSingleton.Workbench == null || WorkbenchSingleton.Workbench.ActiveWorkbenchWindow == null) {
return false;
}
ITextEditorControlProvider provider = WorkbenchSingleton.Workbench.ActiveWorkbenchWindow.ActiveViewContent as ITextEditorControlProvider;
if (provider == null) return false;
LanguageProperties language = ParserService.CurrentProjectContent.Language;
if (language == null) return false;
string supports = condition.Properties["supports"];
if (supports == "*") return true;
RefactoringProvider rp = language.RefactoringProvider;
Type t = rp.GetType();
try {
return (bool)t.InvokeMember("Supports" + supports, BindingFlags.Instance | BindingFlags.Public | BindingFlags.GetProperty, null, rp, null);
} catch (Exception ex) {
LoggingService.Warn(ex.ToString());
return false;
}
}
}
public abstract class AbstractRefactoringCommand : AbstractMenuCommand
{
public override void Run()
{
if (ParserService.LoadSolutionProjectsThreadRunning) {
return;
}
if (WorkbenchSingleton.Workbench == null || WorkbenchSingleton.Workbench.ActiveWorkbenchWindow == null) {
return;
}
ITextEditorControlProvider provider = WorkbenchSingleton.Workbench.ActiveWorkbenchWindow.ActiveViewContent as ITextEditorControlProvider;
if (provider == null) return;
LanguageProperties language = ParserService.CurrentProjectContent.Language;
if (language == null) return;
RefactoringProvider rp = language.RefactoringProvider;
Run(provider.TextEditorControl, rp);
provider.TextEditorControl.Refresh();
}
protected abstract void Run(TextEditorControl textEditor, RefactoringProvider provider);
}
public class RemoveUnusedUsingsCommand : AbstractRefactoringCommand
{
protected override void Run(TextEditorControl textEditor, RefactoringProvider provider)
{
NamespaceRefactoringService.ManageUsings(textEditor.FileName, textEditor.Document, true, true);
}
}
}

34
src/Main/Base/Project/Src/Services/RefactoringService/RefactoringProvider.cs

@ -0,0 +1,34 @@
// <file>
// <copyright see="prj:///doc/copyright.txt"/>
// <license see="prj:///doc/license.txt"/>
// <owner name="Daniel Grunwald" email="daniel@danielgrunwald.de"/>
// <version>$Revision$</version>
// </file>
using System;
using System.Collections.Generic;
using ICSharpCode.SharpDevelop.Dom;
namespace ICSharpCode.SharpDevelop.Refactoring
{
public class RefactoringProvider
{
/// <summary>
/// A RefactoringProvider instance that supports no refactorings.
/// </summary>
public static readonly RefactoringProvider DummyProvider = new RefactoringProvider();
protected RefactoringProvider() {}
public virtual bool SupportsFindUnusedUsingDeclarations {
get {
return false;
}
}
public virtual IList<IUsing> FindUnusedUsingDeclarations(string fileName, string fileContent, ICompilationUnit compilationUnit)
{
throw new NotSupportedException();
}
}
}

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

@ -9,7 +9,6 @@ using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Drawing; using System.Drawing;
using ICSharpCode.Core; using ICSharpCode.Core;
using ICSharpCode.SharpDevelop;
using ICSharpCode.SharpDevelop.Dom; using ICSharpCode.SharpDevelop.Dom;
using ICSharpCode.SharpDevelop.Gui; using ICSharpCode.SharpDevelop.Gui;
using ICSharpCode.SharpDevelop.Project; using ICSharpCode.SharpDevelop.Project;
@ -309,7 +308,7 @@ namespace ICSharpCode.SharpDevelop.Refactoring
return new Point(column, line); return new Point(column, line);
} }
public static List<string> GetFileNames(IClass c) static List<string> GetFileNames(IClass c)
{ {
List<string> list = new List<string>(); List<string> list = new List<string>();
CompoundClass cc = c as CompoundClass; CompoundClass cc = c as CompoundClass;
@ -407,6 +406,7 @@ namespace ICSharpCode.SharpDevelop.Refactoring
} }
#endregion #endregion
#region IsReferenceTo...
public static bool IsReferenceToLocalVariable(ResolveResult rr, IMember variable) public static bool IsReferenceToLocalVariable(ResolveResult rr, IMember variable)
{ {
LocalResolveResult local = rr as LocalResolveResult; LocalResolveResult local = rr as LocalResolveResult;
@ -432,7 +432,9 @@ namespace ICSharpCode.SharpDevelop.Refactoring
return false; return false;
} }
} }
#endregion
#region IsSimilarMember / FindBaseMember
/// <summary> /// <summary>
/// Gets if member1 is the same as member2 or if member1 overrides member2. /// Gets if member1 is the same as member2 or if member1 overrides member2.
/// </summary> /// </summary>
@ -516,5 +518,6 @@ namespace ICSharpCode.SharpDevelop.Refactoring
} }
return null; return null;
} }
#endregion
} }
} }

1
src/Main/Base/Project/Src/Services/RefactoringService/Reference.cs

@ -6,7 +6,6 @@
// </file> // </file>
using System; using System;
using System.Collections.Generic;
using ICSharpCode.SharpDevelop.Dom; using ICSharpCode.SharpDevelop.Dom;
namespace ICSharpCode.SharpDevelop.Refactoring namespace ICSharpCode.SharpDevelop.Refactoring

0
src/Main/Base/Project/Src/TextEditor/Commands/CodeGenerators/CodeGenerator.cs → src/Main/Base/Project/Src/TextEditor/Commands/CodeGenerators/CodeGeneratorBase.cs

11
src/Main/StartUp/Project/SharpDevelopMain.cs

@ -6,18 +6,12 @@
// </file> // </file>
using System; using System;
using System.IO;
using System.Diagnostics; using System.Diagnostics;
using System.IO;
using System.Reflection; using System.Reflection;
using System.Drawing;
using System.Collections;
using System.Collections.Generic;
using System.Windows.Forms;
using System.Resources; using System.Resources;
using System.Xml;
using System.Threading; using System.Threading;
using System.Runtime.Remoting; using System.Windows.Forms;
using System.Security.Policy;
using ICSharpCode.Core; using ICSharpCode.Core;
using ICSharpCode.SharpDevelop.Commands; using ICSharpCode.SharpDevelop.Commands;
@ -263,6 +257,7 @@ namespace ICSharpCode.SharpDevelop
AddInTree.ConditionEvaluators.Add("ProjectActive", new ProjectActiveConditionEvaluator()); AddInTree.ConditionEvaluators.Add("ProjectActive", new ProjectActiveConditionEvaluator());
AddInTree.ConditionEvaluators.Add("TextContent", new ICSharpCode.SharpDevelop.DefaultEditor.Conditions.TextContentConditionEvaluator()); AddInTree.ConditionEvaluators.Add("TextContent", new ICSharpCode.SharpDevelop.DefaultEditor.Conditions.TextContentConditionEvaluator());
AddInTree.ConditionEvaluators.Add("BrowserLocation", new ICSharpCode.SharpDevelop.BrowserDisplayBinding.BrowserLocationConditionEvaluator()); AddInTree.ConditionEvaluators.Add("BrowserLocation", new ICSharpCode.SharpDevelop.BrowserDisplayBinding.BrowserLocationConditionEvaluator());
AddInTree.ConditionEvaluators.Add("RefactoringProviderSupports", new Refactoring.RefactoringProviderSupportsConditionEvaluator());
AddInTree.Doozers.Add("DialogPanel", new DialogPanelDoozer()); AddInTree.Doozers.Add("DialogPanel", new DialogPanelDoozer());
AddInTree.Doozers.Add("DisplayBinding", new DisplayBindingDoozer()); AddInTree.Doozers.Add("DisplayBinding", new DisplayBindingDoozer());

Loading…
Cancel
Save