docs: @SuppressWarnings("checkstyle:all")
  	protected StringConcatenationClient generateTopElement(CodeElementExtractor.ElementDescription description,
  			boolean forInterface, boolean forAppender) {
  		final String topElementName = Strings.toFirstUpper(description.getName());
  		final TypeReference builderType = getCodeElementExtractor().getElementBuilderInterface(topElementName);
  		return new StringConcatenationClient() {
  			@Override
  			protected void appendTo(TargetStringConcatenation it) {
  				if (!forInterface && !forAppender) {
  					it.append("\t@"); //$NON-NLS-1$
  					it.append(Inject.class);
  					it.newLine();
  					it.append("\tprivate "); //$NON-NLS-1$
  					it.append(Provider.class);
  					it.append("<"); //$NON-NLS-1$
  					it.append(builderType);
  					it.append("> "); //$NON-NLS-1$
  					it.append(Strings.toFirstLower(topElementName));
  					it.append("Provider;"); //$NON-NLS-1$
  					it.newLineIfNotEmpty();
  					it.newLine();
  				}
  				it.append("\t/** Create " + getAorAnArticle(topElementName) //$NON-NLS-1$
  						+ " "+ topElementName + " builder.");  //$NON-NLS-1$//$NON-NLS-2$
  				it.newLine();
  				it.append("\t * @param name the name of the " + topElementName + "."); //$NON-NLS-1$ //$NON-NLS-2$
  				it.newLine();
  				it.append("\t * @return the builder."); //$NON-NLS-1$
  				it.newLine();
  				it.append("\t */"); //$NON-NLS-1$
  				it.newLine();
  				it.append("\t"); //$NON-NLS-1$
  				if (!forInterface) {
  					it.append("public "); //$NON-NLS-1$
  				}
  				it.append(builderType);
  				it.append(" add"); //$NON-NLS-1$
  				it.append(topElementName);
  				it.append("(String name)"); //$NON-NLS-1$
  				if (forInterface) {
  					it.append(";"); //$NON-NLS-1$
  					it.newLineIfNotEmpty();
  				} else {
  					it.append(" {"); //$NON-NLS-1$
  					it.newLine();
  					if (forAppender) {
  						it.append("\t\t return this.builder.add"); //$NON-NLS-1$
  						it.append(topElementName);
  						it.append("(name);"); //$NON-NLS-1$
  					} else {
  						it.append("\t\t"); //$NON-NLS-1$
  						it.append(builderType);
  						it.append(" builder = this."); //$NON-NLS-1$
  						it.append(Strings.toFirstLower(topElementName));
  						it.append("Provider.get();"); //$NON-NLS-1$
  						it.newLine();
  						it.append("\t\tbuilder.eInit(getScript(), name, getTypeResolutionContext());"); //$NON-NLS-1$
  						it.newLine();
  						it.append("\t\treturn builder;"); //$NON-NLS-1$
  					}
  					it.newLine();
  					it.append("\t}"); //$NON-NLS-1$
  					it.newLineIfNotEmpty();
  				}
  				it.newLine();
  			}
  		};
  	}