private Object[] getChildren(IType type) throws JavaScriptModelException {
    IParent parent;
    if (type.isBinary()) parent = type.getClassFile();
    else {
      parent = type.getJavaScriptUnit();
    }
    if (type.getDeclaringType() != null) return type.getChildren();

    // Add import declarations
    IJavaScriptElement[] members = parent.getChildren();
    ArrayList tempResult = new ArrayList(members.length);
    for (int i = 0; i < members.length; i++)
      if ((members[i] instanceof IImportContainer)) tempResult.add(members[i]);
    tempResult.addAll(Arrays.asList(type.getChildren()));
    return tempResult.toArray();
  }
  private Object[] getPackageContents(IPackageFragment fragment) throws JavaScriptModelException {
    ISourceReference[] sourceRefs;
    if (fragment.getKind() == IPackageFragmentRoot.K_SOURCE) {
      sourceRefs = fragment.getJavaScriptUnits();
    } else {
      IClassFile[] classFiles = fragment.getClassFiles();
      List topLevelClassFile = new ArrayList();
      for (int i = 0; i < classFiles.length; i++) {
        IType type = classFiles[i].getType();
        if (type != null
            && type.getDeclaringType() == null
            && !type.isAnonymous()
            && !type.isLocal()) topLevelClassFile.add(classFiles[i]);
      }
      sourceRefs =
          (ISourceReference[])
              topLevelClassFile.toArray(new ISourceReference[topLevelClassFile.size()]);
    }

    Object[] result = new Object[0];
    for (int i = 0; i < sourceRefs.length; i++)
      result = concatenate(result, removeImportAndPackageDeclarations(getChildren(sourceRefs[i])));
    return concatenate(result, fragment.getNonJavaScriptResources());
  }