docs: @SuppressWarnings("rawtypes")
      static String validateProductMatches(String feature, String dependency, List productMatchers, File installDir, boolean installingAsset) {
          wlp.lib.extract.ReturnCode validInstallRC = SelfExtractor.validateProductMatches(installDir, productMatchers);
          String errMsg = "";
          if (validInstallRC != wlp.lib.extract.ReturnCode.OK) {
              String productName = InstallConstants.PRODUCTNAME;
              Object[] params = validInstallRC.getParameters();
              if (validInstallRC.getMessageKey().equals("invalidVersion") || validInstallRC.getMessageKey().equals("invalidEdition")) {
                  int productVersion = 0;
                  int matchVersion = 1;
                  int productEdition = 2;
                  int matchEdition = 3;
  
                  if (validInstallRC.getMessageKey().equals("invalidEdition")) {
                      productVersion = 2;
                      matchVersion = 3;
                      productEdition = 0;
                      matchEdition = 1;
                  }
                  String version = (String) params[productVersion];
                  String appliesToVersion = (String) params[matchVersion];
                  if (appliesToVersion == null || version.equals(appliesToVersion))
                      appliesToVersion = "";
  
                  @SuppressWarnings("unchecked")
                  List<String> editions = (List<String>) params[matchEdition];
                  String edition = InstallUtils.getEditionName(installDir, (String) params[productEdition]);
                  StringBuilder applicableProducts = new StringBuilder();
                  applicableProducts.append(InstallUtils.NEWLINE);
  
                  //no editions requirement
                  if (editions == null || editions.size() == 0) {
                      editions = InstallUtils.ALL_EDITIONS;
                  }
  
                  if (((String) params[productEdition]).equalsIgnoreCase("Liberty Early Access")) {
                      editions = new ArrayList<String>();
                      editions.add("Early Access");
                  }
  
                  Collections.sort(editions);
                  Map<String, String> productMap = new HashMap<String, String>();
                  applicableProducts.append(InstallUtils.NEWLINE);
                  for (String e : editions) {
                      String editionName = "";
                      editionName = InstallUtils.getEditionName(e);
                      if (!productMap.containsKey(editionName)) {
                          String product = "- " + productName + (editionName.isEmpty() ? "" : " ") + editionName + " " + appliesToVersion;
                          productMap.put(editionName, product);
                          applicableProducts.append(product);
                          applicableProducts.append(InstallUtils.NEWLINE);
                      }
                  }
                  applicableProducts.append(InstallUtils.NEWLINE);
                  //installing asset has invalid product version and/or edition
                  if (dependency == null || dependency.isEmpty()) {
                      if (appliesToVersion.equals("")) { //installing asset has invalid product edition only
  
                          if (((String) params[productEdition]).equalsIgnoreCase("Open_Web") && productName.equalsIgnoreCase("IBM WebSphere Application Server Liberty")) {
                              errMsg = Messages.INSTALL_KERNEL_MESSAGES.getLogMessage(installingAsset ? "ERROR_ASSET_INVALID_PRODUCT_EDITION" : "ERROR_INVALID_PRODUCT_EDITION_FOR_OPEN_LIBERTY_FEATURE",
                                                                                      new Object[] { feature });
                          } else {
  
                              errMsg = Messages.INSTALL_KERNEL_MESSAGES.getLogMessage(installingAsset ? "ERROR_ASSET_INVALID_PRODUCT_EDITION" : "ERROR_INVALID_PRODUCT_EDITION",
                                                                                      new Object[] { feature, productName, edition, applicableProducts.toString(), productName,
                                                                                                     edition });
                          }
  
                      } else {
                          errMsg = Messages.INSTALL_KERNEL_MESSAGES.getLogMessage(installingAsset ? "ERROR_ASSET_INVALID_PRODUCT_EDITION_VERSION" : "ERROR_INVALID_PRODUCT_EDITION_VERSION",
                                                                                  new Object[] { feature, productName, edition, version, applicableProducts.toString() });
                      }
                  } else
                      errMsg = Messages.INSTALL_KERNEL_MESSAGES.getLogMessage(installingAsset ? "ERROR_ASSET_DEPENDENT_INVALID_VERSION_EDITION" : "ERROR_DEPENDENT_INVALID_VERSION_EDITION",
                                                                              new Object[] { feature, dependency, productName, edition, version,
                                                                                             applicableProducts.toString() });
  
              } else if (validInstallRC.getMessageKey().equals("invalidInstallType")) {
                  errMsg = Messages.INSTALL_KERNEL_MESSAGES.getLogMessage(installingAsset ? "ERROR_ASSET_INVALID_PRODUCT_INSTALLTYPE" : "ERROR_INVALID_PRODUCT_INSTALLTYPE",
                                                                          new Object[] { feature, params[0], params[1] });
              }
  
              if (errMsg.isEmpty()) {
                  errMsg = Messages.INSTALL_KERNEL_MESSAGES.getLogMessage(installingAsset ? "ERROR_ASSET_NOT_APPLICABLE" : "ERROR_FEATURE_NOT_APPLICABLE", feature,
                                                                          installDir.getAbsolutePath(),
                                                                          validInstallRC.getErrorMessage());
              }
          }
          return errMsg;
      }