package jadx.samples; import java.io.IOException; public class TestTryCatch extends AbstractTest { private static boolean exc(Object obj) throws Exception { if (obj == null) { throw new Exception("test"); } return (obj instanceof Object); } private static boolean exc2(Object obj) throws IOException { if (obj == null) { throw new IOException(); } return true; } private static boolean test0(Object obj) { try { synchronized (obj) { obj.wait(5); } } catch (InterruptedException e) { return false; } return true; } private static boolean test1(Object obj) { boolean res = false; try { res = exc(obj); } catch (Exception e) { return false; } return res; } private static boolean test2(Object obj) { try { return exc(obj); } catch (Exception e) { if (obj != null) { return true; } else { return false; } } } private static boolean test3(Object obj) { boolean res = false; try { res = exc(obj); } catch (Exception e) { res = false; } finally { test0(obj); } return res; } private static String test4(Object obj) { String res = "good"; try { res += exc(obj); exc2("a"); } catch (IOException e) { res = "io exc"; } catch (Exception e) { res = "exc"; } return res; } private static String test5(Object obj) { String res = "good"; try { res = "" + exc(obj); boolean f = exc2("a"); if (!f) { res = "f == false"; } } catch (Exception e) { res = "exc"; } return res; } private static boolean test6(Object obj) { boolean res = false; while (true) { try { res = exc2(obj); return res; } catch (IOException e) { res = true; } catch (Throwable e) { if (obj == null) { obj = new Object(); } } } } private static boolean test7() { boolean res = false; Object obj = null; while (true) { try { res = exc2(obj); return res; } catch (IOException e) { res = true; obj = new Object(); } catch (Throwable e) { if (obj == null) { res = false; } } } } private boolean test8(Object obj) { this.mDiscovering = false; try { exc(obj); } catch (Exception e) { e.toString(); } finally { mDiscovering = true; } return mDiscovering; } private boolean test8a(Object obj) { this.mDiscovering = false; try { exc(obj); } catch (Exception e) { e.toString(); } finally { if (!mDiscovering) { mDiscovering = true; } } return mDiscovering; } private static boolean testSynchronize(Object obj) throws InterruptedException { synchronized (obj) { if (obj instanceof String) { return false; } obj.wait(5); } return true; } // TODO: remove 'synchronized(TestTryCatch.class)' block in decompiled version private synchronized static boolean testSynchronize2(Object obj) throws InterruptedException { return obj.toString() != null; } public Object mObject = new Object(); public boolean mDiscovering = true; private boolean testSynchronize3() { boolean b = false; synchronized (mObject) { b = this.mDiscovering; } return b; } public int catchInLoop(int i, int j) { while (true) { try { while (i < j) { i = j++ / i; } } catch (RuntimeException e) { i = 10; continue; } break; } return j; } @Override public boolean testRun() throws Exception { Object obj = new Object(); assertTrue(test0(obj)); assertTrue(test1(obj)); assertTrue(test2(obj)); assertTrue(test3(obj)); assertTrue(test4(obj) != null); assertTrue(test5(null) != null); assertTrue(test6(obj)); assertTrue(test7()); assertTrue(testSynchronize(obj)); assertFalse(testSynchronize("str")); assertTrue(testSynchronize2("str")); assertTrue(testSynchronize3()); assertTrue(test8("a")); assertTrue(test8(null)); assertTrue(test8a("a")); assertTrue(test8a(null)); assertEquals(catchInLoop(1, 0), 0); assertEquals(catchInLoop(0, 1), 2); assertEquals(catchInLoop(788, 100), 100); return true; } public static void main(String[] args) throws Exception { new TestTryCatch().testRun(); } }