1e451ef79c95a19a0e8044567f133f0ad1a40f4bclimpbizkit/** 2e451ef79c95a19a0e8044567f133f0ad1a40f4bclimpbizkit * Copyright (C) 2007 Google Inc. 3e451ef79c95a19a0e8044567f133f0ad1a40f4bclimpbizkit * 4e451ef79c95a19a0e8044567f133f0ad1a40f4bclimpbizkit * Licensed under the Apache License, Version 2.0 (the "License"); 5e451ef79c95a19a0e8044567f133f0ad1a40f4bclimpbizkit * you may not use this file except in compliance with the License. 6e451ef79c95a19a0e8044567f133f0ad1a40f4bclimpbizkit * You may obtain a copy of the License at 7e451ef79c95a19a0e8044567f133f0ad1a40f4bclimpbizkit * 8e451ef79c95a19a0e8044567f133f0ad1a40f4bclimpbizkit * http://www.apache.org/licenses/LICENSE-2.0 9e451ef79c95a19a0e8044567f133f0ad1a40f4bclimpbizkit * 10e451ef79c95a19a0e8044567f133f0ad1a40f4bclimpbizkit * Unless required by applicable law or agreed to in writing, software 11e451ef79c95a19a0e8044567f133f0ad1a40f4bclimpbizkit * distributed under the License is distributed on an "AS IS" BASIS, 12e451ef79c95a19a0e8044567f133f0ad1a40f4bclimpbizkit * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13e451ef79c95a19a0e8044567f133f0ad1a40f4bclimpbizkit * See the License for the specific language governing permissions and 14e451ef79c95a19a0e8044567f133f0ad1a40f4bclimpbizkit * limitations under the License. 15e451ef79c95a19a0e8044567f133f0ad1a40f4bclimpbizkit */ 16e451ef79c95a19a0e8044567f133f0ad1a40f4bclimpbizkit 17e451ef79c95a19a0e8044567f133f0ad1a40f4bclimpbizkitpackage com.google.inject.throwingproviders; 18e451ef79c95a19a0e8044567f133f0ad1a40f4bclimpbizkit 19b7a02b02d81c830d148355c90bc309bcd66fb592sberlinimport static java.lang.annotation.RetentionPolicy.RUNTIME; 20b7a02b02d81c830d148355c90bc309bcd66fb592sberlin 21e451ef79c95a19a0e8044567f133f0ad1a40f4bclimpbizkitimport com.google.inject.Key; 22e451ef79c95a19a0e8044567f133f0ad1a40f4bclimpbizkitimport com.google.inject.Provider; 23e451ef79c95a19a0e8044567f133f0ad1a40f4bclimpbizkitimport com.google.inject.Scope; 24e451ef79c95a19a0e8044567f133f0ad1a40f4bclimpbizkitimport com.google.inject.ScopeAnnotation; 25b7a02b02d81c830d148355c90bc309bcd66fb592sberlin 26e451ef79c95a19a0e8044567f133f0ad1a40f4bclimpbizkitimport java.lang.annotation.Retention; 27e451ef79c95a19a0e8044567f133f0ad1a40f4bclimpbizkitimport java.util.HashMap; 28e451ef79c95a19a0e8044567f133f0ad1a40f4bclimpbizkitimport java.util.Map; 29e451ef79c95a19a0e8044567f133f0ad1a40f4bclimpbizkit 30e451ef79c95a19a0e8044567f133f0ad1a40f4bclimpbizkit/** 31e451ef79c95a19a0e8044567f133f0ad1a40f4bclimpbizkit * A simple scope that can be explicitly reset. 32e451ef79c95a19a0e8044567f133f0ad1a40f4bclimpbizkit * 33e451ef79c95a19a0e8044567f133f0ad1a40f4bclimpbizkit * @author jmourits@google.com (Jerome Mourits) 34e451ef79c95a19a0e8044567f133f0ad1a40f4bclimpbizkit */ 35e451ef79c95a19a0e8044567f133f0ad1a40f4bclimpbizkitclass TestScope implements Scope { 36e451ef79c95a19a0e8044567f133f0ad1a40f4bclimpbizkit 37e451ef79c95a19a0e8044567f133f0ad1a40f4bclimpbizkit @Retention(RUNTIME) @ScopeAnnotation 38e451ef79c95a19a0e8044567f133f0ad1a40f4bclimpbizkit public @interface Scoped { } 39e451ef79c95a19a0e8044567f133f0ad1a40f4bclimpbizkit 40e451ef79c95a19a0e8044567f133f0ad1a40f4bclimpbizkit private Map<Key, Object> inScopeObjectsMap = new HashMap<Key, Object>(); 41e451ef79c95a19a0e8044567f133f0ad1a40f4bclimpbizkit 42e451ef79c95a19a0e8044567f133f0ad1a40f4bclimpbizkit public <T> Provider<T> scope( 43e451ef79c95a19a0e8044567f133f0ad1a40f4bclimpbizkit final Key<T> key, final Provider<T> provider) { 44e451ef79c95a19a0e8044567f133f0ad1a40f4bclimpbizkit return new Provider<T>() { 45e451ef79c95a19a0e8044567f133f0ad1a40f4bclimpbizkit @SuppressWarnings({"unchecked"}) 46e451ef79c95a19a0e8044567f133f0ad1a40f4bclimpbizkit public T get() { 47e451ef79c95a19a0e8044567f133f0ad1a40f4bclimpbizkit T t = (T) inScopeObjectsMap.get(key); 48e451ef79c95a19a0e8044567f133f0ad1a40f4bclimpbizkit if (t == null) { 49e451ef79c95a19a0e8044567f133f0ad1a40f4bclimpbizkit t = provider.get(); 50e451ef79c95a19a0e8044567f133f0ad1a40f4bclimpbizkit inScopeObjectsMap.put(key, t); 51e451ef79c95a19a0e8044567f133f0ad1a40f4bclimpbizkit } 52e451ef79c95a19a0e8044567f133f0ad1a40f4bclimpbizkit return t; 53e451ef79c95a19a0e8044567f133f0ad1a40f4bclimpbizkit } 54e451ef79c95a19a0e8044567f133f0ad1a40f4bclimpbizkit }; 55e451ef79c95a19a0e8044567f133f0ad1a40f4bclimpbizkit } 56e451ef79c95a19a0e8044567f133f0ad1a40f4bclimpbizkit 57e451ef79c95a19a0e8044567f133f0ad1a40f4bclimpbizkit public void beginNewScope() { 58e451ef79c95a19a0e8044567f133f0ad1a40f4bclimpbizkit inScopeObjectsMap = new HashMap<Key, Object>(); 59e451ef79c95a19a0e8044567f133f0ad1a40f4bclimpbizkit } 60e451ef79c95a19a0e8044567f133f0ad1a40f4bclimpbizkit} 61