public String resolveProperty(
      PropertyExpansionContext context, String name, boolean globalOverride) {
    String result =
        ResolverUtils.checkForExplicitReference(
            name,
            PropertyExpansion.GLOBAL_REFERENCE,
            PropertyExpansionUtils.getGlobalProperties(),
            context,
            false);
    if (result != null) {
      return result;
    }

    result =
        ResolverUtils.checkForExplicitReference(
            name,
            PropertyExpansion.SYSTEM_REFERENCE,
            systemPropertyHolder,
            context,
            globalOverride);
    if (result != null) {
      return result;
    }

    result =
        ResolverUtils.checkForExplicitReference(
            name,
            PropertyExpansion.ENV_REFERENCE,
            environmentPropertyHolder,
            context,
            globalOverride);
    if (result != null) {
      return result;
    }

    // if not, check for explicit global property (stupid 1.7.6 syntax that
    // should be removed..)
    if (name.length() > 2
        && name.charAt(0) == PropertyExpansion.PROPERTY_SEPARATOR
        && name.charAt(1) == PropertyExpansion.PROPERTY_SEPARATOR) {
      return PropertyExpansionUtils.getGlobalProperty(name.substring(2));
    } else {
      return PropertyExpansionUtils.getGlobalProperty(name);
    }
  }