3

I'd like to write a Resharper plugin that lets me generate code in another class based on highlighted text, and the API isn't the most transparent. What methods should I look at to get access to selected text, and to code generation outside of the current class?

4

1 回答 1

3

当您编写上下文动作或类似的东西时(在此处阅读http://confluence.jetbrains.net/display/ReSharper/ReSharper+7+Plugin+Development关于动作和上下文动作),您会收到一个 IDataContext 实例。以这种方式从中获取文本控件、文档和选择:

var textControl = context.GetData(TextControl.DataContext.DataConstants.TEXT_CONTROL);
var document = textControl.Document;
var solution = projectFile.GetSolution();
TextRange selection = textControl.Selection.OneDocRangeWithCaret();

使用 document.GetText 获取选择范围的文本。

为了在当前类之外生成代码,您需要找到其他类声明的元素。为此,您需要使用 IDeclarationsCache,请参阅http://confluence.jetbrains.net/display/ReSharper/4.01+Caches+%28R7%29关于它。当您获得声明的元素时,使用 GetDeclarations() 方法接收对所有类声明的访问权(由于部分类可能有多个声明)并将其转换为 IClassLikeDeclaration。使用 AddClassMemberDeclaration 方法添加成员和 RemoveClassMemberDeclaration 删除。添加类成员时,使用元素工厂创建添加的元素(参见http://confluence.jetbrains.net/display/ReSharper/3.2+Creating+Code+Elements+%28R7%29)。

如果您有其他问题,请随时与我联系。

于 2012-07-10T08:59:38.533 回答