10b15439f8f0f2d4755587f4096c3ea04cb199d23Andrew Selle/** 20b15439f8f0f2d4755587f4096c3ea04cb199d23Andrew Selle * Copyright (C) 2015 Google Inc. 30b15439f8f0f2d4755587f4096c3ea04cb199d23Andrew Selle * 40b15439f8f0f2d4755587f4096c3ea04cb199d23Andrew Selle * Licensed under the Apache License, Version 2.0 (the "License"); 50b15439f8f0f2d4755587f4096c3ea04cb199d23Andrew Selle * you may not use this file except in compliance with the License. 60b15439f8f0f2d4755587f4096c3ea04cb199d23Andrew Selle * You may obtain a copy of the License at 70b15439f8f0f2d4755587f4096c3ea04cb199d23Andrew Selle * 80b15439f8f0f2d4755587f4096c3ea04cb199d23Andrew Selle * http://www.apache.org/licenses/LICENSE-2.0 90b15439f8f0f2d4755587f4096c3ea04cb199d23Andrew Selle * 100b15439f8f0f2d4755587f4096c3ea04cb199d23Andrew Selle * Unless required by applicable law or agreed to in writing, software 110b15439f8f0f2d4755587f4096c3ea04cb199d23Andrew Selle * distributed under the License is distributed on an "AS IS" BASIS, 120b15439f8f0f2d4755587f4096c3ea04cb199d23Andrew Selle * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 130b15439f8f0f2d4755587f4096c3ea04cb199d23Andrew Selle * See the License for the specific language governing permissions and 140b15439f8f0f2d4755587f4096c3ea04cb199d23Andrew Selle * limitations under the License. 150b15439f8f0f2d4755587f4096c3ea04cb199d23Andrew Selle */ 160b15439f8f0f2d4755587f4096c3ea04cb199d23Andrew Selle 170b15439f8f0f2d4755587f4096c3ea04cb199d23Andrew Sellepackage com.google.inject.spi; 180b15439f8f0f2d4755587f4096c3ea04cb199d23Andrew Selle 190b15439f8f0f2d4755587f4096c3ea04cb199d23Andrew Selleimport static com.google.common.base.Preconditions.checkNotNull; 200b15439f8f0f2d4755587f4096c3ea04cb199d23Andrew Selle 210b15439f8f0f2d4755587f4096c3ea04cb199d23Andrew Selleimport com.google.inject.Binder; 220b15439f8f0f2d4755587f4096c3ea04cb199d23Andrew Selleimport com.google.inject.internal.Errors; 230b15439f8f0f2d4755587f4096c3ea04cb199d23Andrew Selle 240b15439f8f0f2d4755587f4096c3ea04cb199d23Andrew Selle/** 250b15439f8f0f2d4755587f4096c3ea04cb199d23Andrew Selle * Represents a call to {@link Binder#scanModulesForAnnotatedMethods} in a module. 260b15439f8f0f2d4755587f4096c3ea04cb199d23Andrew Selle * 270b15439f8f0f2d4755587f4096c3ea04cb199d23Andrew Selle * @author sameb@google.com (Sam Berlin) 280b15439f8f0f2d4755587f4096c3ea04cb199d23Andrew Selle * @since 4.0 290b15439f8f0f2d4755587f4096c3ea04cb199d23Andrew Selle */ 300b15439f8f0f2d4755587f4096c3ea04cb199d23Andrew Sellepublic final class ModuleAnnotatedMethodScannerBinding implements Element { 310b15439f8f0f2d4755587f4096c3ea04cb199d23Andrew Selle private final Object source; 320b15439f8f0f2d4755587f4096c3ea04cb199d23Andrew Selle private final ModuleAnnotatedMethodScanner scanner; 330b15439f8f0f2d4755587f4096c3ea04cb199d23Andrew Selle 340b15439f8f0f2d4755587f4096c3ea04cb199d23Andrew Selle public ModuleAnnotatedMethodScannerBinding(Object source, ModuleAnnotatedMethodScanner scanner) { 350b15439f8f0f2d4755587f4096c3ea04cb199d23Andrew Selle this.source = checkNotNull(source, "source"); 360b15439f8f0f2d4755587f4096c3ea04cb199d23Andrew Selle this.scanner = checkNotNull(scanner, "scanner"); 370b15439f8f0f2d4755587f4096c3ea04cb199d23Andrew Selle } 380b15439f8f0f2d4755587f4096c3ea04cb199d23Andrew Selle 390b15439f8f0f2d4755587f4096c3ea04cb199d23Andrew Selle public Object getSource() { 400b15439f8f0f2d4755587f4096c3ea04cb199d23Andrew Selle return source; 410b15439f8f0f2d4755587f4096c3ea04cb199d23Andrew Selle } 420b15439f8f0f2d4755587f4096c3ea04cb199d23Andrew Selle 430b15439f8f0f2d4755587f4096c3ea04cb199d23Andrew Selle public ModuleAnnotatedMethodScanner getScanner() { 440b15439f8f0f2d4755587f4096c3ea04cb199d23Andrew Selle return scanner; 450b15439f8f0f2d4755587f4096c3ea04cb199d23Andrew Selle } 460b15439f8f0f2d4755587f4096c3ea04cb199d23Andrew Selle 470b15439f8f0f2d4755587f4096c3ea04cb199d23Andrew Selle public <T> T acceptVisitor(ElementVisitor<T> visitor) { 480b15439f8f0f2d4755587f4096c3ea04cb199d23Andrew Selle return visitor.visit(this); 490b15439f8f0f2d4755587f4096c3ea04cb199d23Andrew Selle } 500b15439f8f0f2d4755587f4096c3ea04cb199d23Andrew Selle 510b15439f8f0f2d4755587f4096c3ea04cb199d23Andrew Selle public void applyTo(Binder binder) { 520b15439f8f0f2d4755587f4096c3ea04cb199d23Andrew Selle binder.withSource(getSource()).scanModulesForAnnotatedMethods(scanner); 530b15439f8f0f2d4755587f4096c3ea04cb199d23Andrew Selle } 540b15439f8f0f2d4755587f4096c3ea04cb199d23Andrew Selle 550b15439f8f0f2d4755587f4096c3ea04cb199d23Andrew Selle @Override public String toString() { 560b15439f8f0f2d4755587f4096c3ea04cb199d23Andrew Selle return scanner + " which scans for " + scanner.annotationClasses() 570b15439f8f0f2d4755587f4096c3ea04cb199d23Andrew Selle + " (bound at " + Errors.convert(source) + ")"; 580b15439f8f0f2d4755587f4096c3ea04cb199d23Andrew Selle } 590b15439f8f0f2d4755587f4096c3ea04cb199d23Andrew Selle} 600b15439f8f0f2d4755587f4096c3ea04cb199d23Andrew Selle