test_class.declarator: mImpl = new Object()
test_class.modifier: private
test_class.original_string: private Object mImpl = new Object();
test_class.type: Object
test_class.var_name: mImpl
test_class.declarator: mSender
test_class.modifier: @Mock
      private
test_class.original_string: @Mock
      private MessageSender mSender;
test_class.type: MessageSender
test_class.var_name: mSender
test_class.declarator: mMessage
test_class.modifier: @Mock
      private
test_class.original_string: @Mock
      private Message<Object, Object> mMessage;
test_class.type: Message<Object, Object>
test_class.var_name: mMessage
test_class.declarator: mThread
test_class.modifier: @Mock
      private
test_class.original_string: @Mock
      private ActorThread mThread;
test_class.type: ActorThread
test_class.var_name: mThread
test_class.declarator: mListener
test_class.modifier: @Mock
      private
test_class.original_string: @Mock
      private ResultListener<Object> mListener;
test_class.type: ResultListener<Object>
test_class.var_name: mListener
test_class.declarator: mResultPromise
test_class.modifier: @Mock
      private
test_class.original_string: @Mock
      private Promise<Object> mResultPromise;
test_class.type: Promise<Object>
test_class.var_name: mResultPromise
test_class.file: actors-library/src/test/java/com/truecaller/androidactors/PromiseProxyTest.java
test_class.identifier: PromiseProxyTest
test_case.body: @Test(timeout = 2000)
      public void get_deliverResult_nonNullResult() throws Exception {
          final Object result = new Object();
          final CountDownLatch latch = new CountDownLatch(1);
          PromiseProxy promise = new PromiseProxy(mSender, mMessage);
          ResultDeliveryThread thread = new ResultDeliveryThread(promise, latch, null);
          Mockito.doAnswer(thread).when(mSender).deliver(Mockito.<Message>any());
  
          thread.start();
          latch.await();
  
          promise.onResult(result);
          thread.join();
  
          Assert.assertSame(result, thread.delivered());
      }
test_case.class_method_signature: PromiseProxyTest.get_deliverResult_nonNullResult()
test_case.full_signature: @Test(timeout = 2000) public void get_deliverResult_nonNullResult()
test_case.identifier: get_deliverResult_nonNullResult
test_case.invocations: deliver when doAnswer any start await onResult join assertSame delivered
test_case.modifiers: @Test(timeout = 2000) public
test_case.parameters: ()
test_case.return: void
test_case.signature: void get_deliverResult_nonNullResult()
focal_class.declarator: mSender
focal_class.modifier: @NonNull
      private final
focal_class.original_string: @NonNull
      private final MessageSender mSender;
focal_class.type: MessageSender
focal_class.var_name: mSender
focal_class.declarator: mMessage
focal_class.modifier: @NonNull
      private final
focal_class.original_string: @NonNull
      private final Message<T, R> mMessage;
focal_class.type: Message<T, R>
focal_class.var_name: mMessage
focal_class.declarator: mActorThread = null
focal_class.modifier: @Nullable
      private
focal_class.original_string: @Nullable
      private ActorThread mActorThread = null;
focal_class.type: ActorThread
focal_class.var_name: mActorThread
focal_class.declarator: mListener = null
focal_class.modifier: @Nullable
      private volatile
focal_class.original_string: @Nullable
      private volatile ResultListener<R> mListener = null;
