test_class.declarator: THROWING_DISPOSABLE = new Disposable() {
  
          @Override
          public boolean isDisposed() {
              // TODO Auto-generated method stub
              return false;
          }
  
          @Override
          public void dispose() {
              // break contract by throwing exception
              throw new SafeObserverTestException("failure from unsubscribe");
          }
      }
test_class.modifier: static final
test_class.original_string: static final Disposable THROWING_DISPOSABLE = new Disposable() {
  
          @Override
          public boolean isDisposed() {
              // TODO Auto-generated method stub
              return false;
          }
  
          @Override
          public void dispose() {
              // break contract by throwing exception
              throw new SafeObserverTestException("failure from unsubscribe");
          }
      };
test_class.type: Disposable
test_class.var_name: THROWING_DISPOSABLE
test_class.file: rxjava/src/test/java/io/reactivex/observers/SafeObserverTest.java
test_class.identifier: SafeObserverTest
test_case.body: @Test
      public void onSubscribeCrashes() {
          List<Throwable> list = TestHelper.trackPluginErrors();
  
          try {
              CrashDummy cd = new CrashDummy(true, 1, false, false, false);
              SafeObserver<Object> so = cd.toSafe();
              so.onSubscribe(cd);
  
              TestHelper.assertUndeliverable(list, 0, TestException.class, "onSubscribe()");
          } finally {
              RxJavaPlugins.reset();
          }
      }
test_case.class_method_signature: SafeObserverTest.onSubscribeCrashes()
test_case.full_signature: @Test public void onSubscribeCrashes()
test_case.identifier: onSubscribeCrashes
test_case.invocations: trackPluginErrors toSafe onSubscribe assertUndeliverable reset
test_case.modifiers: @Test public
test_case.parameters: ()
test_case.return: void
test_case.signature: void onSubscribeCrashes()
focal_class.declarator: actual
focal_class.modifier: final
focal_class.original_string: final Observer<? super T> actual;
focal_class.type: Observer<? super T>
focal_class.var_name: actual
focal_class.declarator: s
focal_class.original_string: Disposable s;
focal_class.type: Disposable
focal_class.var_name: s
focal_class.declarator: done
focal_class.original_string: boolean done;
focal_class.type: boolean
focal_class.var_name: done
focal_class.file: rxjava/src/main/java/io/reactivex/observers/SafeObserver.java
focal_class.identifier: SafeObserver
focal_class.interfaces: implements Observer<T>, Disposable
focal_class.class_method_signature: SafeObserver.SafeObserver(@NonNull Observer<? super T> actual)
focal_class.full_signature: public  SafeObserver(@NonNull Observer<? super T> actual)
focal_class.identifier: SafeObserver
focal_class.modifiers: public
focal_class.parameters: (@NonNull Observer<? super T> actual)
focal_class.signature:  SafeObserver(@NonNull Observer<? super T> actual)
focal_class.class_method_signature: SafeObserver.onSubscribe(@NonNull Disposable s)
focal_class.full_signature: @Override public void onSubscribe(@NonNull Disposable s)
focal_class.identifier: onSubscribe
focal_class.modifiers: @Override public
focal_class.parameters: (@NonNull Disposable s)
focal_class.return: void
focal_class.signature: void onSubscribe(@NonNull Disposable s)
focal_class.class_method_signature: SafeObserver.dispose()
focal_class.full_signature: @Override public void dispose()
focal_class.identifier: dispose
focal_class.modifiers: @Override public
focal_class.parameters: ()
focal_class.return: void
focal_class.signature: void dispose()
focal_class.class_method_signature: SafeObserver.isDisposed()
focal_class.full_signature: @Override public boolean isDisposed()
focal_class.identifier: isDisposed
focal_class.modifiers: @Override public
focal_class.parameters: ()
focal_class.return: boolean
focal_class.signature: boolean isDisposed()
focal_class.class_method_signature: SafeObserver.onNext(@NonNull T t)
focal_class.full_signature: @Override public void onNext(@NonNull T t)
focal_class.identifier: onNext
focal_class.modifiers: @Override public
focal_class.parameters: (@NonNull T t)
focal_class.return: void
focal_class.signature: void onNext(@NonNull T t)
focal_class.class_method_signature: SafeObserver.onNextNoSubscription()
focal_class.full_signature:  void onNextNoSubscription()
focal_class.identifier: onNextNoSubscription
focal_class.parameters: ()
focal_class.return: void
focal_class.signature: void onNextNoSubscription()
focal_class.class_method_signature: SafeObserver.onError(@NonNull Throwable t)
focal_class.full_signature: @Override public void onError(@NonNull Throwable t)
focal_class.identifier: onError
focal_class.modifiers: @Override public
focal_class.parameters: (@NonNull Throwable t)
focal_class.return: void
focal_class.signature: void onError(@NonNull Throwable t)
focal_class.class_method_signature: SafeObserver.onComplete()
focal_class.full_signature: @Override public void onComplete()
focal_class.identifier: onComplete
focal_class.modifiers: @Override public
focal_class.parameters: ()
focal_class.return: void
focal_class.signature: void onComplete()
focal_class.class_method_signature: SafeObserver.onCompleteNoSubscription()
focal_class.full_signature:  void onCompleteNoSubscription()
focal_class.identifier: onCompleteNoSubscription
focal_class.parameters: ()
focal_class.return: void
focal_class.signature: void onCompleteNoSubscription()
focal_method.body: @Override
      public void onSubscribe(@NonNull Disposable s) {
          if (DisposableHelper.validate(this.s, s)) {
              this.s = s;
              try {
                  actual.onSubscribe(this);
              } catch (Throwable e) {
                  Exceptions.throwIfFatal(e);
                  done = true;
                  // can't call onError because the actual's state may be corrupt at this point
                  try {
                      s.dispose();
                  } catch (Throwable e1) {
                      Exceptions.throwIfFatal(e1);
                      RxJavaPlugins.onError(new CompositeException(e, e1));
                      return;
                  }
                  RxJavaPlugins.onError(e);
              }
          }
      }
focal_method.class_method_signature: SafeObserver.onSubscribe(@NonNull Disposable s)
focal_method.full_signature: @Override public void onSubscribe(@NonNull Disposable s)
focal_method.identifier: onSubscribe
focal_method.invocations: validate onSubscribe throwIfFatal dispose throwIfFatal onError onError
focal_method.modifiers: @Override public
focal_method.parameters: (@NonNull Disposable s)
focal_method.return: void
focal_method.signature: void onSubscribe(@NonNull Disposable s)