Copyright (c) 2016-present, RxJava Contributors. Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
/** * Copyright (c) 2016-present, RxJava Contributors. * * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in * compliance with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software distributed under the License is * distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See * the License for the specific language governing permissions and limitations under the License. */
package io.reactivex.internal.disposables; import io.reactivex.*; import io.reactivex.annotations.Nullable; import io.reactivex.internal.fuseable.QueueDisposable;
Represents a stateless empty Disposable that reports being always empty and disposed.

It is also async-fuseable but empty all the time.

Since EmptyDisposable implements QueueDisposable and is empty, don't use it in tests and then signal onNext with it; use Disposables.empty() instead.

/** * Represents a stateless empty Disposable that reports being always * empty and disposed. * <p>It is also async-fuseable but empty all the time. * <p>Since EmptyDisposable implements QueueDisposable and is empty, * don't use it in tests and then signal onNext with it; * use Disposables.empty() instead. */
public enum EmptyDisposable implements QueueDisposable<Object> {
Since EmptyDisposable implements QueueDisposable and is empty, don't use it in tests and then signal onNext with it; use Disposables.empty() instead.
/** * Since EmptyDisposable implements QueueDisposable and is empty, * don't use it in tests and then signal onNext with it; * use Disposables.empty() instead. */
INSTANCE,
An empty disposable that returns false for isDisposed.
/** * An empty disposable that returns false for isDisposed. */
NEVER ; @Override public void dispose() { // no-op } @Override public boolean isDisposed() { return this == INSTANCE; } public static void complete(Observer<?> observer) { observer.onSubscribe(INSTANCE); observer.onComplete(); } public static void complete(MaybeObserver<?> observer) { observer.onSubscribe(INSTANCE); observer.onComplete(); } public static void error(Throwable e, Observer<?> observer) { observer.onSubscribe(INSTANCE); observer.onError(e); } public static void complete(CompletableObserver observer) { observer.onSubscribe(INSTANCE); observer.onComplete(); } public static void error(Throwable e, CompletableObserver observer) { observer.onSubscribe(INSTANCE); observer.onError(e); } public static void error(Throwable e, SingleObserver<?> observer) { observer.onSubscribe(INSTANCE); observer.onError(e); } public static void error(Throwable e, MaybeObserver<?> observer) { observer.onSubscribe(INSTANCE); observer.onError(e); } @Override public boolean offer(Object value) { throw new UnsupportedOperationException("Should not be called!"); } @Override public boolean offer(Object v1, Object v2) { throw new UnsupportedOperationException("Should not be called!"); } @Nullable @Override public Object poll() throws Exception { return null; // always empty } @Override public boolean isEmpty() { return true; // always empty } @Override public void clear() { // nothing to do } @Override public int requestFusion(int mode) { return mode & ASYNC; } }