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

com.google.inject.State Maven / Gradle / Ivy

There is a newer version: 7.0.0
Show newest version
/**
 * Copyright (C) 2008 Google Inc.
 *
 * 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 com.google.inject;

import com.google.inject.internal.BindingImpl;
import com.google.inject.internal.Errors;
import com.google.inject.internal.ImmutableList;
import com.google.inject.internal.ImmutableSet;
import com.google.inject.internal.MatcherAndConverter;
import com.google.inject.spi.TypeListenerBinding;
import java.lang.annotation.Annotation;
import java.util.List;
import java.util.Map;

/**
 * The inheritable data within an injector. This class is intended to allow parent and local
 * injector data to be accessed as a unit.
 *
 * @author [email protected] (Jesse Wilson)
 */
interface State {

  static final State NONE = new State() {
    public State parent() {
      throw new UnsupportedOperationException();
    }

    public  BindingImpl getExplicitBinding(Key key) {
      return null;
    }

    public Map, Binding> getExplicitBindingsThisLevel() {
      throw new UnsupportedOperationException();
    }

    public void putBinding(Key key, BindingImpl binding) {
      throw new UnsupportedOperationException();
    }

    public Scope getScope(Class scopingAnnotation) {
      return null;
    }

    public void putAnnotation(Class annotationType, Scope scope) {
      throw new UnsupportedOperationException();
    }

    public void addConverter(MatcherAndConverter matcherAndConverter) {
      throw new UnsupportedOperationException();
    }

    public MatcherAndConverter getConverter(String stringValue, TypeLiteral type, Errors errors,
        Object source) {
      throw new UnsupportedOperationException();
    }

    public Iterable getConvertersThisLevel() {
      return ImmutableSet.of();
    }

    









    public void addTypeListener(TypeListenerBinding typeListenerBinding) {
      throw new UnsupportedOperationException();
    }

    public List getTypeListenerBindings() {
      return ImmutableList.of();
    }

    public void blacklist(Key key) {
    }

    public boolean isBlacklisted(Key key) {
      return true;
    }

    public Object lock() {
      throw new UnsupportedOperationException();
    }
  };

  State parent();

  /** Gets a binding which was specified explicitly in a module, or null. */
   BindingImpl getExplicitBinding(Key key);

  /** Returns the explicit bindings at this level only. */
  Map, Binding> getExplicitBindingsThisLevel();

  void putBinding(Key key, BindingImpl binding);

  /** Returns the matching scope, or null. */
  Scope getScope(Class scopingAnnotation);

  void putAnnotation(Class annotationType, Scope scope);

  void addConverter(MatcherAndConverter matcherAndConverter);

  /** Returns the matching converter for {@code type}, or null if none match. */
  MatcherAndConverter getConverter(
      String stringValue, TypeLiteral type, Errors errors, Object source);

  /** Returns all converters at this level only. */
  Iterable getConvertersThisLevel();

  





  void addTypeListener(TypeListenerBinding typeListenerBinding);

  List getTypeListenerBindings();

  /**
   * Forbids the corresponding injector from creating a binding to {@code key}. Child injectors
   * blacklist their bound keys on their parent injectors to prevent just-in-time bindings on the
   * parent injector that would conflict.
   */
  void blacklist(Key key);

  /**
   * Returns true if {@code key} is forbidden from being bound in this injector. This indicates that
   * one of this injector's descendent's has bound the key.
   */
  boolean isBlacklisted(Key key);

  /**
   * Returns the shared lock for all injector data. This is a low-granularity, high-contention lock
   * to be used when reading mutable data (ie. just-in-time bindings, and binding blacklists).
   */
  Object lock();
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy