docs: void resolvePluginDependencies() throws IOException {
          if (ENABLE_PLUGIN_DEPENDENCIES_VERSION_CHECK) {
              String requiredCoreVersion = getRequiredCoreVersion();
              if (requiredCoreVersion == null) {
                  LOGGER.warning(shortName + " doesn't declare required core version.");
              } else {
                  VersionNumber actualVersion = Jenkins.getVersion();
                  if (actualVersion.isOlderThan(new VersionNumber(requiredCoreVersion))) {
                      versionDependencyError(Messages.PluginWrapper_obsoleteCore(Jenkins.getVersion().toString(), requiredCoreVersion), Jenkins.getVersion().toString(), requiredCoreVersion);
                  }
              }
  
              String minimumJavaVersion = getMinimumJavaVersion();
              if (minimumJavaVersion != null) {
                  JavaSpecificationVersion actualVersion = JavaUtils.getCurrentJavaRuntimeVersionNumber();
                  if (actualVersion.isOlderThan(new JavaSpecificationVersion(minimumJavaVersion))) {
                      versionDependencyError(Messages.PluginWrapper_obsoleteJava(actualVersion.toString(), minimumJavaVersion), actualVersion.toString(), minimumJavaVersion);
                  }
              }
          }
          // make sure dependencies exist
          for (Dependency d : dependencies) {
              PluginWrapper dependency = parent.getPlugin(d.shortName);
              if (dependency == null) {
                  PluginWrapper failedDependency = NOTICE.getPlugin(d.shortName);
                  if (failedDependency != null) {
                      dependencyErrors.put(Messages.PluginWrapper_failed_to_load_dependency(failedDependency.getLongName(), failedDependency.getVersion()), true);
                      break;
                  } else {
                      dependencyErrors.put(Messages.PluginWrapper_missing(d.shortName, d.version), false);
                  }
              } else {
                  if (dependency.isActive()) {
                      if (isDependencyObsolete(d, dependency)) {
                          versionDependencyError(Messages.PluginWrapper_obsolete(dependency.getLongName(), dependency.getVersion(), d.version), dependency.getVersion(), d.version);
                      }
                  } else {
                      if (isDependencyObsolete(d, dependency)) {
                          versionDependencyError(Messages.PluginWrapper_disabledAndObsolete(dependency.getLongName(), dependency.getVersion(), d.version), dependency.getVersion(), d.version);
                      } else {
                          dependencyErrors.put(Messages.PluginWrapper_disabled(dependency.getLongName()), false);
                      }
                  }
  
              }
          }
          // add the optional dependencies that exists
          for (Dependency d : optionalDependencies) {
              PluginWrapper dependency = parent.getPlugin(d.shortName);
              if (dependency != null && dependency.isActive()) {
                  if (isDependencyObsolete(d, dependency)) {
                      versionDependencyError(Messages.PluginWrapper_obsolete(dependency.getLongName(), dependency.getVersion(), d.version), dependency.getVersion(), d.version);
                  } else {
                      dependencies.add(d);
                  }
              }
          }
          if (!dependencyErrors.isEmpty()) {
              NOTICE.addPlugin(this);
              StringBuilder messageBuilder = new StringBuilder();
              messageBuilder.append(Messages.PluginWrapper_failed_to_load_plugin(getLongName(), getVersion())).append(System.lineSeparator());
              for (Iterator<String> iterator = dependencyErrors.keySet().iterator(); iterator.hasNext(); ) {
                  String dependencyError = iterator.next();
                  messageBuilder.append(" - ").append(dependencyError);
                  if (iterator.hasNext()) {
                      messageBuilder.append(System.lineSeparator());
                  }
              }
              throw new IOException(messageBuilder.toString());
          }
      }