class ExtensionBuilder {

    private ExtensionInternal extensionInternal;

    private ExtensionBuilder() {

    }

    /**
     * Get extension
     * @return extension
     */
    public Extension getExtension() {
        return this.extensionInternal;
    }

    /**
     * create extension builder
     *
     * @param extensionPoint     extension point name
     * @param element            element
     * @param applicationContext application context
     * @return extension builder
     */
    public static ExtensionBuilder genericExtension(String extensionPoint, Element element,
                                                    ApplicationContext applicationContext,
                                                    ClassLoader appClassLoader) {<FILL_FUNCTION_BODY>}

    /**
     * Set element
     *
     * @param element element of the extension
     */
    public void setElement(Element element) {
        this.extensionInternal.setElement(element);
    }

    /**
     * Set target component name
     *
     * @param target target component name
     */
    public void setExtensionPoint(ComponentName target) {
        this.extensionInternal.setTargetComponentName(target);
    }

}

        ExtensionBuilder builder = new ExtensionBuilder();
        builder.extensionInternal = new SpringExtensionImpl(null, extensionPoint, element,
            appClassLoader, applicationContext);
        return builder;
    
<no_super_class>