All Downloads are FREE. Search and download functionalities are using the official Maven repository.

io.github.vipcxj.jasync.ng.spec.JContext Maven / Gradle / Ivy

package io.github.vipcxj.jasync.ng.spec;

import io.github.vipcxj.jasync.ng.spec.annotations.Internal;
import io.github.vipcxj.jasync.ng.spec.spi.JContextProvider;

import java.util.Optional;
import java.util.Set;

public interface JContext extends JAsyncRoutine {

    JContextProvider provider = Utils.getProvider(JContextProvider.class);

    static JContext defaultContext() {
        return provider.defaultContext();
    }
    static JContext create(JScheduler scheduler, boolean supportStackTrace) {
        return provider.create(scheduler, supportStackTrace);
    }
    default JContext create(JScheduler scheduler) {
        return create(scheduler, true);
    }
    default JContext create(boolean supportStackTrace) {
        return create(JScheduler.defaultScheduler(), supportStackTrace);
    }
     T get(Object key);
    JContext set(Object key, Object value);
    JContext remove(Object key);
    boolean hasKey(Object key);
    Set keys();
    default  T getOrDefault(Object key, T defaultValue) {
        if (hasKey(key)) {
            return get(key);
        } else {
            return defaultValue;
        }
    }
    default  Optional getOrEmpty(Object key) {
        if (hasKey(key)) {
            return Optional.of(get(key));
        } else {
            return Optional.empty();
        }
    }
    int size();
    default boolean isEmpty() {
        return size() == 0;
    }

    @Internal
    Object[] getLocals();
    @Internal
    JContext pushLocals(Object... args);
    @Internal
    JContext popLocals();
    @Internal
    JContext setPortal(int jumpIndex, JPortal portal);
    @Internal
     JPromise jump(int jumpIndex);
    @Internal
    JContext removePortal(int jumpIndex);
    JScheduler getScheduler();
    JContext setScheduler(JScheduler scheduler);
    @Internal
    JContext pushStackFrame(String declaringClass, String method, String fileName);
    @Internal
    JContext setLineNumber(int lineNumber);
    @Internal
    JContext popStackFrame();
    @Internal
    @Override
    JContext fork();
    void fixException(Throwable throwable);
}