Plug In Spyのソースコードリーディング

3,322 views

Published on

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
3,322
On SlideShare
0
From Embeds
0
Number of Embeds
27
Actions
Shares
0
Downloads
6
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Plug In Spyのソースコードリーディング

  1. 1. Plug-in Spy のソースコードを読む
  2. 2. Spyとは <ul><li>Eclipse上でショートカット(ALT+SHIFT+F1)を押すとアクティブなViewやEditorの情報を表示したり、ソースコードを閲覧したりできるPlug-inです。 </li></ul>
  3. 3. Spyとは <ul><li>Eclipse3.4 から PDE の機能として入る予定になっていますが kojihashi さんが Eclipse3.3 に対応してくれました。(感謝!) </li></ul><ul><li>http://d.hatena.ne.jp/kojihashi/20071116#1195221898 </li></ul>
  4. 4. Spyのインストール <ul><li>https://bugs.eclipse.org/bugs/show_bug.cgi?id=210162 にアクセス </li></ul><ul><li>The independent bundle as a zip をクリックしてzipをダウンロード </li></ul><ul><li>解凍してjarをEclipseのpluginsフォルダにコピー </li></ul><ul><li>Eclipseを起動してALT+SHIFT+F1を押して動作確認 </li></ul>
  5. 5. ソースを読む準備 <ul><li>メニューから File>Import を選択 </li></ul><ul><li>Import ダイアログで Plug-in Development>Plug-ins and Fragments を選択して Next ボタンを押下 </li></ul><ul><li>次の画面はデフォルトのまま Next ボタンを押下 </li></ul><ul><li>org.eclipse.pde.runtime.spy を Plug-ins and Fragments to Import に追加して Finish ボタンを押下 </li></ul>
  6. 6. ソースを読む準備 <ul><li>プロジェクト内の Referenced Libraries の下の jar 配下からソースコードを参照することが可能になる </li></ul>
  7. 7. ソースコードを読む <ul><li>Spy のソースコードは 14 個しかありません。(そのうちのほとんどがダイアログを表示する処理) </li></ul><ul><li>アクティブな View や Editor を取得する処理は org.eclipse.ui.handlers.HandlerUtil が提供しています。 </li></ul>
  8. 8. plugin.xml <extension point=&quot;org.eclipse.ui.commands&quot;> <category id=&quot;org.eclipse.pde.runtime.spy.commands.category&quot; name=&quot;%spy-category.name&quot;> </category> <command categoryId=&quot;org.eclipse.pde.runtime.spy.commands.category&quot; id=&quot;org.eclipse.pde.runtime.spy.commands.spyCommand&quot; name=&quot;%spy-command.name&quot;> </command> </extension> <extension point=&quot;org.eclipse.ui.bindings&quot;> <key commandId=&quot;org.eclipse.pde.runtime.spy.commands.spyCommand&quot; contextId=&quot;org.eclipse.ui.contexts.dialogAndWindow&quot; schemeId=&quot;org.eclipse.ui.defaultAcceleratorConfiguration&quot; sequence=&quot;M3+M2+F1&quot;> </key> </extension> <extension point=&quot;org.eclipse.ui.handlers&quot;> <handler class=&quot;org.eclipse.pde.internal.runtime.spy.handlers.SpyHandler&quot; commandId=&quot;org.eclipse.pde.runtime.spy.commands.spyCommand&quot;> </handler> </extension> コマンドの定義 キーバインドの定義 ハンドラの定義
  9. 9. org.eclipse.ui.handlers <ul><li>commandId にはキーバインドの commandId を設定している。 </li></ul><ul><li>comanndId に設定したキーが押されると ExecutionEvent が発生する。 </li></ul><ul><li>class に設定したハンドラに ExecutionEvent が渡される。 </li></ul>
  10. 10. SpyHandler <ul><li>キーが押されたときに発生する ExecutionEvent を処理する </li></ul><ul><li>Platform Command Framework の提供する HandlerUtil.getActiveShell メソッドを使って ExecutionEvent からアクティブな Shell を取得している </li></ul><ul><li>情報は SpyDialog を使って表示する </li></ul>
  11. 11. SpyDialog <ul><li>アクティブな View や Editor の情報を表示するダイアログ </li></ul><ul><li>ISpySection インターフェイスの実装クラスを利用してアクティブな Shell,Part,Selection,Wizard,Dialog,Help の情報を表示する </li></ul>
  12. 12. ISpySection の実装クラス 情報の表示に FormToolkit を継承したSpyFormTool kit と FormText( フォームに HTML を表示するウィジェット ) を 使用している アクティブな Help の情報を表示 HandlerUtil#getActiveShell で Shell を取得し Shell の型によって処理を分けている ActiveHelpSection アクティブな Dialog の情報を表示 HandlerUtil#getActiveShell で Shell を取得し IPageChangeProvider かどうか調べている ActiveDialogPageSection アクティブな Wizard の情報を表示 HandlerUtil#getActiveShell で Shell を取得し WizardDialog かどうか調べている ActiveWizardSection アクティブな Selection の情報を表示 HandlerUtil#getCurrentSelection を使用 ActiveSelectionSection アクティブな Editor,View の情報を表示 HandlerUtil#getActivePart を使用 ActivePartSection アクティブな Shell の情報を表示 HandlerUtil#getActiveShell を使用 ActiveShellSection
  13. 13. SpyFormToolkit の内部クラス ActivePart のアイコンを保存する実装が行われている。 SaveImageAction リンクが押されたときのリスナー Java のエディタやマニフェストエディタを開く処理が実装されている SpyHyperlinkAdapter
  14. 14. SpyFormToolkit のメソッド ヘルプの id を表示する部分を FormText に設定する HTML の形式で生成する FormText にイメージも設定する createHelpIdentifierSection 使われてない メニューとかの id の表示は ActivePartSection で生成されている createIdentifierSection クラスを表示する部分を FormText に設定する HTML の形式で生成する FormText にイメージも設定する createClassSection インターフェイスを表示する部分を FormText に設定する HTML の形式で生成する FormText にイメージも設定する createInterfaceSection FormText を生成して SpyHyperlinkAdapter を設定する createFormText
  15. 15. SpyFormToolkit のメソッド SaveImageAction を生成してツールバーマネージャに設定している createImageAction アイコンを保存するツールバーを生成する createSectionToolbar パッケージ名を含めたクラス名からクラス名だけを抽出する getSimpleName FormText に設定するプラグインの情報とマニフェストファイルへのリンクを生成する generatePluginDetailsText FormText に設定するクラスとインターフェイスのリンクの部分を生成する createClassReference
  16. 16. その他のクラス イメージを管理しているクラス PDERuntimeSpyPluginImages メッセージを管理しているクラス PDERuntimeSpyMessages リンクがクリックされたときにクラスやマニフェストファイルを検索しエディタに表示するクラス SpyIDEUtil Spy の Plugin クラス PDERuntimeSpyPlugin
  17. 17. SpyIDEUtil のメソッド kojihashi さんのブログ: http://d.hatena.ne.jp/kojihashi/20071116#1195221898 同上 computeClasspath org.eclipse.pde.internal.core.SearchablePluginsManager のメソッドを丸ごとコピーしたらしい createProxyProject bundleID を引数に ManifestEditor#openPluginEditor を使ってマニフェストエディタを開く openBundleManifest Project とクラス名を引数に JavaUI#openInEditor を使って Java のエディタを開く openInEditor クラスをエディタで表示するメソッド 内部で ProxyProject を作成し openInEditor メソッドを呼び出している openClass

×