@Nonnull public ConstructorCallInfo findConstructorCallInfoForField( @Nonnull String simpleName, @Nonnull TypeMirror type) throws IllegalArgumentException { ConstructorDeclaration constructorDeclaration = TypeUtils.findBestConstructor(classDeclaration); int index = 0; for (ParameterDeclaration parameterDeclaration : constructorDeclaration.getParameters()) { if (parameterDeclaration.getSimpleName().equals(simpleName)) { // Found a fitting type if (TypeUtils.mightBeConstructorCallFor(parameterDeclaration.getType(), type)) { return new ConstructorCallInfo(constructorDeclaration, index, parameterDeclaration); } else { throw new IllegalArgumentException( "Type mismatch for <" + simpleName + ">. Was <" + parameterDeclaration.getType() + "> but expected <" + type + ">"); } } index++; } throw new IllegalArgumentException("No parameter found that fits <" + simpleName + ">"); }