我想编写一个插件ReSharper的,让我产生的基础上突出显示的文本另一个类代码和API还不是最透明的。 我应该看看以访问选定的文本,以及当前类之外的代码产生什么样的方法?
Answer 1:
当你写背景下行动或类似这样的东西(在这里阅读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 )。
不要犹豫,如果您还有其他疑问,请联系我。
文章来源: Resharper API for selected text and remote code generation