void (@NotNull final Extension extension, @NotNull final DomExtensionsRegistrar registrar) { final ExtensionPoint extensionPoint = extension.getExtensionPoint(); if (extensionPoint == null) return; final String interfaceName = extensionPoint.getInterface().getStringValue(); if (interfaceName != null) { final DomExtension implementationAttribute = registrar.registerGenericAttributeValueChildExtension(IMPLEMENTATION_XML_NAME, PsiClass.class) .setConverter(CLASS_CONVERTER) .addCustomAnnotation(new MyImplementationExtendClass(interfaceName)) .addCustomAnnotation(MyRequired.INSTANCE); final PsiClass interfaceClass = extensionPoint.getInterface().getValue(); if (interfaceClass != null) { implementationAttribute.setDeclaringElement(interfaceClass); } else { implementationAttribute.setDeclaringElement(extensionPoint); } registerXmlb(registrar, interfaceClass, Collections.emptyList()); } else { final PsiClass beanClass = extensionPoint.getBeanClass().getValue(); registerXmlb(registrar, beanClass, extensionPoint.getWithElements()); } }