// Path: src/main/java/net/davidtanzer/jobjectformatter/valuesinfo/ObjectValuesInfo.java
// public class ObjectValuesInfo {
// 	private final List<GroupedValuesInfo> valuesByClass;
// 	private final List<ValueInfo> allValues;
// 	private final Class type;
// 
// 	private ObjectValuesInfo(final List<GroupedValuesInfo> valuesByClass, final List<ValueInfo> allValues, final Class type) {
// 		this.valuesByClass = valuesByClass;
// 		this.allValues = allValues;
// 		this.type = type;
// 	}
// 
// 	/**
// 	 * Get all values of the object's properties, grouped by their declaring class.
// 	 *
// 	 * @return all values of the object's properties, grouped by their declaring class.
// 	 */
// 	public List<GroupedValuesInfo> getValuesByClass() {
// 		return valuesByClass;
// 	}
// 
// 	/**
// 	 * Get all values of the object's properties.
// 	 *
// 	 * @return all values of the object's properties.
// 	 */
// 	public List<ValueInfo> getAllValues() {
// 		return allValues;
// 	}
// 
// 	/**
// 	 * Get the type of the object to format.
// 	 *
// 	 * @return the type of the object to format.
// 	 */
// 	public Class getType() {
// 		return type;
// 	}
// 
// 	static class Builder {
// 		private final List<GroupedValuesInfo> valuesByClass = new ArrayList<>();
// 		private final List<ValueInfo> allValues = new ArrayList<>();
// 		private Class type;
// 
// 		public ObjectValuesInfo buildToStringInfo() {
// 			return new ObjectValuesInfo(
// 					Collections.unmodifiableList(valuesByClass),
// 					Collections.unmodifiableList(allValues),
// 					type);
// 		}
// 
// 		Builder addClassValues(final GroupedValuesInfo groupedValuesInfo) {
// 			valuesByClass.add(groupedValuesInfo);
// 			allValues.addAll(groupedValuesInfo.getValues());
// 			return this;
// 		}
// 
// 		Builder setType(Class type) {
// 			this.type = type;
// 			return this;
// 		}
// 	}
// }


import net.davidtanzer.jobjectformatter.valuesinfo.ObjectValuesInfo;
/*
   Copyright 2015 David Tanzer (business@davidtanzer.net / @dtanzer)

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
 */
package net.davidtanzer.jobjectformatter.annotations;


/**
 * With TransitiveInclude, you can configure which types of fields (all, annotated or none) to include in the formatted output
 * using the {@link net.davidtanzer.jobjectformatter.annotations.Formatted} annotation.
 *
 * @see net.davidtanzer.jobjectformatter.annotations.Formatted
 */
public enum TransitiveInclude {
	/**
	 * Include all fields in the formatted output.
	 */
	ALL_FIELDS {
		@Override
// Path: src/main/java/net/davidtanzer/jobjectformatter/valuesinfo/ObjectValuesInfo.java
// public class ObjectValuesInfo {
// 	private final List<GroupedValuesInfo> valuesByClass;
// 	private final List<ValueInfo> allValues;
// 	private final Class type;
// 
// 	private ObjectValuesInfo(final List<GroupedValuesInfo> valuesByClass, final List<ValueInfo> allValues, final Class type) {
// 		this.valuesByClass = valuesByClass;
// 		this.allValues = allValues;
// 		this.type = type;
// 	}
// 
// 	/**
// 	 * Get all values of the object's properties, grouped by their declaring class.
// 	 *
// 	 * @return all values of the object's properties, grouped by their declaring class.
// 	 */
// 	public List<GroupedValuesInfo> getValuesByClass() {
// 		return valuesByClass;
// 	}
// 
// 	/**
// 	 * Get all values of the object's properties.
// 	 *
// 	 * @return all values of the object's properties.
// 	 */
// 	public List<ValueInfo> getAllValues() {
// 		return allValues;
// 	}
// 
// 	/**
// 	 * Get the type of the object to format.
// 	 *
// 	 * @return the type of the object to format.
// 	 */
// 	public Class getType() {
// 		return type;
// 	}
// 
// 	static class Builder {
// 		private final List<GroupedValuesInfo> valuesByClass = new ArrayList<>();
// 		private final List<ValueInfo> allValues = new ArrayList<>();
// 		private Class type;
// 
// 		public ObjectValuesInfo buildToStringInfo() {
// 			return new ObjectValuesInfo(
// 					Collections.unmodifiableList(valuesByClass),
// 					Collections.unmodifiableList(allValues),
// 					type);
// 		}
// 
// 		Builder addClassValues(final GroupedValuesInfo groupedValuesInfo) {
// 			valuesByClass.add(groupedValuesInfo);
// 			allValues.addAll(groupedValuesInfo.getValues());
// 			return this;
// 		}
// 
// 		Builder setType(Class type) {
// 			this.type = type;
// 			return this;
// 		}
// 	}
// }


// Path: src/main/java/net/davidtanzer/jobjectformatter/annotations/TransitiveInclude.java
import net.davidtanzer.jobjectformatter.valuesinfo.ObjectValuesInfo;

/*
   Copyright 2015 David Tanzer (business@davidtanzer.net / @dtanzer)

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
 */
package net.davidtanzer.jobjectformatter.annotations;


/**
 * With TransitiveInclude, you can configure which types of fields (all, annotated or none) to include in the formatted output
 * using the {@link net.davidtanzer.jobjectformatter.annotations.Formatted} annotation.
 *
 * @see net.davidtanzer.jobjectformatter.annotations.Formatted
 */
public enum TransitiveInclude {
	/**
	 * Include all fields in the formatted output.
	 */
	ALL_FIELDS {
		@Override
		public Object transitiveFieldValue(final Object fieldValue, final boolean hasFormattedAnnotation, final ObjectValuesInfo transitiveValues) {