1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
|
using System;
namespace ICSharpCode.NRefactory.CSharp.Refactoring
{
/// <summary>
/// A specialized code action creates a code action assoziated with one special type of ast nodes.
/// </summary>
public abstract class SpecializedCodeAction<T> : ICodeActionProvider where T : AstNode
{
/// <summary>
/// Gets the action for the specified ast node.
/// </summary>
/// <returns>
/// The code action. May return <c>null</c>, if no action can be provided.
/// </returns>
/// <param name='context'>
/// The refactoring conext.
/// </param>
/// <param name='node'>
/// The AstNode it's ensured that the node is always != null, if called.
/// </param>
protected abstract CodeAction GetAction(RefactoringContext context, T node);
#region ICodeActionProvider implementation
public System.Collections.Generic.IEnumerable<CodeAction> GetActions(RefactoringContext context)
{
var node = context.GetNode<T>();
if (node == null)
yield break;
var action = GetAction(context, node);
if (action == null)
yield break;
yield return action;
}
#endregion
}
}
|