protected void processNestedTypes(final List<ConfigurationMetadataProperty> properties, final List<ConfigurationMetadataProperty> groups) {
        val collectedProps = new HashSet<ConfigurationMetadataProperty>();
        val collectedGroups = new HashSet<ConfigurationMetadataProperty>();
        LOGGER.trace("Processing nested configuration types...");
        properties
            .forEach(Unchecked.consumer(p -> {
                var indexBrackets = false;
                var typeName = StringUtils.EMPTY;

                if (NESTED_TYPE_PATTERN1.matcher(p.getType()).matches()) {
                    val matcher = NESTED_TYPE_PATTERN1.matcher(p.getType());
                    indexBrackets = matcher.matches();
                    typeName = matcher.group(1);
                } else if (NESTED_TYPE_PATTERN2.matcher(p.getType()).matches()) {
                    val matcher = NESTED_TYPE_PATTERN2.matcher(p.getType());
                    indexBrackets = matcher.matches();
                    typeName = matcher.group(2);
                    val result = ConfigurationMetadataClassSourceLocator.findClassBySimpleNameInPackage(typeName, "org.apereo.cas");
                    if (result.isPresent()) {
                        typeName = result.get().getName();
                    }

                }

                if (!typeName.isEmpty()) {
                    val typePath = ConfigurationMetadataClassSourceLocator.buildTypeSourcePath(projectDirectory.getCanonicalPath(), typeName);
                    LOGGER.debug("Matched Type [{}], Property [{}], Type: [{}], Path [{}]", typeName, p.getName(), p.getType(), typePath);
                    val parser = new ConfigurationMetadataUnitParser(projectDirectory.getCanonicalPath());
                    parser.parseCompilationUnit(collectedProps, collectedGroups, p, typePath, typeName, indexBrackets);
                }
            }));

        properties.addAll(collectedProps);
        groups.addAll(collectedGroups);
    }
Main.

@param args the args
@throws Exception the exception
api/cas-server-core-api-configuration-model/src/main/java/org/apereo/cas/configuration/metadata/ConfigurationMetadataGenerator.java