Browse Source

Moved "Resolve attribute" to context actions.

git-svn-id: svn://svn.sharpdevelop.net/sharpdevelop/trunk@6438 1ccf3a8d-04fe-1044-b7c0-cef0b8235c61
pull/1/head
Martin Koníček 15 years ago
parent
commit
62bcd0e7f0
  1. 92
      src/AddIns/Misc/SharpRefactoring/Project/Src/ContextActions/AddUsing.cs
  2. 21
      src/Main/Base/Project/Src/Services/RefactoringService/RefactoringService.cs

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

@ -6,10 +6,12 @@
// </file> // </file>
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using ICSharpCode.SharpDevelop;
using ICSharpCode.SharpDevelop.Dom; using ICSharpCode.SharpDevelop.Dom;
using ICSharpCode.SharpDevelop.Editor; using ICSharpCode.SharpDevelop.Editor;
using ICSharpCode.SharpDevelop.Editor.AvalonEdit; using ICSharpCode.SharpDevelop.Editor.AvalonEdit;
using ICSharpCode.SharpDevelop.Refactoring; using ICSharpCode.SharpDevelop.Refactoring;
using System.Linq;
namespace SharpRefactoring.ContextActions namespace SharpRefactoring.ContextActions
{ {
@ -24,28 +26,92 @@ namespace SharpRefactoring.ContextActions
if (currentLineAST == null) if (currentLineAST == null)
yield break; yield break;
var symbol = context.CurrentSymbol; var symbol = context.CurrentSymbol;
foreach (var contextAction in GetAddUsingContextActions(symbol, context.Editor)) { foreach (var contextAction in GetAddUsingContextActions(symbol, context.Editor, context.CurrentExpression.Context)) {
yield return contextAction; yield return contextAction;
} }
} }
IEnumerable<IContextAction> GetAddUsingContextActions(ResolveResult symbol, ITextEditor editor) IEnumerable<IContextAction> GetAddUsingContextActions(ResolveResult symbol, ITextEditor editor, ExpressionContext exprContext)
{ {
IEnumerable<RefactoringService.AddUsingAction> addUsingActions = null; foreach (var addUsingAction in RefactoringService.GetAddUsingActions(symbol,editor)) {
if (symbol is UnknownIdentifierResolveResult) { yield return addUsingAction;
addUsingActions = RefactoringService.GetAddUsingActions((UnknownIdentifierResolveResult)symbol, editor); }
} else if (symbol is UnknownConstructorCallResolveResult) { if (exprContext == ExpressionContext.Attribute) {
addUsingActions = RefactoringService.GetAddUsingActions((UnknownConstructorCallResolveResult)symbol, editor); foreach (var addUsingAction in GetAddUsingAttributeActions(symbol, editor)) {
yield return addUsingAction;
}
} }
if (addUsingActions == null) foreach (var addUsingAction in GetAddUsingExtensionMethodActions(symbol, editor)) {
yield return addUsingAction;
}
}
IEnumerable<IContextAction> GetAddUsingExtensionMethodActions(ResolveResult symbol, ITextEditor editor)
{
yield break;
}
#region GetAddUsingAttributeActions
IEnumerable<IContextAction> GetAddUsingAttributeActions(ResolveResult symbol, ITextEditor editor)
{
if (!(symbol is UnknownIdentifierResolveResult || symbol is UnknownMethodResolveResult))
yield break;
List<IClass> results = new List<IClass>();
ParseInformation info = ParserService.GetParseInformation(editor.FileName);
if (info == null || info.CompilationUnit == null || info.CompilationUnit.ProjectContent == null)
yield break; yield break;
foreach (var addUsingAction in addUsingActions) { ICompilationUnit unit = info.CompilationUnit;
var addUsingActionCopy = addUsingAction; IProjectContent pc = info.CompilationUnit.ProjectContent;
yield return new DelegateAction {
Title = "using " + addUsingActionCopy.NewNamespace, string name = null;
ExecuteAction = addUsingActionCopy.Execute if (symbol is UnknownMethodResolveResult) {
name = Search((UnknownMethodResolveResult)symbol, pc, results);
}
if (symbol is UnknownIdentifierResolveResult) {
name = Search((UnknownIdentifierResolveResult)symbol, pc, results);
} else {
yield break;
}
foreach (IClass c in results) {
string newNamespace = c.Namespace;
yield return new DelegateAction {Title = "using " + newNamespace,
ExecuteAction = delegate {
NamespaceRefactoringService.AddUsingDeclaration(unit, editor.Document, newNamespace, true);
ParserService.BeginParse(editor.FileName, editor.Document);
}
}; };
} }
} }
public string Search(UnknownMethodResolveResult rr, IProjectContent pc, List<IClass> results)
{
SearchAttributesWithName(results, pc, rr.CallName);
foreach (IProjectContent content in pc.ReferencedContents)
SearchAttributesWithName(results, content, rr.CallName);
return rr.CallName;
}
public string Search(UnknownIdentifierResolveResult rr, IProjectContent pc, List<IClass> results)
{
SearchAttributesWithName(results, pc, rr.Identifier);
foreach (IProjectContent content in pc.ReferencedContents)
SearchAttributesWithName(results, content, rr.Identifier);
return rr.Identifier;
}
IClass baseClass = null;
void SearchAttributesWithName(List<IClass> results, IProjectContent pc, string name)
{
if (baseClass == null)
baseClass = pc.GetClass("System.Attribute", 0);
foreach (IClass c in pc.Classes) {
if (c.IsTypeInInheritanceTree(baseClass) && (c.Name == name || c.Name == name + "Attribute"))
results.Add(c);
}
}
#endregion
} }
} }

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

