import java.util.*; import java.util.stream.Stream; class OptionalGet { private void checkOf(boolean b) { System.out.println(Optional.of("xyz").get()); Optional test; if(b) { test = Optional.of("x"); } else { test = Optional.of("y"); } System.out.println(test.get()); if(b) { test = Optional.of("x"); } else { test = Optional.empty(); } System.out.println(test.get()); } private void checkOfNullable(String value) { System.out.println(Optional.ofNullable(value).get()); System.out.println(Optional.ofNullable(value+"a").get()); System.out.println(Optional.ofNullable("xyz").get()); } void testSimple(Optional o, OptionalDouble od, OptionalInt oi, OptionalLong ol) { System.out.println(o.get()); System.out.println(oi.getAsInt()); System.out.println(ol.getAsLong()); System.out.println(od.getAsDouble()); } void testParentheses(Optional o, String value, String value2) { System.out.println((o).get()); System.out.println((Optional.ofNullable(value)).get()); System.out.println((Optional.of(value)).get()); System.out.println((Optional.ofNullable("foo")).get()); System.out.println((Optional.of("foo")).get()); } void testTernary(Optional foo, Optional bar, boolean b) { if(bar.isPresent()) { if(foo.isPresent()) { System.out.println((b ? foo : bar).get()); } System.out.println((b ? foo : bar).get()); } if(foo.isPresent()) { System.out.println((b ? foo : bar).get()); } System.out.println((b ? foo : bar).get()); } { System.out.println(getIntegerOptional().get()); } void testWhile() { Optional o = Optional.empty(); while (!o.isPresent()) { o = Optional.of(""); } System.out.println(o.get()); } void testWhile2() { Optional o = getIntegerOptional(); while (o.isPresent()) { System.out.println(o.get()); } } public void testPolyadicExpression(Optional value) { boolean flag = value.isPresent() && "Yes".equals(value.get()); } boolean testPolyadicExpression2(Optional o) { return !o.isPresent() || o.get().equals("j"); } String testPolyadicExpression3() { Optional o = getOptional(); if (o == null || !o.isPresent()) { return ""; } return o.get(); } void testNested(Optional opt, String action) { if (!opt.isPresent()) { throw new IllegalArgumentException(); } switch (action) { case "case": System.out.println(opt.get()); break; default: System.err.println(opt.get()); } } Optional getIntegerOptional() { return Math.random() > 0.5 ? Optional.of(1) : Optional.empty(); } private static void a() { Optional optional = Optional.empty(); final boolean present = optional.isPresent(); // optional = Optional.empty(); if (present) { // do not warn here as the branch is unreachable final String string = optional.get(); System.out.println(string); } } private static void b() { Optional optional = Optional.empty(); final boolean present = optional.isPresent(); optional = Optional.empty(); if (present) { // do not warn here as the branch is unreachable final String string = optional.get(); System.out.println(string); } } private void checkReassign(Optional a, Optional b) { if(a.isPresent()) { b = a; System.out.println(b.get()); } } private void checkReassign2(Optional a, Optional b) { if(b.isPresent()) { b = a; System.out.println(b.get()); } } private void checkAsserts1() { Optional o1 = getOptional(); assert o1.isPresent(); System.out.println(o1.get()); Optional o2 = getOptional(); org.junit.Assert.assertTrue(o2.isPresent()); System.out.println(o2.get()); Optional o3 = getOptional(); org.testng.Assert.assertTrue(o3.isPresent()); System.out.println(o3.get()); } public Collection findCategories(Long articleId) { return java.util.stream.Stream.of(Optional.of("asdf")).filter(Optional::isPresent).map(x -> x.get()).collect( java.util.stream.Collectors.toList()) ; } public static void main(String[] args) { Optional stringOpt; if((stringOpt = getOptional()).isPresent()) { stringOpt.get(); } } public static void main2(String[] args) { if(getOptional().isPresent()) { getOptional().get(); //'Optional.get()' without 'isPresent()' check } } public static Optional getOptional() { return Optional.empty(); } void order(Optional order, boolean b) { // here order.get always suceeds order.ifPresent(o -> System.out.println(order.get())); // here order.get always fails: tested in normal DFA System.out.println(order.orElseGet(() -> order.get().trim())); } public static void two(Optional o1,Optional o2) { if (!o1.isPresent() && !o2.isPresent()) { return; } System.out.println(o1.isPresent() ? o1.get() : o2.get()); } public static void two2(Optional o1,Optional o2) { if (!o2.isPresent()) { return; } System.out.println(o1.isPresent() ? o1.get() : o2.get()); } public static void two3(Optional o1,Optional o2) { System.out.println(o1.isPresent() ? o1.get() : o2.get()); } void def(Optional def) { if (!def.isPresent()) { throw new RuntimeException(); } { def.get(); } } private void orred(Optional opt1, Optional opt2) { if (!opt1.isPresent() || !opt2.isPresent()) { return; } opt1.get(); opt2.get(); } class Range { Optional min = Optional.of(1); Optional max = Optional.of(2); Optional getMax() { return max; } Optional getMin() { return min; } } void useRange(Range a, Range b) { if (!a.getMax().isPresent() || !b.getMin().isPresent()) { } else if (a.getMax().get() <= b.getMin().get()) { } } public void foo(Optional value) { if (!value.isPresent()) { return; } try { System.out.println(value.get()); // <- warning appears here } finally { System.out.println("hi"); } } void shortIf(Optional o) { if (true || o.isPresent()) { o.get(); } } void test(Optional aOpt, Optional bOpt) { if (!aOpt.isPresent() || !bOpt.isPresent()) { throw new RuntimeException(); } String a = aOpt.get(); String b = bOpt.get(); } String f(Optional optional, Optional opt2) { return optional.isPresent() ? opt2.get() : ""; } com.google.common.base.Optional field; void guavaFieldTest() { if(field.isPresent()) { System.out.println(field.get()); } } void guavaTest(com.google.common.base.Optional opt, String s, String s1) { System.out.println(opt.get()); if(opt.isPresent()) { System.out.println(opt.get()); } opt = com.google.common.base.Optional.fromNullable(s); if(opt.isPresent()) { System.out.println(opt.get()); } opt = com.google.common.base.Optional.of(s); opt = com.google.common.base.Optional.of(s1); if(opt.isPresent()) { System.out.println(opt.get()); } opt = com.google.common.base.Optional.absent(); if(opt.isPresent()) { System.out.println(opt.get()); } } void testThrow(Optional test) { test.orElseThrow(RuntimeException::new); Object o = test.get(); System.out.println(o); } void testThrowCatch(Optional opt) { try { opt.orElseThrow(RuntimeException::new); System.out.println("Ok: " + opt.get()); } catch (RuntimeException ex) { System.out.println("Fail: " + opt.get()); } } void testOrElseGet() { final Optional a = Optional.ofNullable(Math.random() > 0.5 ? null:""); final Optional b = Optional.ofNullable(Math.random() > 0.5 ? null:""); if (a.isPresent() || b.isPresent()) { String result = a.orElseGet(() -> b.get()); // no warning System.out.println(result); } String result = a.orElseGet(() -> b.get()); System.out.println(result); } boolean testBooleanOptional(Optional opt) { if (opt.isPresent() && !opt.get()) { return false; } return true; } void testArrayStream(int[] arr1, int[] arr2) { if(arr1.length == 0) return; System.out.println(Arrays.stream(arr1).map(Math::abs).min().getAsInt()); System.out.println(Arrays.stream(arr2).map(Math::abs).min().getAsInt()); } public String getFirstItem(Collection data) { return data.stream().findFirst().get(); } public String getFirstItemChecked(Collection data) { if(data.isEmpty()) throw new IllegalArgumentException("Data should never be empty"); // Non-empty stream: get() is fine return data.stream().findFirst().get(); } public String getMax() { // Non-empty stream: get() is fine return Stream.of("foo", "bar", "baz").map(String::toUpperCase).max(Comparator.naturalOrder()).get(); } void testStreamOfUnrolling(Optional optionalOne, Optional optionalTwo, Optional optionalThree) { if (Stream.of(optionalOne, optionalTwo).allMatch(Optional::isPresent)) { System.out.println(optionalOne.get()); System.out.println(optionalTwo.get()); System.out.println(optionalThree.get()); } } } class CtorTest { Optional test = Optional.of("foo"); CtorTest() { System.out.println(test.get()); something(); // Conservatively skip the warning: people rarely do this System.out.println(test.get()); } CtorTest(String noBody); void something() { test = Optional.empty(); } } class FinallyTest { private Optional optionalValue = Optional.of("StringValue"); // IDEA-195886 private void methodA() { if (optionalValue.isPresent()) { System.out.println(optionalValue.get().toLowerCase()); } if (optionalValue.isPresent()) { System.out.println(optionalValue.get()); } } private void methodA1() { if (optionalValue.isPresent()) { System.out.println(optionalValue.get().toLowerCase()); } try { methodB(); } finally { if (optionalValue.isPresent()) { System.out.println(optionalValue.get()); } } } private native void methodB(); void testPrimitive() { OptionalInt a = OptionalInt.of(123); int b = a.getAsInt(); OptionalLong c = OptionalLong.of(123); long d = c.getAsLong(); OptionalDouble e = OptionalDouble.of(123); double f = e.getAsDouble(); } void testPrimitive2(OptionalInt a, OptionalLong c, OptionalDouble e) { int b = a.getAsInt(); long d = c.getAsLong(); double f = e.getAsDouble(); } void testPrimitive3(OptionalInt a) { if (a.isPresent()) { System.out.println(a.getAsInt()); } } class X { private String value; public Optional getValue() { return Optional.ofNullable(value); } } void testStream() { // IDEA-208770 Stream.of(new X(), new X()).filter(x -> x.getValue().isPresent()).map(x -> x.getValue().get()); Stream.of(new X()).filter(x -> x.getValue().isPresent()).map(x -> x.getValue().get()); X xx = new X(); Stream.of(xx).filter(x -> x.getValue().isPresent()).map(x -> x.getValue().get()); } void testOptionalChain(String[] testArray) { int test1 = Stream.of(testArray) .filter(string -> string.equals("123")) .findFirst() .get() .length(); int test11 = Stream.of("foo", "bar", "123") .filter(string -> string.equals("123")) .findFirst() .get() // we know that it's non-empty .length(); int test2 = Stream.of(testArray) .filter(string -> string.equals("123")) .findFirst() .map(String::length) .get(); int test22 = Stream.of("foo", "bar", "123") .filter(string -> string.equals("123")) .findFirst() .map(String::length) .get(); int test3 = Stream.of(testArray) .filter(string -> string.equals("123")) .findFirst() .filter(s -> s.length() > 0) .get() .length(); } }