@Override
  protected String @NotNull [] migrateFontSettingImpl(@NotNull String family) {
    if (!myFamilies.isEmpty()) {
      if (FIRA_CODE_MIGRATION_MAP.containsKey(family)) {
        if (!myFamilies.containsKey(family)) { // check for new enough JBR
          return FIRA_CODE_MIGRATION_MAP.get(family);
        }
      }
      else {
        try {
          assert GET_FONT_2D_METHOD != null;
          assert GET_TYPO_FAMILY_METHOD != null;
          assert GET_TYPO_SUBFAMILY_METHOD != null;

          Font baseFont = new Font(family, Font.PLAIN, 1);
          String baseFamily = baseFont.getFamily();
          Font2D baseFont2D = (Font2D)GET_FONT_2D_METHOD.invoke(baseFont);
          String baseTypoFamily = (String)GET_TYPO_FAMILY_METHOD.invoke(baseFont2D);
          String baseTypoSubfamily = (String)GET_TYPO_SUBFAMILY_METHOD.invoke(baseFont2D);

          Font boldFont = new Font(family, Font.BOLD, 1);
          String boldFamily = boldFont.getFamily();
          Font2D boldFont2D = (Font2D)GET_FONT_2D_METHOD.invoke(boldFont);
          String boldTypoFamily = (String)GET_TYPO_FAMILY_METHOD.invoke(boldFont2D);
          String boldTypoSubfamily = (String)GET_TYPO_SUBFAMILY_METHOD.invoke(boldFont2D);

          if (!family.equals(baseFamily) || !family.equals(boldFamily)) {
            LOG.info("Cannot migrate " + family + ": unexpected resolved families - " + baseFamily + ", " + boldFamily);
          }
          else if (!Objects.equals(baseTypoFamily, boldTypoFamily)) {
            LOG.info("Cannot migrate " + family + ": normal and bold variations resolve to different typographic families - "
                     + baseTypoFamily + ", " + boldTypoFamily);
          }
          else {
            FontFamily fontFamily = myFamilies.get(baseTypoFamily);
            if (fontFamily == null) {
              LOG.info("Cannot migrate " + family + ": typographic font family not found - " + baseTypoFamily);
            }
            else if (!fontFamily.hasSubFamily(baseTypoSubfamily)) {
              LOG.info("Cannot migrate " + family + ": subfamily " + baseTypoSubfamily
                       + " not found in typographic font family " + baseTypoFamily);
            }
            else if (!fontFamily.hasSubFamily(boldTypoSubfamily)) {
              LOG.info("Cannot migrate " + family + ": subfamily " + boldTypoSubfamily
                       + " not found in typographic font family " + baseTypoFamily);
            }
            else {
              return new String[]{baseTypoFamily, baseTypoSubfamily,
                Objects.equals(baseTypoSubfamily, boldTypoSubfamily) ? null : boldTypoSubfamily};
            }
          }
        }
        catch (Throwable e) {
          LOG.error(e);
        }
      }
    }
    return super.migrateFontSettingImpl(family);
  }
@Override
  protected String @NotNull [] migrateFontSettingImpl(@NotNull String family)