//-------------------------------------------------------------------------
//JAVA TO C# CONVERTER TODO TASK: Most Java annotations will not have direct .NET equivalent attributes:
//ORIGINAL LINE: @ImmutableConstructor private DiscountFxForwardRates(com.opengamma.strata.basics.currency.CurrencyPair currencyPair, com.opengamma.strata.basics.currency.FxRateProvider fxRateProvider, com.opengamma.strata.pricer.DiscountFactors baseCurrencyDiscountFactors, com.opengamma.strata.pricer.DiscountFactors counterCurrencyDiscountFactors)
        private DiscountFxForwardRates(CurrencyPair currencyPair, FxRateProvider fxRateProvider, DiscountFactors baseCurrencyDiscountFactors, DiscountFactors counterCurrencyDiscountFactors)
        {
            JodaBeanUtils.notNull(currencyPair, "currencyPair");
            JodaBeanUtils.notNull(fxRateProvider, "fxRateProvider");
            JodaBeanUtils.notNull(baseCurrencyDiscountFactors, "baseCurrencyDiscountFactors");
            JodaBeanUtils.notNull(counterCurrencyDiscountFactors, "counterCurrencyDiscountFactors");
            if (!baseCurrencyDiscountFactors.Currency.Equals(currencyPair.Base))
            {
                throw new System.ArgumentException(Messages.format("Index base currency {} did not match discount factor base currency {}", currencyPair.Base, baseCurrencyDiscountFactors.Currency));
            }
            if (!counterCurrencyDiscountFactors.Currency.Equals(currencyPair.Counter))
            {
                throw new System.ArgumentException(Messages.format("Index counter currency {} did not match discount factor counter currency {}", currencyPair.Counter, counterCurrencyDiscountFactors.Currency));
            }
            if (!baseCurrencyDiscountFactors.ValuationDate.Equals(counterCurrencyDiscountFactors.ValuationDate))
            {
                throw new System.ArgumentException("Curves must have the same valuation date");
            }
            this.currencyPair   = currencyPair;
            this.fxRateProvider = fxRateProvider;
            this.baseCurrencyDiscountFactors    = baseCurrencyDiscountFactors;
            this.counterCurrencyDiscountFactors = counterCurrencyDiscountFactors;
            this.valuationDate = baseCurrencyDiscountFactors.ValuationDate;
            this.paramCombiner = ParameterizedDataCombiner.of(baseCurrencyDiscountFactors, counterCurrencyDiscountFactors);
        }
//JAVA TO C# CONVERTER TODO TASK: Most Java annotations will not have direct .NET equivalent attributes:
//ORIGINAL LINE: @ImmutableConstructor private SabrParameters(com.opengamma.strata.market.curve.Curve alphaCurve, com.opengamma.strata.market.curve.Curve betaCurve, com.opengamma.strata.market.curve.Curve rhoCurve, com.opengamma.strata.market.curve.Curve nuCurve, com.opengamma.strata.market.curve.Curve shiftCurve, SabrVolatilityFormula sabrFormula)
        private SabrParameters(Curve alphaCurve, Curve betaCurve, Curve rhoCurve, Curve nuCurve, Curve shiftCurve, SabrVolatilityFormula sabrFormula)
        {
            validate(alphaCurve, "alphaCurve", ValueType.SABR_ALPHA);
            validate(betaCurve, "betaCurve", ValueType.SABR_BETA);
            validate(rhoCurve, "rhoCurve", ValueType.SABR_RHO);
            validate(nuCurve, "nuCurve", ValueType.SABR_NU);
            ArgChecker.notNull(shiftCurve, "shiftCurve");
            ArgChecker.notNull(sabrFormula, "sabrFormula");
            DayCount dayCount = alphaCurve.Metadata.findInfo(CurveInfoType.DAY_COUNT).orElseThrow(() => new System.ArgumentException("Incorrect curve metadata, missing DayCount"));

            validate(betaCurve, dayCount);
            validate(rhoCurve, dayCount);
            validate(nuCurve, dayCount);
            validate(shiftCurve, dayCount);

            this.alphaCurve            = alphaCurve;
            this.betaCurve             = betaCurve;
            this.rhoCurve              = rhoCurve;
            this.nuCurve               = nuCurve;
            this.shiftCurve            = shiftCurve;
            this.sabrVolatilityFormula = sabrFormula;
            this.dayCount              = dayCount;
            this.paramCombiner         = ParameterizedDataCombiner.of(alphaCurve, betaCurve, rhoCurve, nuCurve, shiftCurve);
        }