18d62075e136d207b8fb8ea98d3fd7ec051bdee3climpbizkit/** 28d62075e136d207b8fb8ea98d3fd7ec051bdee3climpbizkit * Copyright (C) 2009 Google Inc. 38d62075e136d207b8fb8ea98d3fd7ec051bdee3climpbizkit * 48d62075e136d207b8fb8ea98d3fd7ec051bdee3climpbizkit * Licensed under the Apache License, Version 2.0 (the "License"); 58d62075e136d207b8fb8ea98d3fd7ec051bdee3climpbizkit * you may not use this file except in compliance with the License. 68d62075e136d207b8fb8ea98d3fd7ec051bdee3climpbizkit * You may obtain a copy of the License at 78d62075e136d207b8fb8ea98d3fd7ec051bdee3climpbizkit * 88d62075e136d207b8fb8ea98d3fd7ec051bdee3climpbizkit * http://www.apache.org/licenses/LICENSE-2.0 98d62075e136d207b8fb8ea98d3fd7ec051bdee3climpbizkit * 108d62075e136d207b8fb8ea98d3fd7ec051bdee3climpbizkit * Unless required by applicable law or agreed to in writing, software 118d62075e136d207b8fb8ea98d3fd7ec051bdee3climpbizkit * distributed under the License is distributed on an "AS IS" BASIS, 128d62075e136d207b8fb8ea98d3fd7ec051bdee3climpbizkit * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 138d62075e136d207b8fb8ea98d3fd7ec051bdee3climpbizkit * See the License for the specific language governing permissions and 148d62075e136d207b8fb8ea98d3fd7ec051bdee3climpbizkit * limitations under the License. 158d62075e136d207b8fb8ea98d3fd7ec051bdee3climpbizkit */ 168d62075e136d207b8fb8ea98d3fd7ec051bdee3climpbizkit 175ae41eb77073b47e75c2dcf3766137f2352fbaf9limpbizkitpackage com.google.inject.internal; 188d62075e136d207b8fb8ea98d3fd7ec051bdee3climpbizkit 19b7a02b02d81c830d148355c90bc309bcd66fb592sberlinimport com.google.common.collect.Lists; 205ae41eb77073b47e75c2dcf3766137f2352fbaf9limpbizkitimport com.google.inject.Key; 215ae41eb77073b47e75c2dcf3766137f2352fbaf9limpbizkitimport com.google.inject.MembersInjector; 225ae41eb77073b47e75c2dcf3766137f2352fbaf9limpbizkitimport com.google.inject.Provider; 235ae41eb77073b47e75c2dcf3766137f2352fbaf9limpbizkitimport com.google.inject.TypeLiteral; 248d62075e136d207b8fb8ea98d3fd7ec051bdee3climpbizkitimport com.google.inject.spi.Element; 258d62075e136d207b8fb8ea98d3fd7ec051bdee3climpbizkitimport com.google.inject.spi.MembersInjectorLookup; 268d62075e136d207b8fb8ea98d3fd7ec051bdee3climpbizkitimport com.google.inject.spi.ProviderLookup; 27b7a02b02d81c830d148355c90bc309bcd66fb592sberlin 288d62075e136d207b8fb8ea98d3fd7ec051bdee3climpbizkitimport java.util.List; 298d62075e136d207b8fb8ea98d3fd7ec051bdee3climpbizkit 308d62075e136d207b8fb8ea98d3fd7ec051bdee3climpbizkit/** 318d62075e136d207b8fb8ea98d3fd7ec051bdee3climpbizkit * Returns providers and members injectors that haven't yet been initialized. As a part of injector 328d62075e136d207b8fb8ea98d3fd7ec051bdee3climpbizkit * creation it's necessary to {@link #initialize initialize} these lookups. 338d62075e136d207b8fb8ea98d3fd7ec051bdee3climpbizkit * 348d62075e136d207b8fb8ea98d3fd7ec051bdee3climpbizkit * @author jessewilson@google.com (Jesse Wilson) 358d62075e136d207b8fb8ea98d3fd7ec051bdee3climpbizkit */ 365ae41eb77073b47e75c2dcf3766137f2352fbaf9limpbizkitfinal class DeferredLookups implements Lookups { 378d62075e136d207b8fb8ea98d3fd7ec051bdee3climpbizkit private final InjectorImpl injector; 388d62075e136d207b8fb8ea98d3fd7ec051bdee3climpbizkit private final List<Element> lookups = Lists.newArrayList(); 398d62075e136d207b8fb8ea98d3fd7ec051bdee3climpbizkit 405ae41eb77073b47e75c2dcf3766137f2352fbaf9limpbizkit DeferredLookups(InjectorImpl injector) { 418d62075e136d207b8fb8ea98d3fd7ec051bdee3climpbizkit this.injector = injector; 428d62075e136d207b8fb8ea98d3fd7ec051bdee3climpbizkit } 438d62075e136d207b8fb8ea98d3fd7ec051bdee3climpbizkit 448d62075e136d207b8fb8ea98d3fd7ec051bdee3climpbizkit /** 458d62075e136d207b8fb8ea98d3fd7ec051bdee3climpbizkit * Initialize the specified lookups, either immediately or when the injector is created. 468d62075e136d207b8fb8ea98d3fd7ec051bdee3climpbizkit */ 475ae41eb77073b47e75c2dcf3766137f2352fbaf9limpbizkit void initialize(Errors errors) { 488d62075e136d207b8fb8ea98d3fd7ec051bdee3climpbizkit injector.lookups = injector; 498d62075e136d207b8fb8ea98d3fd7ec051bdee3climpbizkit new LookupProcessor(errors).process(injector, lookups); 508d62075e136d207b8fb8ea98d3fd7ec051bdee3climpbizkit } 518d62075e136d207b8fb8ea98d3fd7ec051bdee3climpbizkit 528d62075e136d207b8fb8ea98d3fd7ec051bdee3climpbizkit public <T> Provider<T> getProvider(Key<T> key) { 538d62075e136d207b8fb8ea98d3fd7ec051bdee3climpbizkit ProviderLookup<T> lookup = new ProviderLookup<T>(key, key); 548d62075e136d207b8fb8ea98d3fd7ec051bdee3climpbizkit lookups.add(lookup); 558d62075e136d207b8fb8ea98d3fd7ec051bdee3climpbizkit return lookup.getProvider(); 568d62075e136d207b8fb8ea98d3fd7ec051bdee3climpbizkit } 578d62075e136d207b8fb8ea98d3fd7ec051bdee3climpbizkit 588d62075e136d207b8fb8ea98d3fd7ec051bdee3climpbizkit public <T> MembersInjector<T> getMembersInjector(TypeLiteral<T> type) { 598d62075e136d207b8fb8ea98d3fd7ec051bdee3climpbizkit MembersInjectorLookup<T> lookup = new MembersInjectorLookup<T>(type, type); 608d62075e136d207b8fb8ea98d3fd7ec051bdee3climpbizkit lookups.add(lookup); 618d62075e136d207b8fb8ea98d3fd7ec051bdee3climpbizkit return lookup.getMembersInjector(); 628d62075e136d207b8fb8ea98d3fd7ec051bdee3climpbizkit } 638d62075e136d207b8fb8ea98d3fd7ec051bdee3climpbizkit} 64