docs: private MethodDeclaration generateFillValuesMethod(EclipseNode tdParent, boolean inherited, String builderGenericName, String classGenericName, String builderClassName, TypeParameter[] typeParams) {
  		MethodDeclaration out = new MethodDeclaration(((CompilationUnitDeclaration) tdParent.top().get()).compilationResult);
  		out.selector = FILL_VALUES_METHOD_NAME;
  		out.bits |= ECLIPSE_DO_NOT_TOUCH_FLAG;
  		out.modifiers = ClassFileConstants.AccProtected;
  		if (inherited) out.annotations = new Annotation[] {makeMarkerAnnotation(TypeConstants.JAVA_LANG_OVERRIDE, tdParent.get())};
  		out.returnType = new SingleTypeReference(builderGenericName.toCharArray(), 0);
  		
  		TypeReference builderType = new SingleTypeReference(classGenericName.toCharArray(), 0);
  		out.arguments = new Argument[] {new Argument(INSTANCE_VARIABLE_NAME, 0, builderType, Modifier.FINAL)};
  
  		List<Statement> body = new ArrayList<Statement>();
  
  		if (inherited) {
  			// Call super.
  			MessageSend callToSuper = new MessageSend();
  			callToSuper.receiver = new SuperReference(0, 0);
  			callToSuper.selector = FILL_VALUES_METHOD_NAME;
  			callToSuper.arguments = new Expression[] {new SingleNameReference(INSTANCE_VARIABLE_NAME, 0)};
  			body.add(callToSuper);
  		}
  
  		// Call the builder implemention's helper method that actually fills the values from the instance.
  		MessageSend callStaticFillValuesMethod = new MessageSend();
  		callStaticFillValuesMethod.receiver = new SingleNameReference(builderClassName.toCharArray(), 0);
  		callStaticFillValuesMethod.selector = FILL_VALUES_STATIC_METHOD_NAME;
  		callStaticFillValuesMethod.arguments = new Expression[] {new SingleNameReference(INSTANCE_VARIABLE_NAME, 0), new ThisReference(0, 0)};
  		body.add(callStaticFillValuesMethod);
  
  		// Return self().
  		MessageSend returnCall = new MessageSend();
  		returnCall.receiver = ThisReference.implicitThis();
  		returnCall.selector = SELF_METHOD_NAME;
  		body.add(new ReturnStatement(returnCall, 0, 0));
  		
  		out.statements = body.isEmpty() ? null : body.toArray(new Statement[0]);
  		
  		return out;
  	}