class PluginInfoUtil {
    private static Pattern pattern = Pattern.compile("\\[\\S+\\]");

    public static List<Map<String, String>> assembleAll(String text, String filters) {
        List<String> filterList = StringUtil.splitToList(filters, ",");

        return assembleAll(text, filterList);
    }

    public static List<Map<String, String>> assembleAll(String text, List<String> filterList) {<FILL_FUNCTION_BODY>}

    public static Map<String, String> assembleSingle(String text, String filters) {
        List<String> filterList = StringUtil.splitToList(filters, ",");

        return assembleSingle(text, filterList);
    }

    public static Map<String, String> assembleSingle(String text, List<String> filterList) {
        text = StringUtils.replace(text, "][", "] [");
        Matcher matcher = pattern.matcher(text);

        Map<String, String> map = new LinkedHashMap<String, String>();
        while (matcher.find()) {
            String group = matcher.group();
            String value = StringUtils.substringBetween(group, "[", "]");
            String[] array = StringUtils.split(value, "=");
            if (CollectionUtils.isEmpty(filterList) || filterList.contains(array[0])) {
                map.put(array[0], array[1]);
            }
        }

        return map;
    }

    public static String extractAll(String text, String filters) {
        List<String> filterList = StringUtil.splitToList(filters, ",");

        return extractAll(text, filterList);
    }

    public static String extractAll(String text, List<String> filterList) {
        if (CollectionUtils.isEmpty(filterList)) {
            return text;
        }

        StringBuilder stringBuilder = new StringBuilder();

        List<Map<String, String>> list = assembleAll(text, filterList);
        for (Map<String, String> map : list) {
            for (Map.Entry<String, String> entry : map.entrySet()) {
                String key = entry.getKey();
                String value = entry.getValue();
                stringBuilder.append("[").append(key).append("=").append(value).append("]");
            }
            stringBuilder.append(" -> ");
        }

        stringBuilder.delete(stringBuilder.length() - 4, stringBuilder.length());

        return stringBuilder.toString();
    }

    public static String substringSingle(String text, String keyword) {
        if (text.contains("[" + keyword + "=")) {
            String value = text.substring(text.indexOf("[" + keyword + "=") + keyword.length() + 2);

            return value.substring(0, value.indexOf("]"));
        }

        return null;
    }
}

        List<Map<String, String>> list = new ArrayList<Map<String, String>>();

        List<String> singleList = StringUtil.splitToList(text, " -> ");
        for (String value : singleList) {
            Map<String, String> map = assembleSingle(value, filterList);

            list.add(map);
        }

        return list;
    
<no_super_class>