/***************************************************************************
* Copyright 2009-2012 by Christian Ihle *
* kontakt@usikkert.net *
* *
* This file is part of KouInject. *
* *
* KouInject is free software; you can redistribute it and/or modify *
* it under the terms of the GNU Lesser General Public License as *
* published by the Free Software Foundation, either version 3 of *
* the License, or (at your option) any later version. *
* *
* KouInject is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU *
* Lesser General Public License for more details. *
* *
* You should have received a copy of the GNU Lesser General Public *
* License along with KouInject. *
* If not, see <http://www.gnu.org/licenses/>. *
***************************************************************************/
package net.usikkert.kouinject;
import static org.junit.Assert.*;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.Collection;
import java.util.List;
import javax.inject.Inject;
import javax.inject.Named;
import javax.inject.Provider;
import net.usikkert.kouinject.beandata.BeanData;
import net.usikkert.kouinject.beandata.BeanKey;
import net.usikkert.kouinject.beandata.ConstructorData;
import net.usikkert.kouinject.beandata.FieldData;
import net.usikkert.kouinject.beandata.MethodData;
import net.usikkert.kouinject.testbeans.notscanned.collection.CollectionInjectionWithoutTypeArgument;
import net.usikkert.kouinject.testbeans.notscanned.collectionprovider.CollectionProviderInjectionWithoutTypeArgument;
import net.usikkert.kouinject.testbeans.notscanned.notloaded.NamedQualifierUsedWithoutNameBean;
import net.usikkert.kouinject.testbeans.notscanned.notloaded.NoMatchingConstructorBean;
import net.usikkert.kouinject.testbeans.notscanned.notloaded.TooManyMatchingConstructorsBean;
import net.usikkert.kouinject.testbeans.notscanned.notloaded.TooManyQualifiersBean;
import net.usikkert.kouinject.testbeans.notscanned.provider.ProviderInjectionWithoutTypeArgument;
import net.usikkert.kouinject.testbeans.scanned.CarBean;
import net.usikkert.kouinject.testbeans.scanned.ConstructorBean;
import net.usikkert.kouinject.testbeans.scanned.EverythingBean;
import net.usikkert.kouinject.testbeans.scanned.FieldBean;
import net.usikkert.kouinject.testbeans.scanned.FinalBean;
import net.usikkert.kouinject.testbeans.scanned.HelloBean;
import net.usikkert.kouinject.testbeans.scanned.ProviderBean;
import net.usikkert.kouinject.testbeans.scanned.SetterBean;
import net.usikkert.kouinject.testbeans.scanned.StaticBean;
import net.usikkert.kouinject.testbeans.scanned.coffee.CoffeeBean;
import net.usikkert.kouinject.testbeans.scanned.coffee.JavaBean;
import net.usikkert.kouinject.testbeans.scanned.collection.Food;
import net.usikkert.kouinject.testbeans.scanned.collection.HungryBean;
import net.usikkert.kouinject.testbeans.scanned.collection.HungryQualifierBean;
import net.usikkert.kouinject.testbeans.scanned.collectionprovider.ProvidedHungryBean;
import net.usikkert.kouinject.testbeans.scanned.collectionprovider.ProvidedHungryQualifierBean;
import net.usikkert.kouinject.testbeans.scanned.generics.typevariable.Fanta;
import net.usikkert.kouinject.testbeans.scanned.generics.typevariable.FantaBottle;
import net.usikkert.kouinject.testbeans.scanned.hierarchy.ChildBean;
import net.usikkert.kouinject.testbeans.scanned.hierarchy.abstractbean.AbstractBean;
import net.usikkert.kouinject.testbeans.scanned.hierarchy.interfacebean.InterfaceBean;
import net.usikkert.kouinject.testbeans.scanned.hierarchy.overriding2.pets.CatBean;
import net.usikkert.kouinject.testbeans.scanned.notloaded.QualifierBean;
import net.usikkert.kouinject.testbeans.scanned.qualifier.Blue;
import net.usikkert.kouinject.testbeans.scanned.scope.SingletonBean;
import org.junit.Before;
import org.junit.Test;
/**
* Test of {@link AnnotationBasedBeanDataHandler}.
*
* @author Christian Ihle
*/
public class AnnotationBasedBeanDataHandlerTest {
private AnnotationBasedBeanDataHandler handler;
@Before
public void createHandler() {
handler = new AnnotationBasedBeanDataHandler();
}
@Test
public void getBeanDataShouldSetBeanKeyWithoutQualifier() {
final BeanKey beanKey = new BeanKey(FieldBean.class);
final BeanData beanData = handler.getBeanData(beanKey, false);
assertSame(beanKey, beanData.getBeanKey());
assertEquals(FieldBean.class, beanKey.getBeanClass());
assertNull(beanKey.getQualifier());
}
@Test
public void getBeanDataShouldSetBeanKeyWithQualifier() {
final BeanKey beanKey = new BeanKey(SetterBean.class, "setter");
final BeanData beanData = handler.getBeanData(beanKey, false);
assertSame(beanKey, beanData.getBeanKey());
assertEquals(SetterBean.class, beanKey.getBeanClass());
assertEquals("setter", beanKey.getQualifier());
}
@Test
public void getBeanDataShouldDetectFieldsAndDependenciesForInjection() {
final BeanData beanData = handler.getBeanData(new BeanKey(FieldBean.class), false);
final List<BeanKey> dependencies = beanData.getDependencies();
assertEquals(3, dependencies.size());
assertNoQualifiers(dependencies);
assertTrue(containsDependency(dependencies, HelloBean.class));
assertTrue(containsDependency(dependencies, AbstractBean.class));
assertTrue(containsDependency(dependencies, InterfaceBean.class));
final List<FieldData> fields = beanData.getFields();
assertEquals(3, fields.size());
for (final FieldData field : fields) {
assertTrue(field.getField().isAnnotationPresent(Inject.class));
}
assertTrue(containsField(fields, HelloBean.class));
assertTrue(containsField(fields, AbstractBean.class));
assertTrue(containsField(fields, InterfaceBean.class));
}
@Test
public void getBeanDataShouldDetectInheritedFieldsAndDependenciesForInjection() {
final BeanData beanData = handler.getBeanData(new BeanKey(ChildBean.class), false);
final List<BeanKey> dependencies = beanData.getDependencies();
assertEquals(3, dependencies.size());
assertNoQualifiers(dependencies);
assertTrue(containsDependency(dependencies, FieldBean.class));
assertTrue(containsDependency(dependencies, HelloBean.class));
assertTrue(containsDependency(dependencies, CoffeeBean.class));
final List<FieldData> fields = beanData.getFields();
assertEquals(3, fields.size());
for (final FieldData field : fields) {
assertTrue(field.getField().isAnnotationPresent(Inject.class));
}
assertTrue(containsField(fields, FieldBean.class));
assertTrue(containsField(fields, HelloBean.class));
assertTrue(containsField(fields, CoffeeBean.class));
}
@Test
public void getBeanDataShouldDetectMethodsAndDependenciesForInjection() {
final BeanData beanData = handler.getBeanData(new BeanKey(JavaBean.class), false);
final List<BeanKey> dependencies = beanData.getDependencies();
assertEquals(2, dependencies.size());
assertNoQualifiers(dependencies);
assertTrue(containsDependency(dependencies, HelloBean.class));
assertTrue(containsDependency(dependencies, FieldBean.class));
final List<MethodData> methods = beanData.getMethods();
assertEquals(1, methods.size());
for (final MethodData method : methods) {
assertTrue(method.getMethod().isAnnotationPresent(Inject.class));
assertTrue(containsMethodParameter(method, HelloBean.class));
assertTrue(containsMethodParameter(method, FieldBean.class));
}
}
@Test
public void getBeanDataShouldDetectInheritedAndOverriddenMethodsAndDependenciesForInjection() {
final BeanData beanData = handler.getBeanData(new BeanKey(CatBean.class), false);
final List<BeanKey> dependencies = beanData.getDependencies();
assertEquals(20, dependencies.size());
assertNoQualifiers(dependencies);
final List<MethodData> methods = beanData.getMethods();
assertEquals(12, methods.size());
// all beans have private methods, none overridden
assertEquals(4, containsMethod(methods, "setHelloBean", HelloBean.class));
// default method overridden in 2 beans in different packages
assertEquals(2, containsMethod(methods, "setJavaBean", JavaBean.class));
// protected method overridden in last bean
assertEquals(1, containsMethod(methods, "setCoffeeBean", CoffeeBean.class));
// public method overridden in last bean
assertEquals(1, containsMethod(methods, "setCarBean", CarBean.class));
// inherited public methods
assertEquals(1, containsMethod(methods, "setSetterBeanInOrganismBean", SetterBean.class));
assertEquals(1, containsMethod(methods, "setSetterBeanInAnimalBean", SetterBean.class));
assertEquals(1, containsMethod(methods, "setSetterBeanInPetBean", SetterBean.class));
assertEquals(1, containsMethod(methods, "setSetterBeanInCatBean", SetterBean.class));
final List<FieldData> fields = beanData.getFields();
assertEquals(8, fields.size());
// inherited fields
assertEquals(1, containsField(fields, "fieldBean1InOrganismBean", FieldBean.class));
assertEquals(1, containsField(fields, "fieldBean1InAnimalBean", FieldBean.class));
assertEquals(1, containsField(fields, "fieldBean1InPetBean", FieldBean.class));
assertEquals(1, containsField(fields, "fieldBean1InCatBean", FieldBean.class));
assertEquals(1, containsField(fields, "fieldBean2InOrganismBean", FieldBean.class));
assertEquals(1, containsField(fields, "fieldBean2InAnimalBean", FieldBean.class));
assertEquals(1, containsField(fields, "fieldBean2InPetBean", FieldBean.class));
assertEquals(1, containsField(fields, "fieldBean2InCatBean", FieldBean.class));
}
@Test
public void getBeanDataShouldDetectCorrectConstructorAndDependenciesForInjection() {
final BeanData beanData = handler.getBeanData(new BeanKey(ConstructorBean.class), false);
final List<BeanKey> dependencies = beanData.getDependencies();
assertEquals(2, dependencies.size());
assertNoQualifiers(dependencies);
assertTrue(containsDependency(dependencies, HelloBean.class));
assertTrue(containsDependency(dependencies, SetterBean.class));
final ConstructorData constructor = beanData.getConstructor();
assertTrue(constructor.getConstructor().isAnnotationPresent(Inject.class));
assertTrue(containsConstructorParameter(constructor, HelloBean.class));
assertTrue(containsConstructorParameter(constructor, SetterBean.class));
}
@Test
public void getBeanDataShouldDetectConstructorAndFieldsAndMethodsAtTheSameTime() {
final BeanData beanData = handler.getBeanData(new BeanKey(EverythingBean.class), false);
final List<BeanKey> dependencies = beanData.getDependencies();
assertEquals(8, dependencies.size());
assertNoQualifiers(dependencies);
for (final BeanKey dependency : dependencies) {
assertFalse(dependency.isProvider());
}
final ConstructorData constructor = beanData.getConstructor();
assertTrue(constructor.getConstructor().isAnnotationPresent(Inject.class));
assertEquals(5, constructor.getConstructor().getParameterTypes().length);
final List<FieldData> fields = beanData.getFields();
assertEquals(1, fields.size());
for (final FieldData field : fields) {
assertTrue(field.getField().isAnnotationPresent(Inject.class));
}
final List<MethodData> methods = beanData.getMethods();
assertEquals(2, methods.size());
for (final MethodData method : methods) {
assertTrue(method.getMethod().isAnnotationPresent(Inject.class));
}
}
@Test
public void getBeanDataShouldDetectQualifiersInConstructors() {
final BeanData beanData = handler.getBeanData(new BeanKey(QualifierBean.class), false);
final ConstructorData constructor = beanData.getConstructor();
assertEquals(2, constructor.getDependencies().size());
final BeanKey constructorBean = constructor.getDependencies().get(0);
assertEquals("Green", constructorBean.getQualifier());
assertFalse(constructorBean.isProvider());
final BeanKey constructorBeanProvider = constructor.getDependencies().get(1);
assertEquals("orange", constructorBeanProvider.getQualifier());
assertTrue(constructorBeanProvider.isProvider());
}
@Test
public void getBeanDataShouldDetectQualifiersInFields() {
final BeanData beanData = handler.getBeanData(new BeanKey(QualifierBean.class), false);
final List<FieldData> fields = beanData.getFields();
assertEquals(2, fields.size());
final FieldData field = fields.get(0);
assertTrue(field.getField().isAnnotationPresent(Named.class));
final BeanKey fieldBean = field.getDependency();
assertEquals("red", fieldBean.getQualifier());
assertFalse(fieldBean.isProvider());
final FieldData providerField = fields.get(1);
assertTrue(providerField.getField().isAnnotationPresent(Blue.class));
final BeanKey fieldBeanProvider = providerField.getDependency();
assertEquals("Blue", fieldBeanProvider.getQualifier());
assertTrue(fieldBeanProvider.isProvider());
}
@Test
public void getBeanDataShouldDetectQualifiersInMethods() {
final BeanData beanData = handler.getBeanData(new BeanKey(QualifierBean.class), false);
final List<MethodData> methods = beanData.getMethods();
assertEquals(1, methods.size());
final MethodData method = methods.get(0);
final BeanKey setterB = method.getDependencies().get(0);
assertEquals("Yellow", setterB.getQualifier());
assertFalse(setterB.isProvider());
final BeanKey setterBProvider = method.getDependencies().get(1);
assertEquals("Blue", setterBProvider.getQualifier());
assertTrue(setterBProvider.isProvider());
}
@Test
public void getBeanDataShouldDetectDependenciesInProviders() {
final BeanData beanData = handler.getBeanData(new BeanKey(ProviderBean.class), false);
final List<BeanKey> dependencies = beanData.getDependencies();
assertEquals(3, dependencies.size());
assertNoQualifiers(dependencies);
for (final BeanKey dependency : dependencies) {
assertTrue(dependency.isProvider());
}
assertTrue(containsDependency(dependencies, ConstructorBean.class));
assertTrue(containsDependency(dependencies, FieldBean.class));
assertTrue(containsDependency(dependencies, SetterBean.class));
assertTrue(containsConstructorParameter(beanData.getConstructor(), Provider.class));
assertTrue(containsField(beanData.getFields(), Provider.class));
assertTrue(containsMethodParameter(beanData.getMethods().get(0), Provider.class));
}
@Test
public void getBeanDataShouldDetectDependenciesInCollections() {
final BeanData beanData = handler.getBeanData(new BeanKey(HungryBean.class), false);
final List<BeanKey> dependencies = beanData.getDependencies();
assertEquals(3, dependencies.size());
assertNoQualifiers(dependencies);
for (final BeanKey dependency : dependencies) {
assertTrue(dependency.isCollection());
assertTrue(dependency.getBeanClass().equals(Food.class));
}
assertTrue(containsConstructorParameter(beanData.getConstructor(), Collection.class));
assertTrue(containsField(beanData.getFields(), Collection.class));
assertTrue(containsMethodParameter(beanData.getMethods().get(0), Collection.class));
}
@Test
public void getBeanDataShouldDetectQualifiersForCollections() {
final BeanData beanData = handler.getBeanData(new BeanKey(HungryQualifierBean.class), false);
final List<BeanKey> dependencies = beanData.getDependencies();
assertEquals(3, dependencies.size());
for (final BeanKey dependency : dependencies) {
assertTrue(dependency.isCollection());
assertTrue(dependency.getBeanClass().equals(Food.class));
}
assertTrue(containsConstructorParameter(beanData.getConstructor(), Collection.class));
assertTrue(containsField(beanData.getFields(), Collection.class));
assertTrue(containsMethodParameter(beanData.getMethods().get(0), Collection.class));
final FieldData fastFoodField = beanData.getFields().get(0);
assertTrue(fastFoodField.getField().isAnnotationPresent(Named.class));
final BeanKey fastFoodDependency = fastFoodField.getDependency();
assertEquals("fastFood", fastFoodDependency.getQualifier());
assertTrue(fastFoodDependency.isCollection());
final MethodData roundFoodMethod = beanData.getMethods().get(0);
final BeanKey roundFoodDependency = roundFoodMethod.getDependencies().get(0);
assertEquals("roundFood", roundFoodDependency.getQualifier());
assertTrue(roundFoodDependency.isCollection());
final ConstructorData allFoodConstructor = beanData.getConstructor();
final BeanKey allFoodDependency = allFoodConstructor.getDependencies().get(0);
assertEquals("Any", allFoodDependency.getQualifier());
assertTrue(allFoodDependency.isCollection());
}
@Test
public void getBeanDataShouldDetectDependenciesInCollectionProviders() {
final BeanData beanData = handler.getBeanData(new BeanKey(ProvidedHungryBean.class), false);
final List<BeanKey> dependencies = beanData.getDependencies();
assertEquals(3, dependencies.size());
assertNoQualifiers(dependencies);
for (final BeanKey dependency : dependencies) {
assertTrue(dependency.isCollectionProvider());
assertTrue(dependency.getBeanClass().equals(Food.class));
}
assertTrue(containsConstructorParameter(beanData.getConstructor(), CollectionProvider.class));
assertTrue(containsField(beanData.getFields(), CollectionProvider.class));
assertTrue(containsMethodParameter(beanData.getMethods().get(0), CollectionProvider.class));
}
@Test
public void getBeanDataShouldDetectQualifiersForCollectionProviders() {
final BeanData beanData = handler.getBeanData(new BeanKey(ProvidedHungryQualifierBean.class), false);
final List<BeanKey> dependencies = beanData.getDependencies();
assertEquals(3, dependencies.size());
for (final BeanKey dependency : dependencies) {
assertTrue(dependency.isCollectionProvider());
assertTrue(dependency.getBeanClass().equals(Food.class));
}
assertTrue(containsConstructorParameter(beanData.getConstructor(), CollectionProvider.class));
assertTrue(containsField(beanData.getFields(), CollectionProvider.class));
assertTrue(containsMethodParameter(beanData.getMethods().get(0), CollectionProvider.class));
final FieldData fastFoodField = beanData.getFields().get(0);
assertTrue(fastFoodField.getField().isAnnotationPresent(Named.class));
final BeanKey fastFoodDependency = fastFoodField.getDependency();
assertEquals("fastFood", fastFoodDependency.getQualifier());
assertTrue(fastFoodDependency.isCollectionProvider());
final MethodData roundFoodMethod = beanData.getMethods().get(0);
final BeanKey roundFoodDependency = roundFoodMethod.getDependencies().get(0);
assertEquals("roundFood", roundFoodDependency.getQualifier());
assertTrue(roundFoodDependency.isCollectionProvider());
final ConstructorData allFoodConstructor = beanData.getConstructor();
final BeanKey allFoodDependency = allFoodConstructor.getDependencies().get(0);
assertEquals("Any", allFoodDependency.getQualifier());
assertTrue(allFoodDependency.isCollectionProvider());
}
@Test(expected = IllegalArgumentException.class)
public void getBeanDataShouldFailIfCollectionProviderIsUsedWithoutTypeArgument() {
handler.getBeanData(new BeanKey(CollectionProviderInjectionWithoutTypeArgument.class), false);
}
@Test(expected = IllegalArgumentException.class)
public void getBeanDataShouldFailIfCollectionIsUsedWithoutTypeArgument() {
handler.getBeanData(new BeanKey(CollectionInjectionWithoutTypeArgument.class), false);
}
@Test(expected = IllegalArgumentException.class)
public void getBeanDataShouldFailIfProviderIsUsedWithoutTypeArgument() {
handler.getBeanData(new BeanKey(ProviderInjectionWithoutTypeArgument.class), false);
}
@Test
public void getBeanDataShouldSupportIgnoringConstructor() {
final BeanData beanData = handler.getBeanData(new BeanKey(ConstructorBean.class), true);
final List<BeanKey> dependencies = beanData.getDependencies();
assertEquals(0, dependencies.size());
final ConstructorData constructor = beanData.getConstructor();
assertNull(constructor);
}
@Test
public void getBeanDataShouldHandleClassesWithoutAnnotations() {
final BeanData beanData = handler.getBeanData(new BeanKey(ClassPathScanner.class), false);
final List<BeanKey> dependencies = beanData.getDependencies();
assertEquals(0, dependencies.size());
final ConstructorData constructor = beanData.getConstructor();
assertNotNull(constructor);
final List<FieldData> fields = beanData.getFields();
assertEquals(0, fields.size());
final List<MethodData> methods = beanData.getMethods();
assertEquals(0, methods.size());
}
@Test
public void getBeanDataShouldIgnoreStatics() {
final BeanData beanData = handler.getBeanData(new BeanKey(StaticBean.class), false);
final List<BeanKey> dependencies = beanData.getDependencies();
assertEquals(0, dependencies.size());
}
@Test
public void getBeanDataShouldIgnoreFinalFields() {
final BeanData beanData = handler.getBeanData(new BeanKey(FinalBean.class), false);
final List<BeanKey> dependencies = beanData.getDependencies();
assertEquals(0, dependencies.size());
}
@Test
public void getBeanDataShouldDetectSingletons() {
final BeanData beanData = handler.getBeanData(new BeanKey(SingletonBean.class), false);
assertTrue(beanData.isSingleton());
}
@Test
public void getBeanDataShouldDetectNonSingletons() {
final BeanData beanData = handler.getBeanData(new BeanKey(CarBean.class), false);
assertFalse(beanData.isSingleton());
}
@Test
public void getBeanDataShouldReplaceTypeVariablesInFieldsForRegularAndProviderAndCollectionAndCollectionProvider() {
final BeanData beanData = handler.getBeanData(new BeanKey(FantaBottle.class), true);
assertNotNull(beanData);
final List<FieldData> fields = beanData.getFields();
assertEquals(4, fields.size());
final FieldData fantaField = fields.get(0);
assertTrue(containsDependency(fantaField.getDependencies(), Fanta.class));
assertTrue(fantaField.getDependency().isBeanForCreation());
final FieldData fantaProviderField = fields.get(1);
assertTrue(containsDependency(fantaProviderField.getDependencies(), Fanta.class));
assertTrue(fantaProviderField.getDependency().isProvider());
final FieldData fantaCollectionField = fields.get(2);
assertTrue(containsDependency(fantaCollectionField.getDependencies(), Fanta.class));
assertTrue(fantaCollectionField.getDependency().isCollection());
final FieldData fantaCollectionProviderField = fields.get(3);
assertTrue(containsDependency(fantaCollectionProviderField.getDependencies(), Fanta.class));
assertTrue(fantaCollectionProviderField.getDependency().isCollectionProvider());
}
@Test
public void getBeanDataShouldReplaceTypeVariablesInMethods() {
final BeanData beanData = handler.getBeanData(new BeanKey(FantaBottle.class), true);
assertNotNull(beanData);
final List<MethodData> methods = beanData.getMethods();
assertEquals(1, methods.size());
final MethodData methodData = methods.get(0);
assertTrue(containsDependency(methodData.getDependencies(), Fanta.class));
}
@Test(expected = RuntimeException.class)
public void getBeanDataShouldAbortIfNoMatchingConstructorIsFound() {
handler.getBeanData(new BeanKey(NoMatchingConstructorBean.class), false);
}
@Test(expected = UnsupportedOperationException.class)
public void getBeanDataShouldAbortIfTooManyMatchingConstructorsAreFound() {
handler.getBeanData(new BeanKey(TooManyMatchingConstructorsBean.class), false);
}
@Test(expected = UnsupportedOperationException.class)
public void getBeanDataShouldAbortIfTooManyQualifiersAreUsedOnTheSameField() {
handler.getBeanData(new BeanKey(TooManyQualifiersBean.class), false);
}
@Test(expected = UnsupportedOperationException.class)
public void getBeanDataShouldAbortIfNamedQualifierIsUsedWithoutName() {
handler.getBeanData(new BeanKey(NamedQualifierUsedWithoutNameBean.class), false);
}
private void assertNoQualifiers(final List<BeanKey> dependencies) {
for (final BeanKey dependency : dependencies) {
assertNull(dependency.getQualifier());
}
}
private boolean containsConstructorParameter(final ConstructorData constructor, final Class<?> beanClass) {
for (final Class<?> parameter : constructor.getConstructor().getParameterTypes()) {
if (parameter.equals(beanClass)) {
return true;
}
}
return false;
}
private boolean containsMethodParameter(final MethodData method, final Class<?> beanClass) {
for (final Class<?> parameter : method.getMethod().getParameterTypes()) {
if (parameter.equals(beanClass)) {
return true;
}
}
return false;
}
private boolean containsDependency(final List<BeanKey> dependencies, final Class<?> beanClass) {
for (final BeanKey dependency : dependencies) {
if (dependency.getBeanClass().equals(beanClass)) {
return true;
}
}
return false;
}
private boolean containsField(final List<FieldData> fields, final Class<?> beanClass) {
for (final FieldData field : fields) {
if (field.getField().getType().equals(beanClass)) {
return true;
}
}
return false;
}
private int containsField(final List<FieldData> fields, final String fieldName, final Class<?> beanClass) {
int counter = 0;
for (final FieldData fieldData : fields) {
final Field field = fieldData.getField();
if (field.getName().equals(fieldName) && field.getType().equals(beanClass)) {
counter++;
}
}
return counter;
}
private int containsMethod(final List<MethodData> methods, final String methodName, final Class<?> beanClass) {
int counter = 0;
for (final MethodData methodData : methods) {
final Method method = methodData.getMethod();
if (method.getName().equals(methodName) && method.getParameterTypes().length == 1) {
if (method.getParameterTypes()[0].equals(beanClass)) {
counter++;
}
}
}
return counter;
}
}