code: private <A extends Annotation> void findStringDynamicStatement(SQLiteDaoDefinition parent, Class<A> annotationClazz, List<Class<? extends Annotation>> unsupportedQueryType,
  			OnFoundDynamicParameter listener) {
  
  		int counter = 0;
  		for (VariableElement p : element.getParameters()) {
  			A annotation = p.getAnnotation(annotationClazz);
  			if (annotation != null) {
  				// Dynamic queries can not be used in Inser SQL.
  				for (Class<? extends Annotation> item : unsupportedQueryType) {
  					AssertKripton.assertTrueOrInvalidMethodSignException(element.getAnnotation(item) == null, this, "in this method is not allowed to mark parameters with @%s annotation.",
  							annotationClazz.getSimpleName());
  				}
  
  				AssertKripton.assertTrueOrInvalidMethodSignException(TypeUtility.isString(TypeUtility.typeName(p)), this, "only String parameters can be marked with @%s annotation.",
  						annotationClazz.getSimpleName());
  
  				listener.onFoundParameter(p.getSimpleName().toString());
  				counter++;
  			}
  		}
  		AssertKripton.assertTrueOrInvalidMethodSignException(counter < 2, this, "there are %s parameters marked with @%s. Only one is allowed.", counter, annotationClazz.getSimpleName());
  	}
docs: Look for a method parameter which is annotated with an annotationClass
  annotation. When it is found, a client action is required through
  listener.
  
  @param <A>
  the generic type
  @param parent
  the parent
  @param annotationClazz
  the annotation clazz
  @param unsupportedQueryType
  the unsupported query type
  @param listener
  the listener