// 
// Decompiled by Procyon v0.6.0
// 

package com.google.common.flogger.backend;

import com.google.common.flogger.context.LogLevelMap;
import com.google.common.flogger.context.Tags;
import com.google.common.flogger.StackSize;
import com.google.common.flogger.FluentLogger;
import java.util.concurrent.atomic.AtomicBoolean;
import com.google.common.flogger.context.ScopedLoggingContext;
import com.google.common.flogger.context.ContextDataProvider;

public final class NoOpContextDataProvider extends ContextDataProvider
{
    private static final ContextDataProvider NO_OP_INSTANCE;
    private final ScopedLoggingContext noOpContext;
    
    public NoOpContextDataProvider() {
        this.noOpContext = new NoOpScopedLoggingContext();
    }
    
    public static final ContextDataProvider getInstance() {
        return NoOpContextDataProvider.NO_OP_INSTANCE;
    }
    
    @Override
    public ScopedLoggingContext getContextApiSingleton() {
        return this.noOpContext;
    }
    
    @Override
    public String toString() {
        return "No-op Provider";
    }
    
    static {
        NO_OP_INSTANCE = new NoOpContextDataProvider();
    }
    
    private static final class NoOpScopedLoggingContext extends ScopedLoggingContext implements LoggingContextCloseable
    {
        private final AtomicBoolean haveWarned;
        
        private NoOpScopedLoggingContext() {
            this.haveWarned = new AtomicBoolean();
        }
        
        private void logWarningOnceOnly() {
            if (this.haveWarned.compareAndSet(false, true)) {
                LazyLogger.logger.atWarning().withStackTrace(StackSize.SMALL).log("Scoped logging contexts are disabled; no context data provider was installed.\nTo enable scoped logging contexts in your application, see the site-specific Platform class used to configure logging behaviour.\nDefault Platform: com.google.common.flogger.backend.system.DefaultPlatform");
            }
        }
        
        @Override
        public Builder newContext() {
            return new Builder() {
                @Override
                public LoggingContextCloseable install() {
                    NoOpScopedLoggingContext.this.logWarningOnceOnly();
                    return NoOpScopedLoggingContext.this;
                }
            };
        }
        
        @Override
        public boolean addTags(final Tags tags) {
            this.logWarningOnceOnly();
            return false;
        }
        
        @Override
        public boolean applyLogLevelMap(final LogLevelMap m) {
            this.logWarningOnceOnly();
            return false;
        }
        
        @Override
        public void close() {
        }
        
        private static final class LazyLogger
        {
            private static final FluentLogger logger;
            
            static {
                logger = FluentLogger.forEnclosingClass();
            }
        }
    }
}
