DomFileDescription<?> getDescription() {
    DomFileDescription<?> instance = lazyInstance;
    if (instance != null) {
      return instance;
    }

    instance = ApplicationManager.getApplication().instantiateClass(implementation, pluginDescriptor);
    if (Strings.isEmpty(rootTagName)) {
      if (!instance.acceptsOtherRootTagNames()) {
        throw new PluginException(
          implementation + " should either specify 'rootTagName' in XML, or return true from 'acceptsOtherRootTagNames'",
          pluginDescriptor.getPluginId());
      }
    }
    else if (!rootTagName.equals(instance.getRootTagName())) {
      throw new PluginException(implementation + " XML declaration should have '" + instance.getRootTagName() + "' for 'rootTagName'",
                                pluginDescriptor.getPluginId());
    }

    try {
      DomApplicationComponent.getInstance().initDescription(instance);
      lazyInstance = instance;
    }
    catch (ProcessCanceledException | PluginException e) {
      throw e;
    }
    catch (Exception e) {
      throw new PluginException(e, pluginDescriptor.getPluginId());
    }
    return instance;
  }
DomFileDescription<?> getDescription()