既存パースペクティブのビューの強制更新
StCategoryで、カテゴリを選ぶとMembersまたはOutline(次バージョンでサポート)を再表示する必要があります。表示時の絞り込みは、Filterをplugin.xmlで設定しているので問題ないのですが、任意に再表示させる方法が見つかりません。
とりあえず現状では、こんな感じ。
public class CategoriesView extends ViewPart ... private void refreshOutlineViewer() { IWorkbench workbench = PlatformUI.getWorkbench(); IWorkbenchWindow workbenchWindow = workbench.getActiveWorkbenchWindow(); IWorkbenchPage workbenchPage = workbenchWindow.getActivePage(); IEditorPart editorPart = workbenchPage.getActiveEditor(); IEditorInput editorInput = editorPart.getEditorInput(); Object adapter = editorInput.getAdapter(IJavaElement.class); if (!(adapter instanceof IJavaElement)) { return; } IJavaElement javaElement = (IJavaElement) adapter; JavaOutlinePage outlinePage = (JavaOutlinePage) editorPart .getAdapter(IContentOutlinePage.class); outlinePage.setInput(javaElement); } private void refreshMembersViewer() { StructuredViewer membersViewer = null; IViewPart view = getViewSite().getPage().findView( "org.eclipse.jdt.ui.MembersView"); if (view != null) { try { Method method = view.getClass().getSuperclass() .getDeclaredMethod("getViewer", null); method.setAccessible(true); membersViewer = (StructuredViewer) method.invoke(view, null); } catch (NoSuchMethodException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); } } if (membersViewer != null) { membersViewer.refresh(); } }
とても強引な方法で再表示させています。なんか良い方法はあるのだろうか?