3

ハイライトされたテキストに基づいて別のクラスでコードを生成できるResharperプラグインを作成したいのですが、APIは最も透過的ではありません。選択したテキストにアクセスしたり、現在のクラスの外部でコードを生成したりするには、どのメソッドを調べる必要がありますか?

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 に答える