private static Collection<PhpClass> getPhpClassInsideNamespace(
      Project project, PhpIndex phpIndex, String namespaceName, int maxDeep) {

    final Collection<PhpClass> phpClasses = new ArrayList<PhpClass>();

    if (maxDeep-- <= 0) {
      return phpClasses;
    }

    StubIndex.getInstance()
        .process(
            PhpNamespaceIndex.KEY,
            namespaceName.toLowerCase(),
            project,
            phpIndex.getSearchScope(),
            new Processor<PhpNamespace>() {
              @Override
              public boolean process(PhpNamespace phpNamespace) {
                phpClasses.addAll(
                    PsiTreeUtil.getChildrenOfTypeAsList(
                        phpNamespace.getStatements(), PhpClass.class));
                return true;
              }
            });

    for (String ns : phpIndex.getChildNamespacesByParentName(namespaceName + "\\")) {
      phpClasses.addAll(
          getPhpClassInsideNamespace(project, phpIndex, namespaceName + "\\" + ns, maxDeep));
    }

    return phpClasses;
  }