private static ElementInfo mapClassInfo(final ClassInfo elementClassInfo) {
        final Class<? extends Element> clazz = (Class<? extends Element>) elementClassInfo.loadClass();
        if (!clazz.isInterface()
                && !Modifier.isAbstract(clazz.getModifiers())
                && !clazz.getSimpleName().startsWith("Abstract")
                && clazz.isAnnotationPresent(ConfigurableElement.class)) {

            final ConfigurableElement elementAnno = clazz.getAnnotation(ConfigurableElement.class);

            final String description = getStringValue(elementAnno.description());
            final String iconFileName = getStringValue(elementAnno.icon().getRelativePathStr());
            final String type = getStringValue(elementAnno.type());
            final Category category = elementAnno.category();
            final Set<String> roles = new HashSet<>(Arrays.asList(elementAnno.roles()));
            final List<PropertyInfo> propertyInfoList = getPropertyInfoList(clazz);

            return new ElementInfo(clazz, type, iconFileName, category, description, roles, propertyInfoList);
        } else {
            return null;
        }
    }
This will modify the content of the file
{@code [this repo]/../stroom-docs/layouts/shortcodes/pipe-elm.html}
stroom-app/src/test/java/stroom/app/docs/GeneratePipelineElementsDoc.java