1c3f928404a91cf837d809dcc465ba43442bc1198limpbizkit/**
2c3f928404a91cf837d809dcc465ba43442bc1198limpbizkit * Copyright (C) 2008 Google Inc.
3c3f928404a91cf837d809dcc465ba43442bc1198limpbizkit *
4c3f928404a91cf837d809dcc465ba43442bc1198limpbizkit * Licensed under the Apache License, Version 2.0 (the "License");
5c3f928404a91cf837d809dcc465ba43442bc1198limpbizkit * you may not use this file except in compliance with the License.
6c3f928404a91cf837d809dcc465ba43442bc1198limpbizkit * You may obtain a copy of the License at
7c3f928404a91cf837d809dcc465ba43442bc1198limpbizkit *
8c3f928404a91cf837d809dcc465ba43442bc1198limpbizkit * http://www.apache.org/licenses/LICENSE-2.0
9c3f928404a91cf837d809dcc465ba43442bc1198limpbizkit *
10c3f928404a91cf837d809dcc465ba43442bc1198limpbizkit * Unless required by applicable law or agreed to in writing, software
11c3f928404a91cf837d809dcc465ba43442bc1198limpbizkit * distributed under the License is distributed on an "AS IS" BASIS,
12c3f928404a91cf837d809dcc465ba43442bc1198limpbizkit * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13c3f928404a91cf837d809dcc465ba43442bc1198limpbizkit * See the License for the specific language governing permissions and
14c3f928404a91cf837d809dcc465ba43442bc1198limpbizkit * limitations under the License.
15c3f928404a91cf837d809dcc465ba43442bc1198limpbizkit */
16c3f928404a91cf837d809dcc465ba43442bc1198limpbizkit
17c3f928404a91cf837d809dcc465ba43442bc1198limpbizkitpackage com.google.inject.spi;
18c3f928404a91cf837d809dcc465ba43442bc1198limpbizkit
19c3f928404a91cf837d809dcc465ba43442bc1198limpbizkitimport com.google.inject.Injector;
20c3f928404a91cf837d809dcc465ba43442bc1198limpbizkitimport com.google.inject.Key;
21b7a02b02d81c830d148355c90bc309bcd66fb592sberlin
22c3f928404a91cf837d809dcc465ba43442bc1198limpbizkitimport java.util.List;
23c3f928404a91cf837d809dcc465ba43442bc1198limpbizkitimport java.util.Set;
24c3f928404a91cf837d809dcc465ba43442bc1198limpbizkit
25c3f928404a91cf837d809dcc465ba43442bc1198limpbizkit/**
26c3f928404a91cf837d809dcc465ba43442bc1198limpbizkit * A private collection of elements that are hidden from the enclosing injector or module by
27c3f928404a91cf837d809dcc465ba43442bc1198limpbizkit * default. See {@link com.google.inject.PrivateModule PrivateModule} for details.
28c3f928404a91cf837d809dcc465ba43442bc1198limpbizkit *
29c3f928404a91cf837d809dcc465ba43442bc1198limpbizkit * @author jessewilson@google.com (Jesse Wilson)
30c3f928404a91cf837d809dcc465ba43442bc1198limpbizkit * @since 2.0
31c3f928404a91cf837d809dcc465ba43442bc1198limpbizkit */
32c3f928404a91cf837d809dcc465ba43442bc1198limpbizkitpublic interface PrivateElements extends Element {
33c3f928404a91cf837d809dcc465ba43442bc1198limpbizkit
34c3f928404a91cf837d809dcc465ba43442bc1198limpbizkit  /**
35c3f928404a91cf837d809dcc465ba43442bc1198limpbizkit   * Returns the configuration information in this private environment.
36c3f928404a91cf837d809dcc465ba43442bc1198limpbizkit   */
37c3f928404a91cf837d809dcc465ba43442bc1198limpbizkit  List<Element> getElements();
38c3f928404a91cf837d809dcc465ba43442bc1198limpbizkit
39c3f928404a91cf837d809dcc465ba43442bc1198limpbizkit  /**
40c3f928404a91cf837d809dcc465ba43442bc1198limpbizkit   * Returns the child injector that hosts these private elements, or null if the elements haven't
41c3f928404a91cf837d809dcc465ba43442bc1198limpbizkit   * been used to create an injector.
42c3f928404a91cf837d809dcc465ba43442bc1198limpbizkit   */
43c3f928404a91cf837d809dcc465ba43442bc1198limpbizkit  Injector getInjector();
44c3f928404a91cf837d809dcc465ba43442bc1198limpbizkit
45c3f928404a91cf837d809dcc465ba43442bc1198limpbizkit  /**
46c3f928404a91cf837d809dcc465ba43442bc1198limpbizkit   * Returns the unique exposed keys for these private elements.
47c3f928404a91cf837d809dcc465ba43442bc1198limpbizkit   */
48c3f928404a91cf837d809dcc465ba43442bc1198limpbizkit  Set<Key<?>> getExposedKeys();
49aa07ab09a27d4b83e66fb1666e7c780821ed106dlimpbizkit
50aa07ab09a27d4b83e66fb1666e7c780821ed106dlimpbizkit  /**
51aa07ab09a27d4b83e66fb1666e7c780821ed106dlimpbizkit   * Returns an arbitrary object containing information about the "place" where this key was
52aa07ab09a27d4b83e66fb1666e7c780821ed106dlimpbizkit   * exposed. Used by Guice in the production of descriptive error messages.
53aa07ab09a27d4b83e66fb1666e7c780821ed106dlimpbizkit   *
54aa07ab09a27d4b83e66fb1666e7c780821ed106dlimpbizkit   * <p>Tools might specially handle types they know about; {@code StackTraceElement} is a good
55aa07ab09a27d4b83e66fb1666e7c780821ed106dlimpbizkit   * example. Tools should simply call {@code toString()} on the source object if the type is
56aa07ab09a27d4b83e66fb1666e7c780821ed106dlimpbizkit   * unfamiliar.
57aa07ab09a27d4b83e66fb1666e7c780821ed106dlimpbizkit   *
58aa07ab09a27d4b83e66fb1666e7c780821ed106dlimpbizkit   * @param key one of the keys exposed by this module.
59aa07ab09a27d4b83e66fb1666e7c780821ed106dlimpbizkit   */
60aa07ab09a27d4b83e66fb1666e7c780821ed106dlimpbizkit  Object getExposedSource(Key<?> key);
61c3f928404a91cf837d809dcc465ba43442bc1198limpbizkit}
62