| /******************************************************************************* |
| * Copyright (c) 2010-present Sonatype, Inc. |
| * All rights reserved. This program and the accompanying materials |
| * are made available under the terms of the Eclipse Public License v1.0 |
| * which accompanies this distribution, and is available at |
| * http://www.eclipse.org/legal/epl-v10.html |
| * |
| * Contributors: |
| * Stuart McCulloch (Sonatype, Inc.) - initial API and implementation |
| *******************************************************************************/ |
| package org.eclipse.sisu.inject; |
| |
| import java.lang.annotation.Annotation; |
| |
| import org.eclipse.sisu.Description; |
| import org.eclipse.sisu.Hidden; |
| import org.eclipse.sisu.Priority; |
| |
| import com.google.inject.Binding; |
| |
| /** |
| * Utility methods for dealing with annotated sources. |
| */ |
| public final class Sources |
| { |
| // ---------------------------------------------------------------------- |
| // Constructors |
| // ---------------------------------------------------------------------- |
| |
| private Sources() |
| { |
| // static utility class, not allowed to create instances |
| } |
| |
| // ---------------------------------------------------------------------- |
| // Utility methods |
| // ---------------------------------------------------------------------- |
| |
| /** |
| * Hides a new binding source from the bean locator. |
| * |
| * @return Hidden source |
| */ |
| public static Hidden hide() |
| { |
| return hide( null ); |
| } |
| |
| /** |
| * Hides the given binding source from the bean locator. |
| * |
| * @param source The source |
| * @return Hidden source |
| */ |
| public static Hidden hide( final Object source ) |
| { |
| return new HiddenSource( source ); |
| } |
| |
| /** |
| * Describes a new binding source with the given description. |
| * |
| * @param value The description |
| * @return Described source |
| */ |
| public static Description describe( final String value ) |
| { |
| return describe( null, value ); |
| } |
| |
| /** |
| * Describes the given binding source with the given description. |
| * |
| * @param source The source |
| * @param value The description |
| * @return Described source |
| */ |
| public static Description describe( final Object source, final String value ) |
| { |
| return new DescriptionSource( source, value ); |
| } |
| |
| /** |
| * Prioritizes a new binding source with the given priority. |
| * |
| * @param value The priority |
| * @return Prioritized source |
| */ |
| public static Priority prioritize( final int value ) |
| { |
| return prioritize( null, value ); |
| } |
| |
| /** |
| * Prioritizes the given binding source with the given priority. |
| * |
| * @param source The source |
| * @param value The priority |
| * @return Prioritized source |
| */ |
| public static Priority prioritize( final Object source, final int value ) |
| { |
| return new PrioritySource( source, value ); |
| } |
| |
| /** |
| * Searches the binding's source and implementation for an annotation of the given type. |
| * |
| * @param binding The binding |
| * @param annotationType The annotation type |
| * @return Annotation instance; {@code null} if it doesn't exist |
| */ |
| public static <T extends Annotation> T getAnnotation( final Binding<?> binding, final Class<T> annotationType ) |
| { |
| T annotation = null; |
| final Object source = Guice4.getDeclaringSource( binding ); |
| if ( source instanceof AnnotatedSource ) |
| { |
| annotation = ( (AnnotatedSource) source ).getAnnotation( binding, annotationType ); |
| } |
| if ( null == annotation ) |
| { |
| annotation = Implementations.getAnnotation( binding, annotationType ); |
| } |
| return annotation; |
| } |
| } |