AbstractProcessor.java revision 5ae41eb77073b47e75c2dcf3766137f2352fbaf9
100ca9f749aa80383ee7d85ad25e1535a79fe5718limpbizkit/** 200ca9f749aa80383ee7d85ad25e1535a79fe5718limpbizkit * Copyright (C) 2008 Google Inc. 300ca9f749aa80383ee7d85ad25e1535a79fe5718limpbizkit * 400ca9f749aa80383ee7d85ad25e1535a79fe5718limpbizkit * Licensed under the Apache License, Version 2.0 (the "License"); 500ca9f749aa80383ee7d85ad25e1535a79fe5718limpbizkit * you may not use this file except in compliance with the License. 600ca9f749aa80383ee7d85ad25e1535a79fe5718limpbizkit * You may obtain a copy of the License at 700ca9f749aa80383ee7d85ad25e1535a79fe5718limpbizkit * 800ca9f749aa80383ee7d85ad25e1535a79fe5718limpbizkit * http://www.apache.org/licenses/LICENSE-2.0 900ca9f749aa80383ee7d85ad25e1535a79fe5718limpbizkit * 1000ca9f749aa80383ee7d85ad25e1535a79fe5718limpbizkit * Unless required by applicable law or agreed to in writing, software 1100ca9f749aa80383ee7d85ad25e1535a79fe5718limpbizkit * distributed under the License is distributed on an "AS IS" BASIS, 1200ca9f749aa80383ee7d85ad25e1535a79fe5718limpbizkit * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1300ca9f749aa80383ee7d85ad25e1535a79fe5718limpbizkit * See the License for the specific language governing permissions and 1400ca9f749aa80383ee7d85ad25e1535a79fe5718limpbizkit * limitations under the License. 1500ca9f749aa80383ee7d85ad25e1535a79fe5718limpbizkit */ 1600ca9f749aa80383ee7d85ad25e1535a79fe5718limpbizkit 175ae41eb77073b47e75c2dcf3766137f2352fbaf9limpbizkitpackage com.google.inject.internal; 1800ca9f749aa80383ee7d85ad25e1535a79fe5718limpbizkit 195ae41eb77073b47e75c2dcf3766137f2352fbaf9limpbizkitimport com.google.inject.Binding; 2000ca9f749aa80383ee7d85ad25e1535a79fe5718limpbizkitimport com.google.inject.spi.Element; 21afa4b5dd2056a8427657186d1804313c3f34fbfelimpbizkitimport com.google.inject.spi.ElementVisitor; 2200ca9f749aa80383ee7d85ad25e1535a79fe5718limpbizkitimport com.google.inject.spi.InjectionRequest; 23ee79246d47f0e4a0a4f86543809135620487332dlimpbizkitimport com.google.inject.spi.MembersInjectorLookup; 2400ca9f749aa80383ee7d85ad25e1535a79fe5718limpbizkitimport com.google.inject.spi.Message; 25c3f928404a91cf837d809dcc465ba43442bc1198limpbizkitimport com.google.inject.spi.PrivateElements; 2600ca9f749aa80383ee7d85ad25e1535a79fe5718limpbizkitimport com.google.inject.spi.ProviderLookup; 2700ca9f749aa80383ee7d85ad25e1535a79fe5718limpbizkitimport com.google.inject.spi.ScopeBinding; 2800ca9f749aa80383ee7d85ad25e1535a79fe5718limpbizkitimport com.google.inject.spi.StaticInjectionRequest; 2900ca9f749aa80383ee7d85ad25e1535a79fe5718limpbizkitimport com.google.inject.spi.TypeConverterBinding; 30ee79246d47f0e4a0a4f86543809135620487332dlimpbizkitimport com.google.inject.spi.TypeListenerBinding; 3100ca9f749aa80383ee7d85ad25e1535a79fe5718limpbizkitimport java.util.Iterator; 3200ca9f749aa80383ee7d85ad25e1535a79fe5718limpbizkitimport java.util.List; 3300ca9f749aa80383ee7d85ad25e1535a79fe5718limpbizkit 3400ca9f749aa80383ee7d85ad25e1535a79fe5718limpbizkit/** 3500ca9f749aa80383ee7d85ad25e1535a79fe5718limpbizkit * Abstract base class for creating an injector from module elements. 3600ca9f749aa80383ee7d85ad25e1535a79fe5718limpbizkit * 3700ca9f749aa80383ee7d85ad25e1535a79fe5718limpbizkit * <p>Extending classes must return {@code true} from any overridden 3800ca9f749aa80383ee7d85ad25e1535a79fe5718limpbizkit * {@code visit*()} methods, in order for the element processor to remove the 3900ca9f749aa80383ee7d85ad25e1535a79fe5718limpbizkit * handled element. 4000ca9f749aa80383ee7d85ad25e1535a79fe5718limpbizkit * 4100ca9f749aa80383ee7d85ad25e1535a79fe5718limpbizkit * @author jessewilson@google.com (Jesse Wilson) 4200ca9f749aa80383ee7d85ad25e1535a79fe5718limpbizkit */ 43afa4b5dd2056a8427657186d1804313c3f34fbfelimpbizkitabstract class AbstractProcessor implements ElementVisitor<Boolean> { 4400ca9f749aa80383ee7d85ad25e1535a79fe5718limpbizkit 4500ca9f749aa80383ee7d85ad25e1535a79fe5718limpbizkit protected Errors errors; 46fcbdf999a15039ecad6157c1bf44a835df826a27limpbizkit protected InjectorImpl injector; 4700ca9f749aa80383ee7d85ad25e1535a79fe5718limpbizkit 4800ca9f749aa80383ee7d85ad25e1535a79fe5718limpbizkit protected AbstractProcessor(Errors errors) { 4900ca9f749aa80383ee7d85ad25e1535a79fe5718limpbizkit this.errors = errors; 5000ca9f749aa80383ee7d85ad25e1535a79fe5718limpbizkit } 5100ca9f749aa80383ee7d85ad25e1535a79fe5718limpbizkit 52fcbdf999a15039ecad6157c1bf44a835df826a27limpbizkit public void process(Iterable<InjectorShell> isolatedInjectorBuilders) { 53fcbdf999a15039ecad6157c1bf44a835df826a27limpbizkit for (InjectorShell injectorShell : isolatedInjectorBuilders) { 54fcbdf999a15039ecad6157c1bf44a835df826a27limpbizkit process(injectorShell.getInjector(), injectorShell.getElements()); 55fcbdf999a15039ecad6157c1bf44a835df826a27limpbizkit } 56fcbdf999a15039ecad6157c1bf44a835df826a27limpbizkit } 57fcbdf999a15039ecad6157c1bf44a835df826a27limpbizkit 58fcbdf999a15039ecad6157c1bf44a835df826a27limpbizkit public void process(InjectorImpl injector, List<Element> elements) { 5900ca9f749aa80383ee7d85ad25e1535a79fe5718limpbizkit Errors errorsAnyElement = this.errors; 60fcbdf999a15039ecad6157c1bf44a835df826a27limpbizkit this.injector = injector; 6100ca9f749aa80383ee7d85ad25e1535a79fe5718limpbizkit try { 6200ca9f749aa80383ee7d85ad25e1535a79fe5718limpbizkit for (Iterator<Element> i = elements.iterator(); i.hasNext(); ) { 6300ca9f749aa80383ee7d85ad25e1535a79fe5718limpbizkit Element element = i.next(); 6400ca9f749aa80383ee7d85ad25e1535a79fe5718limpbizkit this.errors = errorsAnyElement.withSource(element.getSource()); 6500ca9f749aa80383ee7d85ad25e1535a79fe5718limpbizkit Boolean allDone = element.acceptVisitor(this); 6600ca9f749aa80383ee7d85ad25e1535a79fe5718limpbizkit if (allDone) { 6700ca9f749aa80383ee7d85ad25e1535a79fe5718limpbizkit i.remove(); 6800ca9f749aa80383ee7d85ad25e1535a79fe5718limpbizkit } 6900ca9f749aa80383ee7d85ad25e1535a79fe5718limpbizkit } 7000ca9f749aa80383ee7d85ad25e1535a79fe5718limpbizkit } finally { 7100ca9f749aa80383ee7d85ad25e1535a79fe5718limpbizkit this.errors = errorsAnyElement; 72fcbdf999a15039ecad6157c1bf44a835df826a27limpbizkit this.injector = null; 7300ca9f749aa80383ee7d85ad25e1535a79fe5718limpbizkit } 7400ca9f749aa80383ee7d85ad25e1535a79fe5718limpbizkit } 7500ca9f749aa80383ee7d85ad25e1535a79fe5718limpbizkit 7603b81a6b931a06c7697e422b218e3734a7f262cclimpbizkit public Boolean visit(Message message) { 7700ca9f749aa80383ee7d85ad25e1535a79fe5718limpbizkit return false; 7800ca9f749aa80383ee7d85ad25e1535a79fe5718limpbizkit } 7900ca9f749aa80383ee7d85ad25e1535a79fe5718limpbizkit 80bf0d876bb767f45c5cfbed3929e2cf6acd7d061alimpbizkit /*if[AOP]*/ 8103b81a6b931a06c7697e422b218e3734a7f262cclimpbizkit public Boolean visit( 824f6274aa4a306efa727f9b37ad16ea3d331d22f0limpbizkit com.google.inject.spi.InterceptorBinding interceptorBinding) { 8300ca9f749aa80383ee7d85ad25e1535a79fe5718limpbizkit return false; 8400ca9f749aa80383ee7d85ad25e1535a79fe5718limpbizkit } 85bf0d876bb767f45c5cfbed3929e2cf6acd7d061alimpbizkit /*end[AOP]*/ 8600ca9f749aa80383ee7d85ad25e1535a79fe5718limpbizkit 8703b81a6b931a06c7697e422b218e3734a7f262cclimpbizkit public Boolean visit(ScopeBinding scopeBinding) { 8800ca9f749aa80383ee7d85ad25e1535a79fe5718limpbizkit return false; 8900ca9f749aa80383ee7d85ad25e1535a79fe5718limpbizkit } 9000ca9f749aa80383ee7d85ad25e1535a79fe5718limpbizkit 915ae41eb77073b47e75c2dcf3766137f2352fbaf9limpbizkit public Boolean visit(InjectionRequest<?> injectionRequest) { 9200ca9f749aa80383ee7d85ad25e1535a79fe5718limpbizkit return false; 9300ca9f749aa80383ee7d85ad25e1535a79fe5718limpbizkit } 9400ca9f749aa80383ee7d85ad25e1535a79fe5718limpbizkit 9503b81a6b931a06c7697e422b218e3734a7f262cclimpbizkit public Boolean visit(StaticInjectionRequest staticInjectionRequest) { 9600ca9f749aa80383ee7d85ad25e1535a79fe5718limpbizkit return false; 9700ca9f749aa80383ee7d85ad25e1535a79fe5718limpbizkit } 9800ca9f749aa80383ee7d85ad25e1535a79fe5718limpbizkit 9903b81a6b931a06c7697e422b218e3734a7f262cclimpbizkit public Boolean visit(TypeConverterBinding typeConverterBinding) { 10000ca9f749aa80383ee7d85ad25e1535a79fe5718limpbizkit return false; 10100ca9f749aa80383ee7d85ad25e1535a79fe5718limpbizkit } 10200ca9f749aa80383ee7d85ad25e1535a79fe5718limpbizkit 10303b81a6b931a06c7697e422b218e3734a7f262cclimpbizkit public <T> Boolean visit(Binding<T> binding) { 10400ca9f749aa80383ee7d85ad25e1535a79fe5718limpbizkit return false; 10500ca9f749aa80383ee7d85ad25e1535a79fe5718limpbizkit } 10600ca9f749aa80383ee7d85ad25e1535a79fe5718limpbizkit 10703b81a6b931a06c7697e422b218e3734a7f262cclimpbizkit public <T> Boolean visit(ProviderLookup<T> providerLookup) { 10800ca9f749aa80383ee7d85ad25e1535a79fe5718limpbizkit return false; 10900ca9f749aa80383ee7d85ad25e1535a79fe5718limpbizkit } 1105ea4ab2bca518a3ac24dc5c0713326e8699d3fadlimpbizkit 11103b81a6b931a06c7697e422b218e3734a7f262cclimpbizkit public Boolean visit(PrivateElements privateElements) { 11203b81a6b931a06c7697e422b218e3734a7f262cclimpbizkit return false; 11303b81a6b931a06c7697e422b218e3734a7f262cclimpbizkit } 11403b81a6b931a06c7697e422b218e3734a7f262cclimpbizkit 11503b81a6b931a06c7697e422b218e3734a7f262cclimpbizkit public <T> Boolean visit(MembersInjectorLookup<T> lookup) { 11603b81a6b931a06c7697e422b218e3734a7f262cclimpbizkit return false; 11703b81a6b931a06c7697e422b218e3734a7f262cclimpbizkit } 11803b81a6b931a06c7697e422b218e3734a7f262cclimpbizkit 119ee79246d47f0e4a0a4f86543809135620487332dlimpbizkit public Boolean visit(TypeListenerBinding binding) { 1205ea4ab2bca518a3ac24dc5c0713326e8699d3fadlimpbizkit return false; 1215ea4ab2bca518a3ac24dc5c0713326e8699d3fadlimpbizkit } 12200ca9f749aa80383ee7d85ad25e1535a79fe5718limpbizkit} 123