public CompTypeName(TParameterDeclaration pdecl) {
    if (pdecl.hasDeclarator()) {
      throw new CXInternalError(
          "requesting safe type name of declarator instead of abstract declarator");
    }
    this.pdecl = pdecl;

    TreeRoot root = new TreeRoot(pdecl);
    SafeTypeGenerator stgen = new SafeTypeGenerator();
    try {
      root.accept(stgen);
    } catch (Throwable e) {
      throw new CXInternalError("something went wrong in safe type name generation", e);
    }

    this.tname = stgen.toString();
  }
  /** @see org.eclipse.jface.viewers.ITreeContentProvider#getChildren(java.lang.Object) */
  public Object[] getChildren(Object parentElement) {
    if (parentElement instanceof TreeRoot) {
      TreeRoot dummyRoot = (TreeRoot) parentElement;

      return new Object[] {dummyRoot.getRoot()};
    } else if (parentElement instanceof MethodWrapper) {
      MethodWrapper methodWrapper = ((MethodWrapper) parentElement);

      if (shouldStopTraversion(methodWrapper)) {
        return EMPTY_ARRAY;
      } else {
        if (fManager != null) {
          Object[] children = fManager.getChildren(new DeferredMethodWrapper(this, methodWrapper));
          if (children != null) return children;
        }
        return fetchChildren(methodWrapper);
      }
    }

    return EMPTY_ARRAY;
  }