// Signature format: 4.0
package androidx.inspection {

  public interface ArtTooling {
    method public <T> java.util.List<T!> findInstances(Class<T!>);
    method public void registerEntryHook(Class<?>, String, androidx.inspection.ArtTooling.EntryHook);
    method public <T> void registerExitHook(Class<?>, String, androidx.inspection.ArtTooling.ExitHook<T!>);
  }

  public static interface ArtTooling.EntryHook {
    method public void onEntry(Object?, java.util.List<java.lang.Object!>);
  }

  public static interface ArtTooling.ExitHook<T> {
    method public T! onExit(T!);
  }

  public abstract class Connection {
    ctor public Connection();
    method public void sendEvent(byte[]);
  }

  public abstract class Inspector {
    ctor public Inspector(androidx.inspection.Connection);
    method protected final androidx.inspection.Connection getConnection();
    method public void onDispose();
    method public abstract void onReceiveCommand(byte[], androidx.inspection.Inspector.CommandCallback);
  }

  public static interface Inspector.CommandCallback {
    method public void addCancellationListener(java.util.concurrent.Executor, Runnable);
    method public void reply(byte[]);
  }

  public interface InspectorEnvironment {
    method public androidx.inspection.ArtTooling artTooling();
    method public default androidx.inspection.InspectorExecutors executors();
  }

  public interface InspectorExecutors {
    method public android.os.Handler handler();
    method public java.util.concurrent.Executor io();
    method public java.util.concurrent.Executor primary();
  }

  public abstract class InspectorFactory<T extends androidx.inspection.Inspector> {
    ctor public InspectorFactory(String);
    method public abstract T createInspector(androidx.inspection.Connection, androidx.inspection.InspectorEnvironment);
    method public final String getInspectorId();
  }

}

