src/main/java/io/reactivex/internal/subscribers/BasicFuseableSubscriber.java
@SuppressWarnings("unchecked")
    @Override
    public final void onSubscribe(Subscription s) {
        if (SubscriptionHelper.validate(this.upstream, s)) {

            this.upstream = s;
            if (s instanceof QueueSubscription) {
                this.qs = (QueueSubscription<T>)s;
            }

            if (beforeDownstream()) {

                downstream.onSubscribe(this);

                afterDownstream();
            }

        }
    }
@SuppressWarnings("unchecked")
    @Override
    public final void onSubscribe(Subscription s) {
        if (SubscriptionHelper.validate(this.upstream, s)) {

            this.upstream = s;
            if (s instanceof QueueSubscription) {
                this.qs = (QueueSubscription<T>)s;
            }

            if (beforeDownstream()) {

                downstream.onSubscribe(this);

                afterDownstream();
            }

        }
    }
@ SuppressWarnings ( "unchecked" ) @ Override public final void onSubscribe ( Subscription s ) { if ( SubscriptionHelper . validate ( this . upstream , s ) ) { this . upstream = s ; if ( s instanceof QueueSubscription ) { this . qs = ( QueueSubscription < T > ) s ; } if ( beforeDownstream ( ) ) { downstream . onSubscribe ( this ) ; afterDownstream ( ) ; } } }
final: fixed protocol steps to support fuseable and non-fuseable upstream
final : fixed protocol steps to support fuseable and non - fuseable upstream