Skip to content

Commit c3323c6

Browse files
committed
Add emulation for Java 9 additions to Objects class
1 parent a5e649d commit c3323c6

File tree

2 files changed

+89
-0
lines changed

2 files changed

+89
-0
lines changed

user/super/com/google/gwt/emul/java/util/Objects.java

+31
Original file line numberDiff line numberDiff line change
@@ -129,6 +129,37 @@ public static <T> T requireNonNull(T obj, Supplier<String> messageSupplier) {
129129
return obj;
130130
}
131131

132+
public static <T> T requireNonNullElse(T obj, T defaultObj) {
133+
return obj != null ? obj : requireNonNull(defaultObj);
134+
}
135+
136+
public static <T> T requireNonNullElseGet(T obj, Supplier<? extends T> supplier) {
137+
return obj != null ? obj : requireNonNull(supplier.get());
138+
}
139+
140+
public static int checkIndex(int index, int length) {
141+
if (index < 0 || index >= length) {
142+
new IndexOutOfBoundsException("Index " + index + " out of bounds for length " + length);
143+
}
144+
return index;
145+
}
146+
147+
public static int checkFromToIndex(int fromIndex, int toIndex, int length) {
148+
if (fromIndex < 0 || fromIndex > toIndex || toIndex > length) {
149+
new IndexOutOfBoundsException("Range [" + fromIndex + ", " + toIndex
150+
+ ") out of bounds for length " + length);
151+
}
152+
return index;
153+
}
154+
155+
public static int checkFromIndexSize(long fromIndex, long size, long length) {
156+
if (fromIndex < 0 || size < 0 || fromIndex + size > length) {
157+
new IndexOutOfBoundsException("Range [" + fromIndex + ", " + (fromIndex + size)
158+
+ ") out of bounds for length " + length);
159+
}
160+
return index;
161+
}
162+
132163
public static String toString(Object o) {
133164
return String.valueOf(o);
134165
}

user/test/com/google/gwt/emultest/java/util/ObjectsTest.java

+58
Original file line numberDiff line numberDiff line change
@@ -102,4 +102,62 @@ public void testHashCode() {
102102
Object obj = new Object();
103103
assertEquals(obj.hashCode(), Objects.hashCode(obj));
104104
}
105+
106+
public void testRequireNonNull() {
107+
assertEquals("foo", Objects.requireNonNull("foo"));
108+
assertThrows(NullPointerException.class,
109+
() -> Objects.requireNonNull(null));
110+
}
111+
112+
public void testRequireNonNullElse() {
113+
assertEquals("foo", Objects.requireNonNullElse("foo", "bar"));
114+
assertThrows(NullPointerException.class,
115+
() -> Objects.requireNonNullElse(null, null));
116+
}
117+
118+
public void testRequireNonNullElseGet() {
119+
assertEquals("foo", Objects.requireNonNullElseGet("foo", () -> "bar"));
120+
assertThrows(NullPointerException.class,
121+
() -> Objects.requireNonNullElseGet(null, null));
122+
assertThrows(NullPointerException.class,
123+
() -> Objects.requireNonNullElseGet(null, () -> null));
124+
}
125+
126+
public void testCheckIndex() {
127+
assertEquals(5, Objects.checkIndex(5, 10));
128+
assertThrows(IndexOutOfBoundsException.class,
129+
() -> Objects.checkIndex(-5, 5));
130+
assertThrows(IndexOutOfBoundsException.class,
131+
() -> Objects.checkIndex(10, 5));
132+
}
133+
134+
public void testCheckFromToIndex() {
135+
assertEquals(5, Objects.checkFromToIndex(5, 7, 10));
136+
assertThrows(IndexOutOfBoundsException.class,
137+
() -> Objects.checkFromToIndex(-5, 1, 5));
138+
assertThrows(IndexOutOfBoundsException.class,
139+
() -> Objects.checkFromToIndex(10, 1, 5));
140+
assertThrows(IndexOutOfBoundsException.class,
141+
() -> Objects.checkFromToIndex(1, 10, 5));
142+
}
143+
144+
public void testCheckFromIndexSize() {
145+
assertEquals(5, Objects.checkFromIndexSize(5, 2, 10));
146+
assertThrows(IndexOutOfBoundsException.class,
147+
() -> Objects.checkFromIndexSize(-5, 1, 5));
148+
assertThrows(IndexOutOfBoundsException.class,
149+
() -> Objects.checkFromIndexSize(10, 1, 5));
150+
assertThrows(IndexOutOfBoundsException.class,
151+
() -> Objects.checkFromIndexSize(1, 10, 5));
152+
}
153+
154+
private void assertThrows(Class<? extends Exception> thrownCheck, Runnable toTest) {
155+
try {
156+
toTest.run();
157+
fail("Should have failed");
158+
} catch (Exception ex) {
159+
assertEquals(ex.getClass(), thrownCheck);
160+
}
161+
162+
}
105163
}

0 commit comments

Comments
 (0)