protected static void removeNestedConfigurationPropertyGroups(final List<ConfigurationMetadataProperty> properties,
                                                                  final List<ConfigurationMetadataProperty> groups) {
        var it = properties.iterator();
        while (it.hasNext()) {
            var entry = it.next();
            try {
                val propName = StringUtils.substringAfterLast(entry.getName(), ".");
                val groupName = StringUtils.substringBeforeLast(entry.getName(), ".");
                val res = groups
                    .stream()
                    .filter(g -> g.getName().equalsIgnoreCase(groupName))
                    .findFirst();
                if (res.isPresent()) {
                    var grp = res.get();
                    val className = grp.getType();
                    val clazz = ClassUtils.getClass(className);

                    val names = RelaxedPropertyNames.forCamelCase(propName);
                    names.getValues().forEach(Unchecked.consumer(name -> {
                        val f = ReflectionUtils.findField(clazz, name);
                        if (f != null && f.isAnnotationPresent(NestedConfigurationProperty.class)) {
                            it.remove();
                        }
                    }));
                }
            } catch (final Exception e) {
                throw new RuntimeException(e);
            }
        }
    }
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