17661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir/* 27661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir * Copyright (C) 2017 The Android Open Source Project 37661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir * 47661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir * Licensed under the Apache License, Version 2.0 (the "License"); 57661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir * you may not use this file except in compliance with the License. 67661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir * You may obtain a copy of the License at 77661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir * 87661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir * http://www.apache.org/licenses/LICENSE-2.0 97661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir * 107661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir * Unless required by applicable law or agreed to in writing, software 117661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir * distributed under the License is distributed on an "AS IS" BASIS, 127661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 137661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir * See the License for the specific language governing permissions and 147661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir * limitations under the License. 157661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir */ 167661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir 177661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinirpackage android.support.v4.util; 187661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir 197661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinirimport android.support.annotation.IntRange; 207661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinirimport android.support.annotation.NonNull; 217661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinirimport android.support.annotation.RestrictTo; 227661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinirimport android.text.TextUtils; 237661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir 247661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinirimport java.util.Collection; 254328b29e10111ed2f6325a740a777ed5c0eb23aaAurimas Liutikasimport java.util.Locale; 267661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir 277661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir/** 287661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir * Simple static methods to be called at the start of your own methods to verify 297661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir * correct arguments and state. 307661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir * 317661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir * @hide 327661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir */ 337661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir@RestrictTo(RestrictTo.Scope.LIBRARY_GROUP) 347661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinirpublic class Preconditions { 357661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir public static void checkArgument(boolean expression) { 367661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir if (!expression) { 377661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir throw new IllegalArgumentException(); 387661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir } 397661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir } 407661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir 417661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir /** 427661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir * Ensures that an expression checking an argument is true. 437661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir * 447661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir * @param expression the expression to check 457661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir * @param errorMessage the exception message to use if the check fails; will 467661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir * be converted to a string using {@link String#valueOf(Object)} 477661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir * @throws IllegalArgumentException if {@code expression} is false 487661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir */ 497661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir public static void checkArgument(boolean expression, final Object errorMessage) { 507661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir if (!expression) { 517661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir throw new IllegalArgumentException(String.valueOf(errorMessage)); 527661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir } 537661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir } 547661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir 557661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir /** 567661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir * Ensures that an string reference passed as a parameter to the calling 577661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir * method is not empty. 587661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir * 597661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir * @param string an string reference 607661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir * @return the string reference that was validated 617661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir * @throws IllegalArgumentException if {@code string} is empty 627661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir */ 637661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir public static @NonNull <T extends CharSequence> T checkStringNotEmpty(final T string) { 647661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir if (TextUtils.isEmpty(string)) { 657661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir throw new IllegalArgumentException(); 667661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir } 677661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir return string; 687661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir } 697661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir 707661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir /** 717661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir * Ensures that an string reference passed as a parameter to the calling 727661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir * method is not empty. 737661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir * 747661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir * @param string an string reference 757661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir * @param errorMessage the exception message to use if the check fails; will 767661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir * be converted to a string using {@link String#valueOf(Object)} 777661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir * @return the string reference that was validated 787661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir * @throws IllegalArgumentException if {@code string} is empty 797661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir */ 807661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir public static @NonNull <T extends CharSequence> T checkStringNotEmpty(final T string, 817661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir final Object errorMessage) { 827661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir if (TextUtils.isEmpty(string)) { 837661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir throw new IllegalArgumentException(String.valueOf(errorMessage)); 847661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir } 857661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir return string; 867661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir } 877661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir 887661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir /** 897661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir * Ensures that an object reference passed as a parameter to the calling 907661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir * method is not null. 917661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir * 927661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir * @param reference an object reference 937661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir * @return the non-null reference that was validated 947661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir * @throws NullPointerException if {@code reference} is null 957661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir */ 967661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir public static @NonNull <T> T checkNotNull(final T reference) { 977661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir if (reference == null) { 987661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir throw new NullPointerException(); 997661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir } 1007661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir return reference; 1017661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir } 1027661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir 1037661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir /** 1047661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir * Ensures that an object reference passed as a parameter to the calling 1057661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir * method is not null. 1067661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir * 1077661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir * @param reference an object reference 1087661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir * @param errorMessage the exception message to use if the check fails; will 1097661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir * be converted to a string using {@link String#valueOf(Object)} 1107661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir * @return the non-null reference that was validated 1117661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir * @throws NullPointerException if {@code reference} is null 1127661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir */ 1137661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir public static @NonNull <T> T checkNotNull(final T reference, final Object errorMessage) { 1147661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir if (reference == null) { 1157661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir throw new NullPointerException(String.valueOf(errorMessage)); 1167661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir } 1177661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir return reference; 1187661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir } 1197661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir 1207661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir /** 1217661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir * Ensures the truth of an expression involving the state of the calling 1227661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir * instance, but not involving any parameters to the calling method. 1237661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir * 1247661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir * @param expression a boolean expression 1257661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir * @param message exception message 1267661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir * @throws IllegalStateException if {@code expression} is false 1277661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir */ 1287661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir public static void checkState(final boolean expression, String message) { 1297661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir if (!expression) { 1307661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir throw new IllegalStateException(message); 1317661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir } 1327661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir } 1337661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir 1347661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir /** 1357661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir * Ensures the truth of an expression involving the state of the calling 1367661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir * instance, but not involving any parameters to the calling method. 1377661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir * 1387661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir * @param expression a boolean expression 1397661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir * @throws IllegalStateException if {@code expression} is false 1407661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir */ 1417661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir public static void checkState(final boolean expression) { 1427661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir checkState(expression, null); 1437661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir } 1447661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir 1457661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir /** 1467661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir * Check the requested flags, throwing if any requested flags are outside 1477661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir * the allowed set. 1487661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir * 1497661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir * @return the validated requested flags. 1507661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir */ 1517661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir public static int checkFlagsArgument(final int requestedFlags, final int allowedFlags) { 1527661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir if ((requestedFlags & allowedFlags) != requestedFlags) { 1537661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir throw new IllegalArgumentException("Requested flags 0x" 1547661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir + Integer.toHexString(requestedFlags) + ", but only 0x" 1557661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir + Integer.toHexString(allowedFlags) + " are allowed"); 1567661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir } 1577661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir 1587661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir return requestedFlags; 1597661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir } 1607661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir 1617661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir /** 1627661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir * Ensures that that the argument numeric value is non-negative. 1637661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir * 1647661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir * @param value a numeric int value 1657661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir * @param errorMessage the exception message to use if the check fails 1667661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir * @return the validated numeric value 1677661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir * @throws IllegalArgumentException if {@code value} was negative 1687661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir */ 1697661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir public static @IntRange(from = 0) int checkArgumentNonnegative(final int value, 1707661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir final String errorMessage) { 1717661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir if (value < 0) { 1727661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir throw new IllegalArgumentException(errorMessage); 1737661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir } 1747661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir 1757661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir return value; 1767661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir } 1777661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir 1787661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir /** 1797661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir * Ensures that that the argument numeric value is non-negative. 1807661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir * 1817661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir * @param value a numeric int value 1827661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir * 1837661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir * @return the validated numeric value 1847661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir * @throws IllegalArgumentException if {@code value} was negative 1857661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir */ 1867661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir public static @IntRange(from = 0) int checkArgumentNonnegative(final int value) { 1877661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir if (value < 0) { 1887661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir throw new IllegalArgumentException(); 1897661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir } 1907661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir 1917661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir return value; 1927661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir } 1937661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir 1947661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir /** 1957661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir * Ensures that that the argument numeric value is non-negative. 1967661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir * 1977661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir * @param value a numeric long value 1987661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir * @return the validated numeric value 1997661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir * @throws IllegalArgumentException if {@code value} was negative 2007661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir */ 2017661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir public static long checkArgumentNonnegative(final long value) { 2027661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir if (value < 0) { 2037661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir throw new IllegalArgumentException(); 2047661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir } 2057661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir 2067661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir return value; 2077661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir } 2087661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir 2097661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir /** 2107661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir * Ensures that that the argument numeric value is non-negative. 2117661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir * 2127661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir * @param value a numeric long value 2137661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir * @param errorMessage the exception message to use if the check fails 2147661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir * @return the validated numeric value 2157661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir * @throws IllegalArgumentException if {@code value} was negative 2167661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir */ 2177661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir public static long checkArgumentNonnegative(final long value, final String errorMessage) { 2187661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir if (value < 0) { 2197661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir throw new IllegalArgumentException(errorMessage); 2207661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir } 2217661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir 2227661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir return value; 2237661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir } 2247661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir 2257661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir /** 2267661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir * Ensures that that the argument numeric value is positive. 2277661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir * 2287661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir * @param value a numeric int value 2297661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir * @param errorMessage the exception message to use if the check fails 2307661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir * @return the validated numeric value 2317661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir * @throws IllegalArgumentException if {@code value} was not positive 2327661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir */ 2337661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir public static int checkArgumentPositive(final int value, final String errorMessage) { 2347661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir if (value <= 0) { 2357661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir throw new IllegalArgumentException(errorMessage); 2367661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir } 2377661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir 2387661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir return value; 2397661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir } 2407661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir 2417661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir /** 2427661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir * Ensures that the argument floating point value is a finite number. 2437661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir * 2447661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir * <p>A finite number is defined to be both representable (that is, not NaN) and 2457661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir * not infinite (that is neither positive or negative infinity).</p> 2467661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir * 2477661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir * @param value a floating point value 2487661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir * @param valueName the name of the argument to use if the check fails 2497661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir * 2507661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir * @return the validated floating point value 2517661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir * 2527661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir * @throws IllegalArgumentException if {@code value} was not finite 2537661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir */ 2547661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir public static float checkArgumentFinite(final float value, final String valueName) { 2557661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir if (Float.isNaN(value)) { 2567661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir throw new IllegalArgumentException(valueName + " must not be NaN"); 2577661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir } else if (Float.isInfinite(value)) { 2587661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir throw new IllegalArgumentException(valueName + " must not be infinite"); 2597661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir } 2607661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir 2617661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir return value; 2627661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir } 2637661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir 2647661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir /** 2657661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir * Ensures that the argument floating point value is within the inclusive range. 2667661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir * 2677661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir * <p>While this can be used to range check against +/- infinity, note that all NaN numbers 2687661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir * will always be out of range.</p> 2697661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir * 2707661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir * @param value a floating point value 2717661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir * @param lower the lower endpoint of the inclusive range 2727661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir * @param upper the upper endpoint of the inclusive range 2737661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir * @param valueName the name of the argument to use if the check fails 2747661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir * 2757661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir * @return the validated floating point value 2767661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir * 2777661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir * @throws IllegalArgumentException if {@code value} was not within the range 2787661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir */ 2797661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir public static float checkArgumentInRange(float value, float lower, float upper, 2807661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir String valueName) { 2817661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir if (Float.isNaN(value)) { 2827661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir throw new IllegalArgumentException(valueName + " must not be NaN"); 2837661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir } else if (value < lower) { 2847661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir throw new IllegalArgumentException( 2854328b29e10111ed2f6325a740a777ed5c0eb23aaAurimas Liutikas String.format(Locale.US, 2867661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir "%s is out of range of [%f, %f] (too low)", valueName, lower, upper)); 2877661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir } else if (value > upper) { 2887661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir throw new IllegalArgumentException( 2894328b29e10111ed2f6325a740a777ed5c0eb23aaAurimas Liutikas String.format(Locale.US, 2907661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir "%s is out of range of [%f, %f] (too high)", valueName, lower, upper)); 2917661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir } 2927661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir 2937661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir return value; 2947661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir } 2957661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir 2967661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir /** 2977661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir * Ensures that the argument int value is within the inclusive range. 2987661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir * 2997661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir * @param value a int value 3007661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir * @param lower the lower endpoint of the inclusive range 3017661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir * @param upper the upper endpoint of the inclusive range 3027661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir * @param valueName the name of the argument to use if the check fails 3037661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir * 3047661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir * @return the validated int value 3057661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir * 3067661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir * @throws IllegalArgumentException if {@code value} was not within the range 3077661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir */ 3087661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir public static int checkArgumentInRange(int value, int lower, int upper, 3097661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir String valueName) { 3107661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir if (value < lower) { 3117661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir throw new IllegalArgumentException( 3124328b29e10111ed2f6325a740a777ed5c0eb23aaAurimas Liutikas String.format(Locale.US, 3137661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir "%s is out of range of [%d, %d] (too low)", valueName, lower, upper)); 3147661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir } else if (value > upper) { 3157661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir throw new IllegalArgumentException( 3164328b29e10111ed2f6325a740a777ed5c0eb23aaAurimas Liutikas String.format(Locale.US, 3177661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir "%s is out of range of [%d, %d] (too high)", valueName, lower, upper)); 3187661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir } 3197661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir 3207661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir return value; 3217661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir } 3227661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir 3237661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir /** 3247661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir * Ensures that the argument long value is within the inclusive range. 3257661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir * 3267661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir * @param value a long value 3277661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir * @param lower the lower endpoint of the inclusive range 3287661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir * @param upper the upper endpoint of the inclusive range 3297661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir * @param valueName the name of the argument to use if the check fails 3307661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir * 3317661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir * @return the validated long value 3327661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir * 3337661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir * @throws IllegalArgumentException if {@code value} was not within the range 3347661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir */ 3357661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir public static long checkArgumentInRange(long value, long lower, long upper, 3367661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir String valueName) { 3377661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir if (value < lower) { 3387661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir throw new IllegalArgumentException( 3394328b29e10111ed2f6325a740a777ed5c0eb23aaAurimas Liutikas String.format(Locale.US, 3407661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir "%s is out of range of [%d, %d] (too low)", valueName, lower, upper)); 3417661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir } else if (value > upper) { 3427661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir throw new IllegalArgumentException( 3434328b29e10111ed2f6325a740a777ed5c0eb23aaAurimas Liutikas String.format(Locale.US, 3447661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir "%s is out of range of [%d, %d] (too high)", valueName, lower, upper)); 3457661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir } 3467661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir 3477661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir return value; 3487661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir } 3497661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir 3507661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir /** 3517661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir * Ensures that the array is not {@code null}, and none of its elements are {@code null}. 3527661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir * 3537661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir * @param value an array of boxed objects 3547661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir * @param valueName the name of the argument to use if the check fails 3557661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir * 3567661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir * @return the validated array 3577661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir * 3587661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir * @throws NullPointerException if the {@code value} or any of its elements were {@code null} 3597661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir */ 3607661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir public static <T> T[] checkArrayElementsNotNull(final T[] value, final String valueName) { 3617661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir if (value == null) { 3627661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir throw new NullPointerException(valueName + " must not be null"); 3637661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir } 3647661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir 3657661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir for (int i = 0; i < value.length; ++i) { 3667661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir if (value[i] == null) { 3677661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir throw new NullPointerException( 3684328b29e10111ed2f6325a740a777ed5c0eb23aaAurimas Liutikas String.format(Locale.US, "%s[%d] must not be null", valueName, i)); 3697661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir } 3707661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir } 3717661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir 3727661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir return value; 3737661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir } 3747661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir 3757661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir /** 3767661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir * Ensures that the {@link Collection} is not {@code null}, and none of its elements are 3777661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir * {@code null}. 3787661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir * 3797661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir * @param value a {@link Collection} of boxed objects 3807661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir * @param valueName the name of the argument to use if the check fails 3817661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir * 3827661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir * @return the validated {@link Collection} 3837661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir * 3847661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir * @throws NullPointerException if the {@code value} or any of its elements were {@code null} 3857661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir */ 3867661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir public static @NonNull <C extends Collection<T>, T> C checkCollectionElementsNotNull( 3877661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir final C value, final String valueName) { 3887661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir if (value == null) { 3897661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir throw new NullPointerException(valueName + " must not be null"); 3907661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir } 3917661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir 3927661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir long ctr = 0; 3937661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir for (T elem : value) { 3947661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir if (elem == null) { 3957661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir throw new NullPointerException( 3964328b29e10111ed2f6325a740a777ed5c0eb23aaAurimas Liutikas String.format(Locale.US, "%s[%d] must not be null", valueName, ctr)); 3977661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir } 3987661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir ++ctr; 3997661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir } 4007661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir 4017661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir return value; 4027661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir } 4037661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir 4047661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir /** 4057661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir * Ensures that the {@link Collection} is not {@code null}, and contains at least one element. 4067661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir * 4077661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir * @param value a {@link Collection} of boxed elements. 4087661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir * @param valueName the name of the argument to use if the check fails. 4097661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir 4107661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir * @return the validated {@link Collection} 4117661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir * 4127661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir * @throws NullPointerException if the {@code value} was {@code null} 4137661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir * @throws IllegalArgumentException if the {@code value} was empty 4147661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir */ 4157661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir public static <T> Collection<T> checkCollectionNotEmpty(final Collection<T> value, 4167661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir final String valueName) { 4177661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir if (value == null) { 4187661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir throw new NullPointerException(valueName + " must not be null"); 4197661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir } 4207661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir if (value.isEmpty()) { 4217661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir throw new IllegalArgumentException(valueName + " is empty"); 4227661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir } 4237661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir return value; 4247661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir } 4257661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir 4267661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir /** 4277661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir * Ensures that all elements in the argument floating point array are within the inclusive range 4287661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir * 4297661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir * <p>While this can be used to range check against +/- infinity, note that all NaN numbers 4307661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir * will always be out of range.</p> 4317661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir * 4327661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir * @param value a floating point array of values 4337661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir * @param lower the lower endpoint of the inclusive range 4347661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir * @param upper the upper endpoint of the inclusive range 4357661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir * @param valueName the name of the argument to use if the check fails 4367661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir * 4377661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir * @return the validated floating point value 4387661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir * 4397661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir * @throws IllegalArgumentException if any of the elements in {@code value} were out of range 4407661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir * @throws NullPointerException if the {@code value} was {@code null} 4417661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir */ 4427661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir public static float[] checkArrayElementsInRange(float[] value, float lower, float upper, 4437661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir String valueName) { 4447661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir checkNotNull(value, valueName + " must not be null"); 4457661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir 4467661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir for (int i = 0; i < value.length; ++i) { 4477661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir float v = value[i]; 4487661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir 4497661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir if (Float.isNaN(v)) { 4507661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir throw new IllegalArgumentException(valueName + "[" + i + "] must not be NaN"); 4517661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir } else if (v < lower) { 4527661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir throw new IllegalArgumentException( 4534328b29e10111ed2f6325a740a777ed5c0eb23aaAurimas Liutikas String.format(Locale.US, "%s[%d] is out of range of [%f, %f] (too low)", 4547661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir valueName, i, lower, upper)); 4557661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir } else if (v > upper) { 4567661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir throw new IllegalArgumentException( 4574328b29e10111ed2f6325a740a777ed5c0eb23aaAurimas Liutikas String.format(Locale.US, "%s[%d] is out of range of [%f, %f] (too high)", 4587661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir valueName, i, lower, upper)); 4597661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir } 4607661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir } 4617661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir 4627661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir return value; 4637661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir } 4647661f0b5c95fefaaeb3b4af090e1f6abe56b6d23Siyamed Sinir} 465