public static String get(@NonNull SymbolRequest request) {
        String name = request.getName();
        String title = request.getTitle();
        String tooltip = request.getTooltip();
        String htmlTooltip = request.getHtmlTooltip();
        String classes = request.getClasses();
        String pluginName = request.getPluginName();
        String id = request.getId();

        String identifier = (pluginName == null || pluginName.isBlank()) ? "core" : pluginName;

        String symbol = SYMBOLS
                .computeIfAbsent(identifier, key -> new ConcurrentHashMap<>())
                .computeIfAbsent(name, key -> loadSymbol(identifier, key));
        if ((tooltip != null && !tooltip.isBlank()) && (htmlTooltip == null || htmlTooltip.isBlank())) {
            symbol = symbol.replaceAll("<svg", Matcher.quoteReplacement("<svg tooltip=\"" + Functions.htmlAttributeEscape(tooltip) + "\""));
        }
        if (htmlTooltip != null && !htmlTooltip.isBlank()) {
            symbol = symbol.replaceAll("<svg", Matcher.quoteReplacement("<svg data-html-tooltip=\"" + Functions.htmlAttributeEscape(htmlTooltip) + "\""));
        }
        if (id != null && !id.isBlank()) {
            symbol = symbol.replaceAll("<svg", Matcher.quoteReplacement("<svg id=\"" + Functions.htmlAttributeEscape(id) + "\""));
        }
        if (classes != null && !classes.isBlank()) {
            symbol = symbol.replaceAll("<svg", "<svg class=\"" + Functions.htmlAttributeEscape(classes) + "\"");
        }
        if (title != null && !title.isBlank()) {
            symbol = "<span class=\"jenkins-visually-hidden\">" + Util.xmlEscape(title) + "</span>" + symbol;
        }
        return symbol;
    }
@Test
    @DisplayName("Given a cached symbol, a new request can specify new attributes to use")
    void getSymbol_cachedSymbolAllowsSettingAllAttributes() {
        Symbol.get(new SymbolRequest.Builder()
                           .withName("science")
                           .withTitle("Title")
                           .withTooltip("Tooltip")
                           .withClasses("class1 class2")
                           .withId("id")
                           .build()
        );
        String symbol = Symbol.get(new SymbolRequest.Builder()
                                           .withName("science")
                                           .withTitle("Title2")
                                           .withTooltip("Tooltip2")
                                           .withClasses("class3 class4")
                                           .withId("id2")
                                           .build()
        );

        assertThat(symbol, containsString(SCIENCE_PATH));
        assertThat(symbol, not(containsString("<span class=\"jenkins-visually-hidden\">Title</span>")));
        assertThat(symbol, not(containsString("tooltip=\"Tooltip\"")));
        assertThat(symbol, not(containsString("class=\"class1 class2\"")));
        assertThat(symbol, not(containsString("id=\"id\"")));
        assertThat(symbol, containsString("<span class=\"jenkins-visually-hidden\">Title2</span>"));
        assertThat(symbol, containsString("tooltip=\"Tooltip2\""));
        assertThat(symbol, containsString("class=\"class3 class4\""));
        assertThat(symbol, containsString("id=\"id2\""));
    }