FactoryProxy.java revision c3f928404a91cf837d809dcc465ba43442bc1198
13d58d6b7c1235722366a641759a02bd9c6625c21limpbizkit/** 23d58d6b7c1235722366a641759a02bd9c6625c21limpbizkit * Copyright (C) 2008 Google Inc. 33d58d6b7c1235722366a641759a02bd9c6625c21limpbizkit * 43d58d6b7c1235722366a641759a02bd9c6625c21limpbizkit * Licensed under the Apache License, Version 2.0 (the "License"); 53d58d6b7c1235722366a641759a02bd9c6625c21limpbizkit * you may not use this file except in compliance with the License. 63d58d6b7c1235722366a641759a02bd9c6625c21limpbizkit * You may obtain a copy of the License at 73d58d6b7c1235722366a641759a02bd9c6625c21limpbizkit * 83d58d6b7c1235722366a641759a02bd9c6625c21limpbizkit * http://www.apache.org/licenses/LICENSE-2.0 93d58d6b7c1235722366a641759a02bd9c6625c21limpbizkit * 103d58d6b7c1235722366a641759a02bd9c6625c21limpbizkit * Unless required by applicable law or agreed to in writing, software 113d58d6b7c1235722366a641759a02bd9c6625c21limpbizkit * distributed under the License is distributed on an "AS IS" BASIS, 123d58d6b7c1235722366a641759a02bd9c6625c21limpbizkit * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 133d58d6b7c1235722366a641759a02bd9c6625c21limpbizkit * See the License for the specific language governing permissions and 143d58d6b7c1235722366a641759a02bd9c6625c21limpbizkit * limitations under the License. 153d58d6b7c1235722366a641759a02bd9c6625c21limpbizkit */ 163d58d6b7c1235722366a641759a02bd9c6625c21limpbizkit 173d58d6b7c1235722366a641759a02bd9c6625c21limpbizkit 183d58d6b7c1235722366a641759a02bd9c6625c21limpbizkitpackage com.google.inject; 193d58d6b7c1235722366a641759a02bd9c6625c21limpbizkit 209dc32d4b6df8725f009a93f51e410564a362ccf0limpbizkitimport com.google.inject.internal.Errors; 21163c48aafee02f9e918a6e7385f5b3312e8edfb6limpbizkitimport com.google.inject.internal.ErrorsException; 2276c24b172e5c4c4b6d51c10dd5c1f491a4033157limpbizkitimport com.google.inject.internal.InternalContext; 2376c24b172e5c4c4b6d51c10dd5c1f491a4033157limpbizkitimport com.google.inject.internal.InternalFactory; 243d58d6b7c1235722366a641759a02bd9c6625c21limpbizkitimport com.google.inject.internal.ToStringBuilder; 25a98bc7a649ffad237fc64c21220766fe24b96890limpbizkitimport com.google.inject.spi.Dependency; 263d58d6b7c1235722366a641759a02bd9c6625c21limpbizkit 273d58d6b7c1235722366a641759a02bd9c6625c21limpbizkit/** 28fcbdf999a15039ecad6157c1bf44a835df826a27limpbizkit * A placeholder which enables us to swap in the real factory once the injector is created. 293d58d6b7c1235722366a641759a02bd9c6625c21limpbizkit */ 3000ca9f749aa80383ee7d85ad25e1535a79fe5718limpbizkitclass FactoryProxy<T> implements InternalFactory<T>, BindingProcessor.CreationListener { 313d58d6b7c1235722366a641759a02bd9c6625c21limpbizkit 32fcbdf999a15039ecad6157c1bf44a835df826a27limpbizkit private final InjectorImpl injector; 333d58d6b7c1235722366a641759a02bd9c6625c21limpbizkit private final Key<T> key; 343d58d6b7c1235722366a641759a02bd9c6625c21limpbizkit private final Key<? extends T> targetKey; 353d58d6b7c1235722366a641759a02bd9c6625c21limpbizkit private final Object source; 363d58d6b7c1235722366a641759a02bd9c6625c21limpbizkit 37e4647a6dd1f38eb3f042ca22716d7a182cabcbe2limpbizkit private InternalFactory<? extends T> targetFactory; 383d58d6b7c1235722366a641759a02bd9c6625c21limpbizkit 39fcbdf999a15039ecad6157c1bf44a835df826a27limpbizkit FactoryProxy(InjectorImpl injector, Key<T> key, Key<? extends T> targetKey, Object source) { 40fcbdf999a15039ecad6157c1bf44a835df826a27limpbizkit this.injector = injector; 413d58d6b7c1235722366a641759a02bd9c6625c21limpbizkit this.key = key; 423d58d6b7c1235722366a641759a02bd9c6625c21limpbizkit this.targetKey = targetKey; 433d58d6b7c1235722366a641759a02bd9c6625c21limpbizkit this.source = source; 443d58d6b7c1235722366a641759a02bd9c6625c21limpbizkit } 453d58d6b7c1235722366a641759a02bd9c6625c21limpbizkit 46c3f928404a91cf837d809dcc465ba43442bc1198limpbizkit public void notify(final Errors errors) { 479dc32d4b6df8725f009a93f51e410564a362ccf0limpbizkit try { 482c2c6102cd88d513aae990db670b03187a7956aflimpbizkit targetFactory = injector.getInternalFactory(targetKey, errors.withSource(source)); 49163c48aafee02f9e918a6e7385f5b3312e8edfb6limpbizkit } catch (ErrorsException e) { 509dc32d4b6df8725f009a93f51e410564a362ccf0limpbizkit errors.merge(e.getErrors()); 519dc32d4b6df8725f009a93f51e410564a362ccf0limpbizkit } 523d58d6b7c1235722366a641759a02bd9c6625c21limpbizkit } 533d58d6b7c1235722366a641759a02bd9c6625c21limpbizkit 54a98bc7a649ffad237fc64c21220766fe24b96890limpbizkit public T get(Errors errors, InternalContext context, Dependency<?> dependency) 55163c48aafee02f9e918a6e7385f5b3312e8edfb6limpbizkit throws ErrorsException { 5606898069ffc810f4dd71ef9aa8b63e2b67cacb8flimpbizkit return targetFactory.get(errors.withSource(targetKey), context, dependency); 573d58d6b7c1235722366a641759a02bd9c6625c21limpbizkit } 583d58d6b7c1235722366a641759a02bd9c6625c21limpbizkit 59477f9f9ce3e1077866b579e99cd33ab824f1ee69limpbizkit @Override public String toString() { 603d58d6b7c1235722366a641759a02bd9c6625c21limpbizkit return new ToStringBuilder(FactoryProxy.class) 613d58d6b7c1235722366a641759a02bd9c6625c21limpbizkit .add("key", key) 623d58d6b7c1235722366a641759a02bd9c6625c21limpbizkit .add("provider", targetFactory) 633d58d6b7c1235722366a641759a02bd9c6625c21limpbizkit .toString(); 643d58d6b7c1235722366a641759a02bd9c6625c21limpbizkit } 653d58d6b7c1235722366a641759a02bd9c6625c21limpbizkit} 66