code: protected MessageResourceBundle getBundleResolvedExtends(String appMessageName, List<String> extendsNameList, Locale locale) {
          final MessageResourceBundle appBundle = findBundleSimply(appMessageName, locale);
          if (extendsNameList.isEmpty()) { // no extends, no logic
              return appBundle;
          }
          if (isAlreadyExtends(appBundle)) { // means the bundle is cached
              return appBundle;
          }
          synchronized (this) { // synchronize to set up
              if (isAlreadyExtends(appBundle)) {
                  return appBundle;
              }
              // set up extends references to the application bundle specified as argument
              // so the bundle has been resolved extends after calling
              setupExtendsReferences(appMessageName, extendsNameList, locale, appBundle);
          }
          return appBundle;
      }
docs: Resolve the extends bundle, basically called by {@link #getBundle(Locale)}. <br>
  Returned bundle has merged properties for application and extends messages. <br>
  You can get your message by normal way.
  @param appMessageName The message name for application. (NotNull)
  @param extendsNameList The list of extends-message name. (NotNull, EmptyAllowed)
  @param locale The locale of current request. (NullAllowed: when system default locale)
  @return The found bundle that has extends hierarchy. (NotNull)