@Override
 public boolean select(Viewer viewer, Object parentElement, Object element) {
   if (element instanceof ILanguageElement) {
     CompilationUnit compilationUnit = ((ILanguageElement) element).getCompilationUnit();
     return compilationUnit == m_compilationUnit;
   }
   if (element instanceof ISource) {
     ISource src = (ISource) element;
     if (src.getCompilationUnit() != m_compilationUnit) return false;
   }
   return true;
 }
  @Override
  public void selectionChanged(SelectionChangedEvent event) {

    super.selectionChanged(event);
    IStructuredSelection selection = (IStructuredSelection) event.getSelection();
    Object element = selection.getFirstElement();
    if (element == null) return;
    if (element instanceof ISourceProvider) {
      ISourceProvider prov = (ISourceProvider) element;
      element = prov.getSource();
    }
    if (element instanceof ISource) {
      ISource source = (ISource) element;
      m_editor
          .getSelectionProvider()
          .setSelection(
              new TextSelection(
                  source.getPosition().getOffset(), source.getPosition().getLength()));
    }
    return;
  }
 protected void handleOpen(OpenEvent event) {
   if (event.getSelection() instanceof IStructuredSelection) {
     IStructuredSelection structuredSelection = (IStructuredSelection) event.getSelection();
     Object element = structuredSelection.getFirstElement();
     if (element instanceof MemberNestedType || element instanceof DeclaratorNestedType) {
       (new OpenSourceAction((ISource) element)).run();
     } else if (element instanceof IType) {
       IType type = (IType) element;
       (new OpenCompilationUnitAction(type.getCompilationUnit())).run();
     }
   }
 }