Hello QuickAssist
ちょっと、はまったのでメモ。
Hello QuickAssistの流れ
- plugin.xmlにextentionを追加
- IQuickAssistProcessorを実装したクラスを作成する
基本的には上記だけでOK。
注意点としてはIQuickAssistProcessorの実装をしたときにデフォルトコンストラクタを作っておくこと(英語で書いてあったために見落として、結構はまった・・・)
plugin.xml
そのままですね。
<?xml version="1.0" encoding="UTF-8"?> <?eclipse version="3.4"?> <plugin> <extension point="org.eclipse.jdt.ui.quickAssistProcessors"> <quickAssistProcessor class="com.limelabo.ui.MyQuickAssist" id="com.limelabo.ui.MyQuickAssist" name="com.limelabo.ui.MyQuickAssist"> </quickAssistProcessor> </extension> </plugin>
ソース
実際に表示するには、IQuickAssistProcessor#getAssists()でIJavaCompletionProposalの配列を返さないといけないので、そのあたりも適当に実装する。
IJavaCompletionProposal#apply()はアシスタントが実行されたときの処理で、まともに実装すると結構大変そうなので、あとで書く(かも)。
package com.limelabo.ui; import org.eclipse.jdt.ui.text.java.IInvocationContext; import org.eclipse.jdt.ui.text.java.IJavaCompletionProposal; import org.eclipse.jdt.ui.text.java.IProblemLocation; import org.eclipse.jdt.ui.text.java.IQuickAssistProcessor; import org.eclipse.jface.text.IDocument; import org.eclipse.jface.text.contentassist.IContextInformation; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.graphics.Point; /** * */ public class MyQuickAssist implements IQuickAssistProcessor { /** * コンストラクタ * (引数なしコンストラクタが無いと生成してくれない) */ public MyQuickAssist() { super(); } public boolean hasAssists(IInvocationContext context) { System.out.println("hasAssists"); return true; } public IJavaCompletionProposal[] getAssists(IInvocationContext context, IProblemLocation[] locations) { System.out.println("getAssists"); IJavaCompletionProposal[] assists = { new HelloCompletionProposal() }; return assists; } class HelloCompletionProposal implements IJavaCompletionProposal { @Override public int getRelevance() { // 表示順番0-100(100が一番上に表示される) return 100; } @Override public void apply(IDocument document) { // 実行時の処理 System.out.println("apply"); } @Override public String getAdditionalProposalInfo() { return null; } @Override public IContextInformation getContextInformation() { return null; } @Override public String getDisplayString() { // 表示ラベル return "Hello QuickAssist"; } @Override public Image getImage() { // アイコン return null; } @Override public Point getSelection(IDocument document) { return null; } } }