docs: @SuppressWarnings("checkstyle:all")
  	protected void generateIDocumentationFormatter() {
  		final TypeReference formatter = getIDocumentationFormatter();
  		StringConcatenationClient content = new StringConcatenationClient() {
  			@Override
  			protected void appendTo(TargetStringConcatenation it) {
  				it.append("/** Format a documentation string."); //$NON-NLS-1$
  				it.newLine();
  				it.append(" */"); //$NON-NLS-1$
  				it.newLine();
  				it.append("public interface "); //$NON-NLS-1$
  				it.append(formatter.getSimpleName());
  				it.append(" {"); //$NON-NLS-1$
  				it.newLineIfNotEmpty();
  				it.newLine();
  				it.append("\t/** Replies the characters that must be used as prefix of each line in a multiline comment."); //$NON-NLS-1$
  				it.newLine();
  				it.append("\t * @return the prefix."); //$NON-NLS-1$
  				it.newLine();
  				it.append("\t */"); //$NON-NLS-1$
  				it.newLine();
  				it.append("\t@"); //$NON-NLS-1$
  				it.append(Pure.class);
  				it.newLine();
  				it.append("\tString getMultilineCommentLinePrefix();"); //$NON-NLS-1$
  				it.newLineIfNotEmpty();
  				it.newLine();
  				it.append("\t/** Replies the characters that must be used to start a comment."); //$NON-NLS-1$
  				it.newLine();
  				it.append("\t * @return the symbols."); //$NON-NLS-1$
  				it.newLine();
  				it.append("\t */"); //$NON-NLS-1$
  				it.newLine();
  				it.append("\t@"); //$NON-NLS-1$
  				it.append(Pure.class);
  				it.newLine();
  				it.append("\tString getMultilineCommentStartSymbols();"); //$NON-NLS-1$
  				it.newLineIfNotEmpty();
  				it.newLine();
  				it.append("\t/** Replies the characters that must be used to end a comment."); //$NON-NLS-1$
  				it.newLine();
  				it.append("\t * @return the symbols."); //$NON-NLS-1$
  				it.newLine();
  				it.append("\t */"); //$NON-NLS-1$
  				it.newLine();
  				it.append("\t@"); //$NON-NLS-1$
  				it.append(Pure.class);
  				it.newLine();
  				it.append("\tString getMultilineCommentEndSymbols();"); //$NON-NLS-1$
  				it.newLineIfNotEmpty();
  				it.newLine();
  				it.append("\t/** Replies the string that must be used as prefix of a singleline comment."); //$NON-NLS-1$
  				it.newLine();
  				it.append("\t * @return the prefix."); //$NON-NLS-1$
  				it.newLine();
  				it.append("\t */"); //$NON-NLS-1$
  				it.newLine();
  				it.append("\t@"); //$NON-NLS-1$
  				it.append(Pure.class);
  				it.newLine();
  				it.append("\tString getSinglelineCommentPrefix();"); //$NON-NLS-1$
  				it.newLineIfNotEmpty();
  				it.newLine();
  				it.append("\t/** Replies the formatted string that corresponds to the given documentation."); //$NON-NLS-1$
  				it.newLine();
  				it.append("\t * @param doc the documentation text. It may be on multiple lines."); //$NON-NLS-1$
  				it.newLine();
  				it.append("\t * @return the formatted comment."); //$NON-NLS-1$
  				it.newLine();
  				it.append("\t */"); //$NON-NLS-1$
  				it.newLine();
  				it.append("\t@"); //$NON-NLS-1$
  				it.append(Pure.class);
  				it.newLine();
  				it.append("\tString formatMultilineComment(String doc);"); //$NON-NLS-1$
  				it.newLineIfNotEmpty();
  				it.newLine();
  				it.append("\t/** Replies the formatted string that corresponds to the given documentation."); //$NON-NLS-1$
  				it.newLine();
  				it.append("\t * @param doc the documentation text. It may be on multiple lines."); //$NON-NLS-1$
  				it.newLine();
  				it.append("\t * @param indentation the string to put for indenting the comment."); //$NON-NLS-1$
  				it.newLine();
  				it.append("\t * @return the formatted comment."); //$NON-NLS-1$
  				it.newLine();
  				it.append("\t */"); //$NON-NLS-1$
  				it.newLine();
  				it.append("\t@"); //$NON-NLS-1$
  				it.append(Pure.class);
  				it.newLine();
  				it.append("\tString formatMultilineComment(String doc, String indentation);"); //$NON-NLS-1$
  				it.newLineIfNotEmpty();
  				it.newLine();
  				it.append("\t/** Replies the formatted string that corresponds to the given documentation."); //$NON-NLS-1$
  				it.newLine();
  				it.append("\t * @param doc the documentation text. It may be on multiple lines."); //$NON-NLS-1$
  				it.newLine();
  				it.append("\t * @param appendable the receiver of the formatted string."); //$NON-NLS-1$
  				it.newLine();
  				it.append("\t */"); //$NON-NLS-1$
  				it.newLine();
  				it.append("\t@"); //$NON-NLS-1$
  				it.append(Pure.class);
  				it.newLine();
  				it.append("\tvoid formatMultilineComment(String doc, "); //$NON-NLS-1$
  				it.append(IAppendable.class);
  				it.append(" appendable);"); //$NON-NLS-1$
  				it.newLineIfNotEmpty();
  				it.newLine();
  				it.append("\t/** Replies the formatted string that corresponds to the given documentation."); //$NON-NLS-1$
  				it.newLine();
  				it.append("\t * @param doc the documentation text. It may be on multiple lines."); //$NON-NLS-1$
  				it.newLine();
  				it.append("\t * @param indentation the string to put for indenting the comment."); //$NON-NLS-1$
  				it.newLine();
  				it.append("\t * @param appendable the receiver of the formatted string."); //$NON-NLS-1$
  				it.newLine();
  				it.append("\t */"); //$NON-NLS-1$
  				it.newLine();
  				it.append("\t@"); //$NON-NLS-1$
  				it.append(Pure.class);
  				it.newLine();
  				it.append("\tvoid formatMultilineComment(String doc, String indentation, "); //$NON-NLS-1$
  				it.append(IAppendable.class);
  				it.append(" appendable);"); //$NON-NLS-1$
  				it.newLineIfNotEmpty();
  				it.newLine();
  				it.append("\t/** Format the given multiline documentation."); //$NON-NLS-1$
  				it.newLine();
  				it.append("\t *"); //$NON-NLS-1$
  				it.newLine();
  				it.append("\t * @param context the formatting context."); //$NON-NLS-1$
  				it.newLine();
  				it.append("\t * @param comment the comment to format out."); //$NON-NLS-1$
  				it.newLine();
  				it.append("\t */"); //$NON-NLS-1$
  				it.newLine();
  				it.append("\t@"); //$NON-NLS-1$
  				it.append(Pure.class);
  				it.newLine();
  				it.append("\tpublic void formatMultilineComment("); //$NON-NLS-1$
  				it.append(ITextReplacerContext.class);
  				it.append(" context, "); //$NON-NLS-1$
  				it.append(IComment.class);
  				it.append(" comment);"); //$NON-NLS-1$
  				it.newLineIfNotEmpty();
  				it.newLine();
  				it.append("\t/** Replies the formatted string that corresponds to the given documentation."); //$NON-NLS-1$
  				it.newLine();
  				it.append("\t * @param doc the documentation text. It may be on multiple lines."); //$NON-NLS-1$
  				it.newLine();
  				it.append("\t * @return the formatted comment."); //$NON-NLS-1$
  				it.newLine();
  				it.append("\t */"); //$NON-NLS-1$
  				it.newLine();
  				it.append("\t@"); //$NON-NLS-1$
  				it.append(Pure.class);
  				it.newLine();
  				it.append("\tString formatSinglelineComment(String doc);"); //$NON-NLS-1$
  				it.newLineIfNotEmpty();
  				it.newLine();
  				it.append("\t/** Replies the formatted string that corresponds to the given documentation."); //$NON-NLS-1$
  				it.newLine();
  				it.append("\t * @param doc the documentation text. It may be on multiple lines."); //$NON-NLS-1$
  				it.newLine();
  				it.append("\t * @param indentation the string to put for indenting the comment."); //$NON-NLS-1$
  				it.newLine();
  				it.append("\t * @return the formatted comment."); //$NON-NLS-1$
  				it.newLine();
  				it.append("\t */"); //$NON-NLS-1$
  				it.newLine();
  				it.append("\t@"); //$NON-NLS-1$
  				it.append(Pure.class);
  				it.newLine();
  				it.append("\tString formatSinglelineComment(String doc, String indentation);"); //$NON-NLS-1$
  				it.newLineIfNotEmpty();
  				it.newLine();
  				it.append("\t/** Replies the formatted string that corresponds to the given documentation."); //$NON-NLS-1$
  				it.newLine();
  				it.append("\t * @param doc the documentation text. It may be on multiple lines."); //$NON-NLS-1$
  				it.newLine();
  				it.append("\t * @param appendable the receiver of the formatted string."); //$NON-NLS-1$
  				it.newLine();
  				it.append("\t */"); //$NON-NLS-1$
  				it.newLine();
  				it.append("\t@"); //$NON-NLS-1$
  				it.append(Pure.class);
  				it.newLine();
  				it.append("\tvoid formatSinglelineComment(String doc, "); //$NON-NLS-1$
  				it.append(IAppendable.class);
  				it.append(" appendable);"); //$NON-NLS-1$
  				it.newLineIfNotEmpty();
  				it.newLine();
  				it.append("\t/** Replies the formatted string that corresponds to the given documentation."); //$NON-NLS-1$
  				it.newLine();
  				it.append("\t * @param doc the documentation text. It may be on multiple lines."); //$NON-NLS-1$
  				it.newLine();
  				it.append("\t * @param indentation the string to put for indenting the comment."); //$NON-NLS-1$
  				it.newLine();
  				it.append("\t * @param appendable the receiver of the formatted string."); //$NON-NLS-1$
  				it.newLine();
  				it.append("\t */"); //$NON-NLS-1$
  				it.newLine();
  				it.append("\t@"); //$NON-NLS-1$
  				it.append(Pure.class);
  				it.newLine();
  				it.append("\tvoid formatSinglelineComment(String doc, String indentation, "); //$NON-NLS-1$
  				it.append(IAppendable.class);
  				it.append(" appendable);"); //$NON-NLS-1$
  				it.newLineIfNotEmpty();
  				it.newLine();
  				it.append("\t/** Format the given singleline documentation."); //$NON-NLS-1$
  				it.newLine();
  				it.append("\t *"); //$NON-NLS-1$
  				it.newLine();
  				it.append("\t * @param context the formatting context."); //$NON-NLS-1$
  				it.newLine();
  				it.append("\t * @param comment the comment to format out."); //$NON-NLS-1$
  				it.newLine();
  				it.append("\t */"); //$NON-NLS-1$
  				it.newLine();
  				it.append("\t@"); //$NON-NLS-1$
  				it.append(Pure.class);
  				it.newLine();
  				it.append("\tvoid formatSinglelineComment("); //$NON-NLS-1$
  				it.append(ITextReplacerContext.class);
  				it.append(" context, "); //$NON-NLS-1$
  				it.append(IComment.class);
  				it.append(" comment);"); //$NON-NLS-1$
  				it.newLineIfNotEmpty();
  				it.newLine();
  				it.append("}"); //$NON-NLS-1$
  				it.newLineIfNotEmpty();
  				it.newLine();
  			}
  
  		};
  		JavaFileAccess createJavaFile = getFileAccessFactory().createJavaFile(formatter, content);
  		createJavaFile.writeTo(getSrcGen());
  	}