focal_class.type: ResultListener<R>
focal_class.var_name: mListener
focal_class.file: actors-library/src/main/java/com/truecaller/androidactors/PromiseProxy.java
focal_class.identifier: PromiseProxy
focal_class.interfaces: implements Message<T, R>, ActionHandle, ResultListener<R>
focal_class.class_method_signature: PromiseProxy.PromiseProxy(@NonNull MessageSender sender, @NonNull Message<T, R> message)
focal_class.full_signature:   PromiseProxy(@NonNull MessageSender sender, @NonNull Message<T, R> message)
focal_class.identifier: PromiseProxy
focal_class.parameters: (@NonNull MessageSender sender, @NonNull Message<T, R> message)
focal_class.signature:  PromiseProxy(@NonNull MessageSender sender, @NonNull Message<T, R> message)
focal_class.class_method_signature: PromiseProxy.thenNothing()
focal_class.full_signature: @Override public void thenNothing()
focal_class.identifier: thenNothing
focal_class.modifiers: @Override public
focal_class.parameters: ()
focal_class.return: void
focal_class.signature: void thenNothing()
focal_class.class_method_signature: PromiseProxy.then(@NonNull ResultListener<R> listener)
focal_class.full_signature: @NonNull @Override public ActionHandle then(@NonNull ResultListener<R> listener)
focal_class.identifier: then
focal_class.modifiers: @NonNull @Override public
focal_class.parameters: (@NonNull ResultListener<R> listener)
focal_class.return: ActionHandle
focal_class.signature: ActionHandle then(@NonNull ResultListener<R> listener)
focal_class.class_method_signature: PromiseProxy.then(@NonNull ActorThread thread, @NonNull ResultListener<R> listener)
focal_class.full_signature: @NonNull @Override public ActionHandle then(@NonNull ActorThread thread, @NonNull ResultListener<R> listener)
focal_class.identifier: then
focal_class.modifiers: @NonNull @Override public
focal_class.parameters: (@NonNull ActorThread thread, @NonNull ResultListener<R> listener)
focal_class.return: ActionHandle
focal_class.signature: ActionHandle then(@NonNull ActorThread thread, @NonNull ResultListener<R> listener)
focal_class.class_method_signature: PromiseProxy.get()
focal_class.full_signature: @Nullable @Override public R get()
focal_class.identifier: get
focal_class.modifiers: @Nullable @Override public
focal_class.parameters: ()
focal_class.return: R
focal_class.signature: R get()
focal_class.class_method_signature: PromiseProxy.onResult(@Nullable R result)
focal_class.full_signature: @Override public void onResult(@Nullable R result)
focal_class.identifier: onResult
focal_class.modifiers: @Override public
focal_class.parameters: (@Nullable R result)
focal_class.return: void
focal_class.signature: void onResult(@Nullable R result)
focal_class.class_method_signature: PromiseProxy.forget()
focal_class.full_signature: @Override public void forget()
focal_class.identifier: forget
focal_class.modifiers: @Override public
focal_class.parameters: ()
focal_class.return: void
focal_class.signature: void forget()
focal_class.class_method_signature: PromiseProxy.invoke(@NonNull T impl)
focal_class.full_signature: @Override public Promise<R> invoke(@NonNull T impl)
focal_class.identifier: invoke
focal_class.modifiers: @Override public
focal_class.parameters: (@NonNull T impl)
focal_class.return: Promise<R>
focal_class.signature: Promise<R> invoke(@NonNull T impl)
focal_class.class_method_signature: PromiseProxy.exception()
focal_class.full_signature: @NonNull @Override public ActorInvokeException exception()
focal_class.identifier: exception
focal_class.modifiers: @NonNull @Override public
focal_class.parameters: ()
focal_class.return: ActorInvokeException
focal_class.signature: ActorInvokeException exception()
focal_class.class_method_signature: PromiseProxy.toString()
focal_class.full_signature: @Override public String toString()
focal_class.identifier: toString
focal_class.modifiers: @Override public
focal_class.parameters: ()
focal_class.return: String
focal_class.signature: String toString()
focal_class.superclass: extends Promise<R>
focal_method.body: @Override
      public void onResult(@Nullable R result) {
          final ResultListener<R> listener = mListener;
          mListener = null;
  
          if (listener == null) {
              throw new ResultListenerIsNotSpecifiedException();
          }
  
          listener.onResult(result);
      }
focal_method.class_method_signature: PromiseProxy.onResult(@Nullable R result)
focal_method.full_signature: @Override public void onResult(@Nullable R result)
focal_method.identifier: onResult
focal_method.invocations: onResult
focal_method.modifiers: @Override public
focal_method.parameters: (@Nullable R result)
focal_method.return: void
focal_method.signature: void onResult(@Nullable R result)