/* * Copyright (c) 2018-present, Facebook, Inc. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ import android.os.Binder; import android.os.RemoteException; import android.support.annotation.UiThread; class PubPriv { Binder b; @UiThread private void doTransactOk() throws RemoteException { b.transact(0, null, null, 0); } public void transactBad() throws RemoteException { doTransactOk(); } public void alsoBad() throws RemoteException { transactBad(); } private void chainOK() throws RemoteException { alsoBad(); } Object lockA, lockB; private void oneWayOk() { synchronized(lockA) { synchronized(lockB) {} } } private void anotherWayOk() { synchronized(lockB) { synchronized(lockA) {} } } public void callOneWayBad() { oneWayOk(); } public void callAnotherWayBad() { anotherWayOk(); } private void callOneWayOk() { oneWayOk(); } private void callAnotherWayOk() { anotherWayOk(); } }