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

com.google.inject.internal.InternalFlags Maven / Gradle / Ivy

package com.google.inject.internal;

import java.security.AccessController;
import java.security.PrivilegedAction;

/**
 * Contains flags for Guice.
 */
public class InternalFlags {

    private static final IncludeStackTraceOption INCLUDE_STACK_TRACES
            = parseIncludeStackTraceOption();

    private static final CustomClassLoadingOption CUSTOM_CLASS_LOADING
            = parseCustomClassLoadingOption();

    private static final NullableProvidesOption NULLABLE_PROVIDES
            = parseNullableProvidesOption(NullableProvidesOption.ERROR);

    public static IncludeStackTraceOption getIncludeStackTraceOption() {
        return INCLUDE_STACK_TRACES;
    }

    public static CustomClassLoadingOption getCustomClassLoadingOption() {
        return CUSTOM_CLASS_LOADING;
    }

    public static NullableProvidesOption getNullableProvidesOption() {
        return NULLABLE_PROVIDES;
    }

    private static IncludeStackTraceOption parseIncludeStackTraceOption() {
        return getSystemOption("guice_include_stack_traces",
                IncludeStackTraceOption.ONLY_FOR_DECLARING_SOURCE);
    }

    private static CustomClassLoadingOption parseCustomClassLoadingOption() {
        return getSystemOption("guice_custom_class_loading",
                CustomClassLoadingOption.BRIDGE, CustomClassLoadingOption.OFF);
    }

    private static NullableProvidesOption parseNullableProvidesOption(
            NullableProvidesOption defaultValue) {
        return getSystemOption("guice_check_nullable_provides_params", defaultValue);
    }

    /**
     * Gets the system option indicated by the specified key; runs as a privileged action.
     *
     * @param name         of the system option
     * @param defaultValue if the option is not set
     * @return value of the option, defaultValue if not set
     */
    private static > T getSystemOption(final String name, T defaultValue) {
        return getSystemOption(name, defaultValue, defaultValue);
    }

    /**
     * Gets the system option indicated by the specified key; runs as a privileged action.
     *
     * @param name         of the system option
     * @param defaultValue if the option is not set
     * @param secureValue  if the security manager disallows access to the option
     * @return value of the option, defaultValue if not set, secureValue if no access
     */
    private static > T getSystemOption(final String name, T defaultValue,
                                                         T secureValue) {
        Class enumType = defaultValue.getDeclaringClass();
        try {
            String value = AccessController.doPrivileged((PrivilegedAction) ()
                    -> System.getProperty(name));
            return (value != null && value.length() > 0) ? Enum.valueOf(enumType, value) : defaultValue;
        } catch (SecurityException e) {
            return secureValue;
        } catch (IllegalArgumentException e) {
            return defaultValue;
        }
    }

    /**
     * The options for Guice stack trace collection.
     */
    public enum IncludeStackTraceOption {
        /**
         * No stack trace collection
         */
        OFF,
        /**
         * Minimum stack trace collection (Default)
         */
        ONLY_FOR_DECLARING_SOURCE,
        /**
         * Full stack trace for everything
         */
        COMPLETE
    }

    /**
     * The options for Guice custom class loading.
     */
    public enum CustomClassLoadingOption {
        /**
         * No custom class loading
         */
        OFF,
        /**
         * Automatically bridge between class loaders (Default)
         */
        BRIDGE
    }

    public enum NullableProvidesOption {
        /**
         * Ignore null parameters to @Provides methods.
         */
        IGNORE,
        /**
         * Warn if null parameters are passed to non-@Nullable parameters of provides methods.
         */
        WARN,
        /**
         * Error if null parameters are passed to non-@Nullable parameters of provides parameters
         */
        ERROR
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy