docs: protected void generateIEcoreDocumentationBuilder() {
  		final TypeReference builder = getIEcoreDocumentationBuilder();
  		final StringConcatenationClient content = new StringConcatenationClient() {
  			@Override
  			protected void appendTo(TargetStringConcatenation it) {
  				it.append("/** Build a documentation string for specific objects."); //$NON-NLS-1$
  				it.newLine();
  				it.append(" */"); //$NON-NLS-1$
  				it.newLine();
  				it.append("public interface "); //$NON-NLS-1$
  				it.append(builder.getSimpleName());
  				it.append(" {"); //$NON-NLS-1$
  				it.newLineIfNotEmpty();
  				it.newLine();
  				it.append("\t/** Replies the grammar rule that corresponds to multiline comments."); //$NON-NLS-1$
  				it.newLine();
  				it.append("\t * @return the ML grammar rule."); //$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("\t"); //$NON-NLS-1$
  				it.append(AbstractRule.class);
  				it.append(" getMLCommentRule();"); //$NON-NLS-1$
  				it.newLineIfNotEmpty();
  				it.newLine();
  				it.append("\t/** Replies the grammar rule that corresponds to singleline comments."); //$NON-NLS-1$
  				it.newLine();
  				it.append("\t * @return the SL grammar rule."); //$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("\t"); //$NON-NLS-1$
  				it.append(AbstractRule.class);
  				it.append(" getSLCommentRule();"); //$NON-NLS-1$
  				it.newLineIfNotEmpty();
  				it.newLine();
  				it.append("\t/** Replies the documentation formatter used by this builder."); //$NON-NLS-1$
  				it.newLine();
  				it.append("\t * @return documentation formatter."); //$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("\t"); //$NON-NLS-1$
  				it.append(getIDocumentationFormatter());
  				it.append(" getDocumentationFormatter();"); //$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 objectType the type of the object for which the document must be built."); //$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 build(String doc, Class<?> objectType);"); //$NON-NLS-1$
  				it.newLineIfNotEmpty();
  				it.newLine();
  				it.append("\t/** Replies if multiline comments are the default for the given type of objects."); //$NON-NLS-1$
  				it.newLine();
  				it.append("\t * @param type the type of objects."); //$NON-NLS-1$
  				it.newLine();
  				it.append("\t * @return <code>true</code> if multiline comment is the default."); //$NON-NLS-1$
  				it.newLine();
  				it.append("\t *      Otherwise singleline comment is the default."); //$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("\tboolean isMultilineCommentFor(Class<?> type);"); //$NON-NLS-1$
  				it.newLineIfNotEmpty();
  				it.newLine();
  				it.append("}"); //$NON-NLS-1$
  				it.newLineIfNotEmpty();
  				it.newLine();
  			}
  
  		};
  		final JavaFileAccess createJavaFile = getFileAccessFactory().createJavaFile(builder, content);
  		createJavaFile.writeTo(getSrcGen());
  	}