class ExtensionPointBeanDefinitionParser extends AbstractExtBeanDefinitionParser {

    private static final Logger                             LOGGER       = SofaBootLoggerFactory
                                                                             .getLogger(ExtensionPointBeanDefinitionParser.class);

    public static final String                              CLASS        = "class";

    public static final String                              OBJECT       = "object";

    public static final String                              CONTRIBUTION = "contribution";

    private static final ExtensionPointBeanDefinitionParser INSTANCE     = new ExtensionPointBeanDefinitionParser();

    public ExtensionPointBeanDefinitionParser() {
    }

    public static ExtensionPointBeanDefinitionParser getInstance() {
        return INSTANCE;
    }

    @Override
    protected Class<?> getBeanClass(Element element) {
        return ExtensionPointFactoryBean.class;
    }

    @Override
    protected void parserSubElement(Element element, ParserContext parserContext,
                                    BeanDefinitionBuilder builder) {<FILL_FUNCTION_BODY>}

    @Override
    public String supportTagName() {
        return "extension-point";
    }
}

        // determine nested/referred beans
        // only referred bean is supported now
        Object target = null;
        if (element.hasAttribute(REF)) {
            target = new RuntimeBeanReference(element.getAttribute(REF));
        }

        NodeList nl = element.getChildNodes();
        final Set<String> contributions = new LinkedHashSet<String>();
        // parse all sub elements
        for (int i = 0; i < nl.getLength(); i++) {
            Node node = nl.item(i);
            if (node instanceof Element subElement) {
                // sofa:object
                if (OBJECT.equals(subElement.getLocalName())) {
                    parseCustomAttributes(subElement, parserContext, builder,
                            (parent, attribute, builder1, parserContext1) -> {

                                String name = attribute.getLocalName();
                                if (CLASS.equals(name)) {
                                    contributions.add(attribute.getValue());
                                } else {
                                    builder1.addPropertyValue(
                                        Conventions.attributeNameToPropertyName(name),
                                        attribute.getValue());
                                }
                            });
                } else {
                    if (element.hasAttribute(REF)) {
                        LOGGER.error("nested bean definition/reference cannot be used when attribute 'ref' is specified");
                    }
                    target = parserContext.getDelegate().parsePropertySubElement(subElement,
                        builder.getBeanDefinition());
                }
            }
        }
        builder.addPropertyValue(CONTRIBUTION, contributions);
        // do we have a bean reference ?
        if (target instanceof RuntimeBeanReference) {
            builder.addPropertyValue("targetBeanName",
                ((RuntimeBeanReference) target).getBeanName());
        }
        // or a nested bean? -- not supported yet
        else {
            builder.addPropertyValue("target", target);
        }
    
<methods>public non-sealed void <init>() <variables>private static final java.lang.String BEAN_CLASS_LOADER_WRAPPER,public static final java.lang.String REF