@ -595,6 +595,16 @@ namespace ICSharpCode.SharpDevelop.Refactoring
#endregion #endregion
#region Add using #region Add using
public static IEnumerable<AddUsingAction> GetAddUsingActions(ResolveResult symbol, ITextEditor editor)
{
if (symbol is UnknownIdentifierResolveResult) {
return GetAddUsingActions((UnknownIdentifierResolveResult)symbol, editor);
} else if (symbol is UnknownConstructorCallResolveResult) {
return GetAddUsingActions((UnknownConstructorCallResolveResult)symbol, editor);
}
return new AddUsingAction[0];
}
public static IEnumerable<AddUsingAction> GetAddUsingActions(UnknownIdentifierResolveResult rr, ITextEditor textArea) public static IEnumerable<AddUsingAction> GetAddUsingActions(UnknownIdentifierResolveResult rr, ITextEditor textArea)
{ {
return GetAddUsingActionsForUnknownClass(rr.CallingClass, rr.Identifier, textArea); return GetAddUsingActionsForUnknownClass(rr.CallingClass, rr.Identifier, textArea);
@ -632,7 +642,7 @@ namespace ICSharpCode.SharpDevelop.Refactoring
} }
} }
public class AddUsingAction public class AddUsingAction : IContextAction
{ {
public ICompilationUnit CompilationUnit { get; private set; } public ICompilationUnit CompilationUnit { get; private set; }
public ITextEditor Editor { get; private set; } public ITextEditor Editor { get; private set; }
@ -656,6 +666,15 @@ namespace ICSharpCode.SharpDevelop.Refactoring
NamespaceRefactoringService.AddUsingDeclaration(CompilationUnit, Editor.Document, NewNamespace, true); NamespaceRefactoringService.AddUsingDeclaration(CompilationUnit, Editor.Document, NewNamespace, true);
ParserService.BeginParse(Editor.FileName, Editor.Document); ParserService.BeginParse(Editor.FileName, Editor.Document);
} }
public string Title {
get {
if (this.Editor.Language.Properties == LanguageProperties.VBNet) {
return "Import " + this.NewNamespace;
}
return "using " + this.NewNamespace;
}
}
} }
#endregion #endregion
} }

Loading…
Cancel
Save