docs: private String processProjectObject(final Object project) {
          if (project == null || projectSet.contains(project)
              || !isCastable("org.eclipse.persistence.sessions.Project", project.getClass())) {
              // Null or Already processed, so skip.
              return getInstanceClassAndAddress(project);
          }
  
          projectSet.add(project);
  
          final ByteArrayOutputStream baos = new ByteArrayOutputStream();
          final PrintWriter out = new PrintWriter(baos, true);
  
          try {
              out.println("   " + getInstanceClassAndAddress(project));
              out.println("      .toString = " + poa(project));
  
              // org.eclipse.persistence.sessions.Project Fields
              out.println("      .name = " + reflectObjValue(project, "name"));
              out.println("      .datasourceLogin = " + reflectObjValue(project, "datasourceLogin"));
              final Object descriptorsMap = reflectObjValue(project, "descriptors");
              out.println("      .descriptors = " + poa(descriptorsMap, "         ", true)); // Map<Class, ClassDescriptor>
              try {
                  if (descriptorsMap != null && (!((Map) descriptorsMap).isEmpty())) {
                      processClassDescriptorCollection(((Map) descriptorsMap).values());
                  }
              } catch (Throwable t) {
              }
              final Object orderedDescriptors = reflectObjValue(project, "orderedDescriptors");
              out.println("      .orderedDescriptors = " + poa(orderedDescriptors, "         ", true)); // List<ClassDescriptor>
              try {
                  if (orderedDescriptors != null && !(((List) orderedDescriptors).isEmpty())) {
                      processClassDescriptorCollection(orderedDescriptors);
                  }
              } catch (Throwable t) {
              }
              out.println("      .multitenantPolicy = " + reflectObjValue(project, "multitenantPolicy"));
              out.println("      .defaultReadOnlyClasses = " + poa(reflectObjValue(project, "defaultReadOnlyClasses"), "         ", true)); // Vector
              out.println("      .aliasDescriptors = " + poa(reflectObjValue(project, "aliasDescriptors"), "         ", true)); // Map
              out.println("      .hasIsolatedClasses = " + reflectObjValue(project, "hasIsolatedClasses"));
              out.println("      .hasNonIsolatedUOWClasses = " + reflectObjValue(project, "hasNonIsolatedUOWClasses"));
              out.println("      .hasGenericHistorySupport = " + reflectObjValue(project, "hasGenericHistorySupport"));
              out.println("      .hasProxyIndirection = " + reflectObjValue(project, "hasProxyIndirection"));
              out.println("      .sqlResultSetMappings = " + poa(reflectObjValue(project, "sqlResultSetMappings"), "         ", true)); // Map<String, SQLResultSetMapping>
              out.println("      .jpqlParseCache = " + reflectObjValue(project, "jpqlParseCache"));
              out.println("      .defaultTemporalMutable = " + reflectObjValue(project, "defaultTemporalMutable"));
              out.println("      .hasMappingsPostCalculateChangesOnDeleted = " + reflectObjValue(project, "hasMappingsPostCalculateChangesOnDeleted"));
              out.println("      .defaultIdentityMapClass = " + reflectObjValue(project, "defaultIdentityMapClass"));
              out.println("      .defaultIdentityMapSize = " + reflectObjValue(project, "defaultIdentityMapSize"));
              out.println("      .defaultCacheIsolation = " + reflectObjValue(project, "defaultCacheIsolation"));
              out.println("      .defaultQueryResultsCachePolicy = " + reflectObjValue(project, "defaultQueryResultsCachePolicy"));
              out.println("      .defaultIdValidation = " + reflectObjValue(project, "defaultIdValidation"));
              out.println("      .queries = " + poa(reflectObjValue(project, "queries"), "         ", true)); // List<DatabaseQuery>
              out.println("      .attributeGroups = " + poa(reflectObjValue(project, "attributeGroups"), "         ", true)); // Map<String, AttributeGroup>
              out.println("      .jpaQueries = " + poa(reflectObjValue(project, "jpaQueries"), "         ", true)); // List
              out.println("      .jpaTablePerTenantQueries = " + poa(reflectObjValue(project, "jpaTablePerTenantQueries"), "         ", true)); // List
              out.println("      .allowNativeSQLQueries = " + reflectObjValue(project, "allowNativeSQLQueries"));
              out.println("      .allowTablePerMultitenantDDLGeneration = " + reflectObjValue(project, "allowTablePerMultitenantDDLGeneration"));
              out.println("      .allowSQLDeferral = " + reflectObjValue(project, "allowSQLDeferral"));
              final Object mappedSuperclassDescriptors = reflectObjValue(project, "mappedSuperclassDescriptors");
              out.println("      .mappedSuperclassDescriptors = " + poa(mappedSuperclassDescriptors, "         ", true)); // Map<String, ClassDescriptor>
              try {
                  if (mappedSuperclassDescriptors != null && (!((Map) mappedSuperclassDescriptors).isEmpty())) {
                      processClassDescriptorCollection(((Map) mappedSuperclassDescriptors).values());
                  }
              } catch (Throwable t) {
              }
              out.println("      .metamodelIdClassMap = " + poa(reflectObjValue(project, "metamodelIdClassMap"), "         ", true)); // Map
              out.println("      .partitioningPolicies = " + poa(reflectObjValue(project, "partitioningPolicies"), "         ", true)); // Map
              out.println("      .descriptorsLock = " + reflectObjValue(project, "descriptorsLock"));
              out.println("      .vpdIdentifier = " + reflectObjValue(project, "vpdIdentifier"));
              out.println("      .vpdLastIdentifierClassName = " + reflectObjValue(project, "vpdLastIdentifierClassName"));
              out.println("      .classNamesForWeaving = " + poa(reflectObjValue(project, "classNamesForWeaving"), "         ", true)); // Collection
              out.println("      .structConverters = " + poa(reflectObjValue(project, "structConverters"), "         ", true)); // Collection
          } catch (Throwable t) {
              FFDCFilter.processException(t, FFDCCN + ".processSessionInfoObject", "279");
          } finally {
              projectDiagMap.put(project, baos.toString());
          }
  
          return getInstanceClassAndAddress(project);
      }