2017-05-24 15 views
2

プロジェクトエクスプローラ内の開いているすべてのプロジェクトを処理するeclipseプラグインを作成しています。選択したプロジェクトの内部にファイルが作成されます。eclipseプラグインで現在のプロジェクトを取得する普遍的な方法

私は現在のプロジェクトを入手するために蛇腹論理を使用しています。

public IProject getCurrentProject() { 
    IProject project = null; 
    IWorkbenchWindow window = PlatformUI.getWorkbench() 
      .getActiveWorkbenchWindow(); 
    if (window != null) { 
     ISelection iselection = window.getSelectionService().getSelection(); 
     IStructuredSelection selection = (IStructuredSelection) iselection; 
     if (selection == null) { 
      return null; 
     } 

     Object firstElement = selection.getFirstElement(); 
     if (firstElement instanceof IResource) { 
      project = ((IResource) firstElement).getProject(); 
     } else if (firstElement instanceof PackageFragmentRoot) { 
      IJavaProject jProject = ((PackageFragmentRoot) firstElement) 
        .getJavaProject(); 
      project = jProject.getProject(); 
     } else if (firstElement instanceof IJavaElement) { 
      IJavaProject jProject = ((IJavaElement) firstElement) 
        .getJavaProject(); 
      project = jProject.getProject(); 
     } 
    } 
    return project; 
} 

これは開発者モードで動作しています。しかし、プラグインとしてエクスポートしてインストールした後、次のエラーが発生しました。

org.eclipse.e4.core.di.InjectionException: java.lang.ClassCastException: org.eclipse.jface.text.TextSelection cannot be cast to org.eclipse.jface.viewers.IStructuredSelection

ことが注目されているので、選択は、エディタに切り替えているように見えます。 現在のプロジェクトを取得する普遍的な方法はありますか?

答えて

4

Eclipseには「現在のプロジェクト」という概念はありません。選択サービスでは、エディタまたはビューでもよい現在アクティブなパートの選択ができます。

ISelectionService.getSelectionから返された選択がIStructuredSelectionではない場合、おそらくアクティブな部分はエディタです。その場合、現在のプロジェクトをアクティブなエディタから次のようにして取得できます:

IWorkbenchPage activePage = window.getActivePage(); 

IEditorPart activeEditor = activePage.getActiveEditor(); 

if (activeEditor != null) { 
    IEditorInput input = activeEditor.getEditorInput(); 

    IProject project = input.getAdapter(IProject.class); 
    if (project == null) { 
     IResource resource = input.getAdapter(IResource.class); 
     if (resource != null) { 
     project = resource.getProject(); 
     } 
    } 
} 
+0

完璧に機能しました! @パーティー、いつも私を救う! –

関連する問題