protected String getSourceHandle(IDeclaration declaration) {
   ITranslationUnit tu = declaration.getTranslationUnit();
   if (tu != null) {
     IPath location = tu.getLocation();
     if (location != null) {
       return location.toOSString();
     }
   }
   return ""; //$NON-NLS-1$
 }
  @Override
  public Object execute(ExecutionEvent event) throws ExecutionException {
    ISelection selection = HandlerUtil.getCurrentSelection(event);

    if (selection == null) {
      return null;
    }

    if (selection instanceof IStructuredSelection) {
      ByteArrayOutputStream baos = new ByteArrayOutputStream();
      PrintStream ps = new PrintStream(baos);

      Iterator<?> iter = ((IStructuredSelection) selection).iterator();
      while (iter.hasNext()) {
        Object obj = iter.next();
        if (obj instanceof Executable) {
          Executable exe = (Executable) obj;
          ps.println(exe.getName());
        } else if (obj instanceof ITranslationUnit) {
          ITranslationUnit tu = (ITranslationUnit) obj;
          ps.println(tu.getLocation().toFile().getName());
        } else ps.println(obj.toString());
      }
      ps.flush();
      try {
        baos.flush();
      } catch (IOException e) {
        throw new ExecutionException("", e); // $NON-NLS-1$
      }
      Clipboard cp = getClipboard();
      cp.setContents(
          new Object[] {baos.toString().trim()}, new Transfer[] {TextTransfer.getInstance()});
    }

    return null;
  }