public static List<String> getSymbols(Descriptor d, Class extensionPoint, Class target) {

        if (d != null) {
            List<String> symbols = new ArrayList<>();
            // explicit @Symbol annotation on descriptor
            // first is the preferred one as by Symbol contract
            // "The first one is used as the primary identifier for reverse-mapping."
            Symbol s = d.getClass().getAnnotation(Symbol.class);
            if (s != null) {
                symbols.addAll(Arrays.asList(s.value()));
            }

            // extension type Foo is implemented as SomeFoo. => "some"
            final String ext = extensionPoint.getSimpleName();
            final String cn = d.getKlass().toJavaClass().getSimpleName();
            if (cn.endsWith(ext)) {
                symbols.add(normalize(cn.substring(0, cn.length() - ext.length())));
            }

            // extension type Foo is implemented as SomeFooImpl. => "some"
            final String in = extensionPoint.getSimpleName() + "Impl";
            if (cn.endsWith(in)) {
                symbols.add(normalize(cn.substring(0, cn.length() - in.length())));
            }

            // Fall back to simple class name
            symbols.add(normalize(cn));
            return symbols;
        }

        // Fall back to simple class name
        return Collections.singletonList(normalize(target.getSimpleName()));
    }
Retrieve all possible symbols for this descriptor, first one being preferred one.
If a {@link Symbol} annotation is set, all values are accepted the last one being preferred
plugin/src/main/java/io/jenkins/plugins/casc/impl/attributes/DescribableAttribute.java