我想写一个Resharper插件,它允许我根据突出显示的文本在另一个类中生成代码,并且API不是最透明的。我应该使用哪些方法来访问所选文本,以及在当前类之外生成代码?
答案 0 :(得分: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)。
如果您有其他问题,请随时与我联系。