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 198b64d455b982d5841480a0247c15d68de0759c91sberlinimport com.google.inject.spi.DefaultElementVisitor; 2000ca9f749aa80383ee7d85ad25e1535a79fe5718limpbizkitimport com.google.inject.spi.Element; 21b7a02b02d81c830d148355c90bc309bcd66fb592sberlin 2200ca9f749aa80383ee7d85ad25e1535a79fe5718limpbizkitimport java.util.Iterator; 2300ca9f749aa80383ee7d85ad25e1535a79fe5718limpbizkitimport java.util.List; 2400ca9f749aa80383ee7d85ad25e1535a79fe5718limpbizkit 2500ca9f749aa80383ee7d85ad25e1535a79fe5718limpbizkit/** 2600ca9f749aa80383ee7d85ad25e1535a79fe5718limpbizkit * Abstract base class for creating an injector from module elements. 2700ca9f749aa80383ee7d85ad25e1535a79fe5718limpbizkit * 2800ca9f749aa80383ee7d85ad25e1535a79fe5718limpbizkit * <p>Extending classes must return {@code true} from any overridden 2900ca9f749aa80383ee7d85ad25e1535a79fe5718limpbizkit * {@code visit*()} methods, in order for the element processor to remove the 3000ca9f749aa80383ee7d85ad25e1535a79fe5718limpbizkit * handled element. 3100ca9f749aa80383ee7d85ad25e1535a79fe5718limpbizkit * 3200ca9f749aa80383ee7d85ad25e1535a79fe5718limpbizkit * @author jessewilson@google.com (Jesse Wilson) 3300ca9f749aa80383ee7d85ad25e1535a79fe5718limpbizkit */ 348b64d455b982d5841480a0247c15d68de0759c91sberlinabstract class AbstractProcessor extends DefaultElementVisitor<Boolean> { 3500ca9f749aa80383ee7d85ad25e1535a79fe5718limpbizkit 3600ca9f749aa80383ee7d85ad25e1535a79fe5718limpbizkit protected Errors errors; 37fcbdf999a15039ecad6157c1bf44a835df826a27limpbizkit protected InjectorImpl injector; 3800ca9f749aa80383ee7d85ad25e1535a79fe5718limpbizkit 3900ca9f749aa80383ee7d85ad25e1535a79fe5718limpbizkit protected AbstractProcessor(Errors errors) { 4000ca9f749aa80383ee7d85ad25e1535a79fe5718limpbizkit this.errors = errors; 4100ca9f749aa80383ee7d85ad25e1535a79fe5718limpbizkit } 4200ca9f749aa80383ee7d85ad25e1535a79fe5718limpbizkit 43fcbdf999a15039ecad6157c1bf44a835df826a27limpbizkit public void process(Iterable<InjectorShell> isolatedInjectorBuilders) { 44fcbdf999a15039ecad6157c1bf44a835df826a27limpbizkit for (InjectorShell injectorShell : isolatedInjectorBuilders) { 45fcbdf999a15039ecad6157c1bf44a835df826a27limpbizkit process(injectorShell.getInjector(), injectorShell.getElements()); 46fcbdf999a15039ecad6157c1bf44a835df826a27limpbizkit } 47fcbdf999a15039ecad6157c1bf44a835df826a27limpbizkit } 48fcbdf999a15039ecad6157c1bf44a835df826a27limpbizkit 49fcbdf999a15039ecad6157c1bf44a835df826a27limpbizkit public void process(InjectorImpl injector, List<Element> elements) { 5000ca9f749aa80383ee7d85ad25e1535a79fe5718limpbizkit Errors errorsAnyElement = this.errors; 51fcbdf999a15039ecad6157c1bf44a835df826a27limpbizkit this.injector = injector; 5200ca9f749aa80383ee7d85ad25e1535a79fe5718limpbizkit try { 5300ca9f749aa80383ee7d85ad25e1535a79fe5718limpbizkit for (Iterator<Element> i = elements.iterator(); i.hasNext(); ) { 5400ca9f749aa80383ee7d85ad25e1535a79fe5718limpbizkit Element element = i.next(); 5500ca9f749aa80383ee7d85ad25e1535a79fe5718limpbizkit this.errors = errorsAnyElement.withSource(element.getSource()); 5600ca9f749aa80383ee7d85ad25e1535a79fe5718limpbizkit Boolean allDone = element.acceptVisitor(this); 5700ca9f749aa80383ee7d85ad25e1535a79fe5718limpbizkit if (allDone) { 5800ca9f749aa80383ee7d85ad25e1535a79fe5718limpbizkit i.remove(); 5900ca9f749aa80383ee7d85ad25e1535a79fe5718limpbizkit } 6000ca9f749aa80383ee7d85ad25e1535a79fe5718limpbizkit } 6100ca9f749aa80383ee7d85ad25e1535a79fe5718limpbizkit } finally { 6200ca9f749aa80383ee7d85ad25e1535a79fe5718limpbizkit this.errors = errorsAnyElement; 63fcbdf999a15039ecad6157c1bf44a835df826a27limpbizkit this.injector = null; 6400ca9f749aa80383ee7d85ad25e1535a79fe5718limpbizkit } 6500ca9f749aa80383ee7d85ad25e1535a79fe5718limpbizkit } 668b64d455b982d5841480a0247c15d68de0759c91sberlin 678b64d455b982d5841480a0247c15d68de0759c91sberlin @Override 688b64d455b982d5841480a0247c15d68de0759c91sberlin protected Boolean visitOther(Element element) { 695ea4ab2bca518a3ac24dc5c0713326e8699d3fadlimpbizkit return false; 705ea4ab2bca518a3ac24dc5c0713326e8699d3fadlimpbizkit } 7100ca9f749aa80383ee7d85ad25e1535a79fe5718limpbizkit} 72