19fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light/* 29fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light * Copyright (C) 2017 The Android Open Source Project 39fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light * 49fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light * Licensed under the Apache License, Version 2.0 (the "License"); 59fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light * you may not use this file except in compliance with the License. 69fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light * You may obtain a copy of the License at 79fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light * 89fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light * http://www.apache.org/licenses/LICENSE-2.0 99fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light * 109fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light * Unless required by applicable law or agreed to in writing, software 119fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light * distributed under the License is distributed on an "AS IS" BASIS, 129fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 139fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light * See the License for the specific language governing permissions and 149fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light * limitations under the License. 159fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light */ 169fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light 179fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Lightpackage art; 189fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light 199fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Lightimport java.util.Arrays; 209fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Lightimport java.util.Objects; 219fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Lightimport java.lang.reflect.Executable; 229fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Lightimport java.lang.reflect.Method; 239fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light 249fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Lightpublic class Test1928 { 25ee5ff3cb3d66f3a57a98413c724c63266d5043a2Alex Light public static boolean PRINT_FULL_EXCEPTION = false; 269fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light public static ExceptionHandler HANDLER = null; 279fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light 289fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light public static interface ExceptionHandler { 299fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light public void exceptionOccurred( 309fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light Executable m, long loc, Throwable exception, Executable catch_m, long catch_l); 319fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light } 329fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light 339fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light private static void PrintStack() { 349fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light System.out.println("\tCurrent Stack:"); 359fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light for (StackTrace.StackFrameData e : StackTrace.GetStackTrace(Thread.currentThread())) { 369fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light if (Objects.equals(e.method.getDeclaringClass().getPackage(), Test1928.class.getPackage())) { 379fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light System.out.println("\t\t" + e.method + " @ line = " + 389fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light Breakpoint.locationToLine(e.method, e.current_location)); 399fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light } 409fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light } 419fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light } 429fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light 439fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light public static void ExceptionEvent(Thread thr, 449fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light Executable throw_method, 459fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light long throw_location, 469fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light Throwable exception, 479fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light Executable catch_method, 489fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light long catch_location) { 499fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light System.out.println(thr.getName() + ": " + throw_method + " @ line = " + 509fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light Breakpoint.locationToLine(throw_method, throw_location) + " throws " + 519fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light exception.getClass() + ": " + exception.getMessage()); 529fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light String catch_message; 539fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light if (catch_method == null) { 549fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light catch_message = "<UNKNOWN>"; 559fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light } else { 569fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light catch_message = catch_method.toString() + " @ line = " + 579fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light Breakpoint.locationToLine(catch_method, catch_location); 589fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light } 599fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light PrintStack(); 609fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light System.out.println("\tWill be caught by: " + catch_message); 619fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light if (PRINT_FULL_EXCEPTION) { 629fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light System.out.print("exception is: "); 639fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light exception.printStackTrace(System.out); 649fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light } 659fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light if (HANDLER != null) { 669fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light HANDLER.exceptionOccurred( 679fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light throw_method, throw_location, exception, catch_method, catch_location); 689fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light } 699fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light } 709fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light 719fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light public static class BaseTestException extends Error { 729fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light public BaseTestException(String e) { super(e); } 739fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light public BaseTestException(String e, Throwable t) { super(e, t); } 749fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light } 759fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light public static class TestException extends BaseTestException { 769fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light public TestException(String e) { super(e); } 779fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light public TestException(String e, Throwable t) { super(e, t); } 789fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light } 799fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light 809fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light public static class TestExceptionNoRethrow extends TestException { 819fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light public TestExceptionNoRethrow(String e) { super(e); } 829fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light public TestExceptionNoRethrow(String e, Throwable t) { super(e, t); } 839fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light } 849fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light 859fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light public static class DoNothingHandler implements ExceptionHandler { 869fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light public void exceptionOccurred( 879fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light Executable m, long loc, Throwable exception, Executable catch_m, long catch_l) { 889fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light System.out.println("\tDoing nothing!"); 899fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light return; 909fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light } 919fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light } 929fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light 939fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light public static class ThrowCatchBase implements ExceptionHandler { 949fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light public void exceptionOccurred( 959fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light Executable m, long loc, Throwable exception, Executable catch_m, long catch_l) { 969fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light System.out.println("\tThrowing BaseTestException and catching it!"); 979fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light try { 989fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light throw new BaseTestException("ThrowBaseHandler during throw from " + m + " @ line = " + 999fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light Breakpoint.locationToLine(m, loc), exception); 1009fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light } catch (BaseTestException t) { 1019fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light System.out.println("Caught " + t.getClass().getName() + ": \"" + t.getMessage() + "\""); 1029fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light if (PRINT_FULL_EXCEPTION) { 1039fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light t.printStackTrace(System.out); 1049fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light } 1059fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light } 1069fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light } 1079fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light } 1089fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light 1099fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light public static void doThrow() { 1109fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light throw new TestException("doThrow"); 1119fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light } 1129fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light 1139fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light public static class DoThrowClass implements Runnable { 1149fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light public void run() { doThrow(); } 1159fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light } 1169fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light 1179fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light public static void throwCatchBaseTestException() { 1189fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light try { 1199fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light throw new TestException("throwCatchBaseTestException"); 1209fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light } catch (BaseTestException t) { 1219fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light System.out.println("Caught " + t.getClass().getName() + ": \"" + t.getMessage() + "\""); 1229fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light if (PRINT_FULL_EXCEPTION) { 1239fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light t.printStackTrace(System.out); 1249fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light } 1259fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light } 1269fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light } 1279fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light 1289fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light public static class DoThrowCatchBaseTestException implements Runnable { 1299fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light public void run() { throwCatchBaseTestException(); } 1309fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light } 1319fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light 1329fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light public static void throwCatchTestException() { 1339fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light try { 1349fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light throw new TestException("throwCatchTestException"); 1359fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light } catch (TestException t) { 1369fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light System.out.println("Caught " + t.getClass().getName() + ": \"" + t.getMessage() + "\""); 1379fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light if (PRINT_FULL_EXCEPTION) { 1389fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light t.printStackTrace(System.out); 1399fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light } 1409fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light } 1419fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light } 1429fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light 1439fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light public static class DoThrowCatchTestException implements Runnable { 1449fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light public void run() { throwCatchTestException(); } 1459fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light } 1469fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light 1479fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light public static void throwCatchTestExceptionNoRethrow() { 1489fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light try { 1499fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light throw new TestException("throwCatchTestExceptionNoRethrow"); 1509fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light } catch (TestExceptionNoRethrow t) { 1519fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light System.out.println("Caught " + t.getClass().getName() + ": \"" + t.getMessage() + "\""); 1529fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light if (PRINT_FULL_EXCEPTION) { 1539fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light t.printStackTrace(System.out); 1549fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light } 1559fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light } 1569fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light } 1579fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light 1589fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light public static class DoThrowCatchTestExceptionNoRethrow implements Runnable { 1599fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light public void run() { throwCatchTestExceptionNoRethrow(); } 1609fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light } 1619fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light 1629fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light public static void run() throws Exception { 1639fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light // Set up 1649fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light Exceptions.setupExceptionTracing( 1659fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light Test1928.class, 1669fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light TestException.class, 1679fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light Test1928.class.getDeclaredMethod( 1689fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light "ExceptionEvent", 1699fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light Thread.class, 1709fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light Executable.class, 1719fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light Long.TYPE, 1729fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light Throwable.class, 1739fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light Executable.class, 1749fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light Long.TYPE), 1759fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light null); 1769fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light Exceptions.enableExceptionEvent(Thread.currentThread()); 1779fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light 1789fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light ExceptionHandler[] handlers = new ExceptionHandler[] { 1799fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light new DoNothingHandler(), 1809fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light new ThrowCatchBase(), 1819fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light }; 1829fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light 1839fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light Runnable[] tests = new Runnable[] { 1849fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light new DoThrowClass(), 1859fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light new DoThrowCatchBaseTestException(), 1869fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light new DoThrowCatchTestException(), 1879fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light new DoThrowCatchTestExceptionNoRethrow(), 1889fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light }; 1899fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light 1909fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light for (ExceptionHandler handler : handlers) { 1919fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light for (Runnable test : tests) { 1929fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light try { 1939fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light HANDLER = handler; 1949fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light System.out.printf("Test \"%s\": Running with handler \"%s\"\n", 1959fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light test.getClass().getName(), handler.getClass().getName()); 1969fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light test.run(); 1979fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light System.out.printf("Test \"%s\": No error caught with handler \"%s\"\n", 1989fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light test.getClass().getName(), handler.getClass().getName()); 1999fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light } catch (Throwable e) { 2009fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light System.out.printf("Test \"%s\": Caught error %s:\"%s\" with handler \"%s\"\n", 2019fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light test.getClass().getName(), 2029fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light e.getClass().getName(), 2039fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light e.getMessage(), 2049fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light handler.getClass().getName()); 2059fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light if (PRINT_FULL_EXCEPTION) { 2069fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light e.printStackTrace(System.out); 2079fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light } 2089fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light } 2099fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light System.out.printf("Test \"%s\": Finished running with handler \"%s\"\n", 2109fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light test.getClass().getName(), handler.getClass().getName()); 2119fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light HANDLER = null; 2129fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light } 2139fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light } 2149fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light Exceptions.disableExceptionEvent(Thread.currentThread()); 2159fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light } 2169fb1ab1f6bb58bdaccef78bc81b3202d0121e2edAlex Light} 217