private static double innerCheckInvariantD( final double value, final boolean condition, final DoubleFunction<String> describer) { if (!condition) { throw failed( Double.valueOf(value), singleViolation(applyDescriberDChecked(value, describer))); } return value; }
private static int innerCheckI( final int value, final boolean condition, final IntFunction<String> describer) { if (!condition) { throw failed( Integer.valueOf(value), singleViolation(applyDescriberIChecked(value, describer))); } return value; }
private static long innerCheckL( final long value, final boolean condition, final LongFunction<String> describer) { if (!condition) { throw failed( Long.valueOf(value), singleViolation(applyDescriberLChecked(value, describer))); } return value; }
/** * <p>Evaluate the given {@code predicate} using {@code value} as input.</p> * * <p>The function throws {@link PreconditionViolationException} if the * predicate is false.</p> * * @param value The value * @param predicate The predicate * @param describer A describer for the predicate * @param <T> The type of values * * @return value * * @throws PreconditionViolationException If the predicate is false */ public static <T> T checkPrecondition( final T value, final Predicate<T> predicate, final Function<T, String> describer) { final boolean ok; try { ok = predicate.test(value); } catch (final Throwable e) { throw failed(value, singleViolation(failedPredicate(e))); } return innerCheck(value, ok, describer); }
static String applySupplierChecked( final Supplier<String> message) { try { return message.get(); } catch (final Throwable e) { return failedDescriber(e); } }
static Violations innerCheckAllDouble( final double value, final ContractDoubleConditionType[] conditions) { Violations violations = null; for (int index = 0; index < conditions.length; ++index) { final ContractDoubleConditionType condition = conditions[index]; final DoublePredicate predicate = condition.predicate(); final boolean ok; final int count = conditions.length; try { ok = predicate.test(value); } catch (final Throwable e) { violations = maybeAllocate(violations, count); violations.messages()[index] = failedPredicate(e); violations.countUp(); continue; } if (!ok) { violations = maybeAllocate(violations, count); violations.messages()[index] = applyDescriberDChecked(value, condition.describer()); violations.countUp(); } } return violations; }
static Violations innerCheckAllInt( final int value, final ContractIntConditionType[] conditions) { Violations violations = null; for (int index = 0; index < conditions.length; ++index) { final ContractIntConditionType condition = conditions[index]; final IntPredicate predicate = condition.predicate(); final boolean ok; final int count = conditions.length; try { ok = predicate.test(value); } catch (final Throwable e) { violations = maybeAllocate(violations, count); violations.messages()[index] = failedPredicate(e); violations.countUp(); continue; } if (!ok) { violations = maybeAllocate(violations, count); violations.messages()[index] = applyDescriberIChecked(value, condition.describer()); violations.countUp(); } } return violations; }
static Violations innerCheckAllLong( final long value, final ContractLongConditionType[] conditions) { Violations violations = null; for (int index = 0; index < conditions.length; ++index) { final ContractLongConditionType condition = conditions[index]; final LongPredicate predicate = condition.predicate(); final boolean ok; final int count = conditions.length; try { ok = predicate.test(value); } catch (final Throwable e) { violations = maybeAllocate(violations, count); violations.messages()[index] = failedPredicate(e); violations.countUp(); continue; } if (!ok) { violations = maybeAllocate(violations, count); violations.messages()[index] = applyDescriberLChecked(value, condition.describer()); violations.countUp(); } } return violations; }
static <T> Violations innerCheckAll( final T value, final ContractConditionType<T>[] conditions) { Violations violations = null; for (int index = 0; index < conditions.length; ++index) { final ContractConditionType<T> condition = conditions[index]; final Predicate<T> predicate = condition.predicate(); final boolean ok; final int count = conditions.length; try { ok = predicate.test(value); } catch (final Throwable e) { violations = maybeAllocate(violations, count); violations.messages()[index] = failedPredicate(e); violations.countUp(); continue; } if (!ok) { violations = maybeAllocate(violations, count); violations.messages()[index] = applyDescriberChecked(value, condition.describer()); violations.countUp(); } } return violations; }
private static <T> T innerCheck( final T value, final boolean condition, final Function<T, String> describer) { if (!condition) { throw failed( value, singleViolation(applyDescriberChecked(value, describer))); } return value; }
/** * A specialized version of {@link #checkPrecondition(Object, boolean, * Function)} that does not mention an input value. * * @param condition The predicate * @param message The predicate description supplier * * @throws PreconditionViolationException Iff {@code predicate == false} */ public static void checkPrecondition( final boolean condition, final Supplier<String> message) throws PreconditionViolationException { if (!condition) { throw failed( "<unspecified>", singleViolation(applySupplierChecked(message))); } }
static <T> String failedPredicate( final Throwable exception) { return failedApply( exception, "Exception raised whilst evaluating predicate: "); } }
private static String failedApply( final Throwable exception, final String prefix) { if (exception instanceof Error) { throw (Error) exception; } final StringBuilder sb = new StringBuilder(128); sb.append(prefix); sb.append(exception.getClass()); sb.append(": "); sb.append(exception.getMessage()); sb.append(System.lineSeparator()); sb.append(System.lineSeparator()); stackTraceToStringBuilder(exception, sb); return sb.toString(); }
/** * <p>Evaluate the given {@code predicate} using {@code value} as input.</p> * * <p>The function throws {@link PreconditionViolationException} if the * predicate is false.</p> * * @param value The value * @param predicate The predicate * @param describer A describer for the predicate * @param <T> The type of values * * @return value * * @throws PreconditionViolationException If the predicate is false */ public static <T> T checkPrecondition( final T value, final Predicate<T> predicate, final Function<T, String> describer) { final boolean ok; try { ok = predicate.test(value); } catch (final Throwable e) { throw failed(value, singleViolation(failedPredicate(e))); } return innerCheck(value, ok, describer); }
static String applySupplierChecked( final Supplier<String> message) { try { return message.get(); } catch (final Throwable e) { return failedDescriber(e); } }
static Violations innerCheckAllDouble( final double value, final ContractDoubleConditionType[] conditions) { Violations violations = null; for (int index = 0; index < conditions.length; ++index) { final ContractDoubleConditionType condition = conditions[index]; final DoublePredicate predicate = condition.predicate(); final boolean ok; final int count = conditions.length; try { ok = predicate.test(value); } catch (final Throwable e) { violations = maybeAllocate(violations, count); violations.messages()[index] = failedPredicate(e); violations.countUp(); continue; } if (!ok) { violations = maybeAllocate(violations, count); violations.messages()[index] = applyDescriberDChecked(value, condition.describer()); violations.countUp(); } } return violations; }
static Violations innerCheckAllInt( final int value, final ContractIntConditionType[] conditions) { Violations violations = null; for (int index = 0; index < conditions.length; ++index) { final ContractIntConditionType condition = conditions[index]; final IntPredicate predicate = condition.predicate(); final boolean ok; final int count = conditions.length; try { ok = predicate.test(value); } catch (final Throwable e) { violations = maybeAllocate(violations, count); violations.messages()[index] = failedPredicate(e); violations.countUp(); continue; } if (!ok) { violations = maybeAllocate(violations, count); violations.messages()[index] = applyDescriberIChecked(value, condition.describer()); violations.countUp(); } } return violations; }
static Violations innerCheckAllLong( final long value, final ContractLongConditionType[] conditions) { Violations violations = null; for (int index = 0; index < conditions.length; ++index) { final ContractLongConditionType condition = conditions[index]; final LongPredicate predicate = condition.predicate(); final boolean ok; final int count = conditions.length; try { ok = predicate.test(value); } catch (final Throwable e) { violations = maybeAllocate(violations, count); violations.messages()[index] = failedPredicate(e); violations.countUp(); continue; } if (!ok) { violations = maybeAllocate(violations, count); violations.messages()[index] = applyDescriberLChecked(value, condition.describer()); violations.countUp(); } } return violations; }
static <T> Violations innerCheckAll( final T value, final ContractConditionType<T>[] conditions) { Violations violations = null; for (int index = 0; index < conditions.length; ++index) { final ContractConditionType<T> condition = conditions[index]; final Predicate<T> predicate = condition.predicate(); final boolean ok; final int count = conditions.length; try { ok = predicate.test(value); } catch (final Throwable e) { violations = maybeAllocate(violations, count); violations.messages()[index] = failedPredicate(e); violations.countUp(); continue; } if (!ok) { violations = maybeAllocate(violations, count); violations.messages()[index] = applyDescriberChecked(value, condition.describer()); violations.countUp(); } } return violations; }
private static <T> T innerCheckInvariant( final T value, final boolean condition, final Function<T, String> describer) { if (!condition) { throw failed( value, singleViolation(applyDescriberChecked(value, describer))); } return value; }