Projects >> pojobuilder >>5a51a72fefc3b7a0cca900036d70392548320f81

Chunk
Conflicting content
		computePropertyModels(input, builderModel);

<<<<<<< HEAD
=======
		computePropertyModels(input, builderModel);

>>>>>>> 82da060a119397a67512fb125eacabde113c1367
		if (input.hasFactoryMethod()) {
			builderModel.setFactory(computeFactoryModel(input));
		}
Solution content
		computePropertyModels(input, builderModel);

		if (input.hasFactoryMethod()) {
			builderModel.setFactory(computeFactoryModel(input));
		}
File
BuilderModelProducer.java
Developer's decision
Version 1
Kind of conflict
Method invocation
Chunk
Conflicting content
	// HELPER METHODS: these are candidates for separate components
	private void computePropertyModels(Input input, BuilderM builderModel) {
		TypeElement pojoTypeElement = input.getPojoType();
<<<<<<< HEAD
		
=======
>>>>>>> 82da060a119397a67512fb125eacabde113c1367
		if (input.hasFactoryMethod()) {
			addPropertyModelsForFactoryMethodParameters(input.getFactoryMethod(), builderModel);
		} else {
Solution content
	// HELPER METHODS: these are candidates for separate components
	private void computePropertyModels(Input input, BuilderM builderModel) {
		TypeElement pojoTypeElement = input.getPojoType();
		
		if (input.hasFactoryMethod()) {
			addPropertyModelsForFactoryMethodParameters(input.getFactoryMethod(), builderModel);
		} else {
File
BuilderModelProducer.java
Developer's decision
Version 1
Kind of conflict
Blank
Chunk
Conflicting content
		if (constr != null) {
			addPropertyModelsForFactoryMethodParameters(input.getFactoryMethod(), builderModel);
		} else {
			addPropertyModelsForConstructor(pojoTypeElement, builderModel);
<<<<<<< HEAD
		}
		addPropertyModelsForSetterMethods(pojoTypeElement, builderModel);
		addPropertyModelsForAccessibleFields(pojoTypeElement, builderModel);
		addPropertyModelsForGetterMethods(pojoTypeElement, builderModel);
		
	}

	private void addPropertyModelsForConstructor(TypeElement pojoTypeElement, BuilderM builderModel) {
		List constructors = ElementFilter.constructorsIn(env.getElementUtils().getAllMembers(
				pojoTypeElement));
		ExecutableElement constr = findFirstAnnotatedConstructor(constructors, ConstructorProperties.class);
		if (constr != null) {
			ConstructorProperties constrProps = constr.getAnnotation(ConstructorProperties.class);
			String[] propertyNames = constrProps.value();
			List parameters = constr.getParameters();
			if (propertyNames.length != parameters.size()) {
				throw new BuildException(Diagnostic.Kind.ERROR,
						String.format("Incorrect number of values in annotation %s on constructor %s! "
								+ "Expected %d, but was %d.", ConstructorProperties.class.getCanonicalName(), constr,
								parameters.size(), propertyNames.length), constr);
			}

			// loop over all constructor parameters
			for (int i = 0; i < propertyNames.length; ++i) {
				String propertyName = propertyNames[i];
				TypeMirror propertyType = parameters.get(i).asType();
				TypeM propertyTypeM = typeMUtils.getTypeM(propertyType);

				PropertyM propM = builderModel.getOrCreateProperty(propertyName, propertyTypeM);
				propM.setParameterPos(i);
			}
		} else {
			constr = findDefaultConstructor(constructors);
		}

		if (constr != null) {
			// find all exceptions that can be thrown by this constructor
			List throwTypes = constr.getThrownTypes();
			List exceptionTypes = new ArrayList();
			for (TypeMirror throwType : throwTypes) {
				TypeM exeptionType = typeMUtils.getTypeM(throwType);
				exceptionTypes.add(exeptionType);
			}
			builderModel.getBuildExceptions().addAll(exceptionTypes);
		} else {
			throw new BuildException(Diagnostic.Kind.ERROR, String.format(
					"Missing default constructor OR constructor annotated with %s in class %s!",
					ConstructorProperties.class.getCanonicalName(), pojoTypeElement.getQualifiedName()),
					pojoTypeElement);
		}
	}

=======
		}
		addPropertyModelsForSetterMethods(pojoTypeElement, builderModel);
		addPropertyModelsForAccessibleFields(pojoTypeElement, builderModel);
		
	}

	private void addPropertyModelsForConstructor(TypeElement pojoTypeElement, BuilderM builderModel) {
		List constructors = ElementFilter.constructorsIn(env.getElementUtils().getAllMembers(
				pojoTypeElement));
		ExecutableElement constr = findFirstAnnotatedConstructor(constructors, ConstructorProperties.class);
			ConstructorProperties constrProps = constr.getAnnotation(ConstructorProperties.class);
			String[] propertyNames = constrProps.value();
			List parameters = constr.getParameters();
			if (propertyNames.length != parameters.size()) {
				throw new BuildException(Diagnostic.Kind.ERROR,
						String.format("Incorrect number of values in annotation %s on constructor %s! "
								+ "Expected %d, but was %d.", ConstructorProperties.class.getCanonicalName(), constr,
								parameters.size(), propertyNames.length), constr);
			}

			// loop over all constructor parameters
			for (int i = 0; i < propertyNames.length; ++i) {
				String propertyName = propertyNames[i];
				TypeMirror propertyType = parameters.get(i).asType();
				TypeM propertyTypeM = typeMUtils.getTypeM(propertyType);

				PropertyM propM = builderModel.getOrCreateProperty(propertyName, propertyTypeM);
				propM.setParameterPos(i);
			}
		} else {
			constr = findDefaultConstructor(constructors);
		}

		if (constr != null) {
			// find all exceptions that can be thrown by this constructor
			List throwTypes = constr.getThrownTypes();
			List exceptionTypes = new ArrayList();
			for (TypeMirror throwType : throwTypes) {
				TypeM exeptionType = typeMUtils.getTypeM(throwType);
				exceptionTypes.add(exeptionType);
			}
			builderModel.getBuildExceptions().addAll(exceptionTypes);
		} else {
			throw new BuildException(Diagnostic.Kind.ERROR, String.format(
					"Missing default constructor OR constructor annotated with %s in class %s!",
					ConstructorProperties.class.getCanonicalName(), pojoTypeElement.getQualifiedName()),
					pojoTypeElement);
		}
	}

>>>>>>> 82da060a119397a67512fb125eacabde113c1367
	private void addPropertyModelsForFactoryMethodParameters(ExecutableElement factoryMethod, BuilderM builderModel) {
		if (factoryMethod.getParameters().isEmpty()) {
			return;
Solution content
			addPropertyModelsForFactoryMethodParameters(input.getFactoryMethod(), builderModel);
		} else {
			addPropertyModelsForConstructor(pojoTypeElement, builderModel);
		}
		addPropertyModelsForSetterMethods(pojoTypeElement, builderModel);
		addPropertyModelsForAccessibleFields(pojoTypeElement, builderModel);
		addPropertyModelsForGetterMethods(pojoTypeElement, builderModel);
		
	}

	private void addPropertyModelsForConstructor(TypeElement pojoTypeElement, BuilderM builderModel) {
		List constructors = ElementFilter.constructorsIn(env.getElementUtils().getAllMembers(
				pojoTypeElement));
		ExecutableElement constr = findFirstAnnotatedConstructor(constructors, ConstructorProperties.class);
		if (constr != null) {
			ConstructorProperties constrProps = constr.getAnnotation(ConstructorProperties.class);
			String[] propertyNames = constrProps.value();
			List parameters = constr.getParameters();
			if (propertyNames.length != parameters.size()) {
				throw new BuildException(Diagnostic.Kind.ERROR,
						String.format("Incorrect number of values in annotation %s on constructor %s! "
								+ "Expected %d, but was %d.", ConstructorProperties.class.getCanonicalName(), constr,
								parameters.size(), propertyNames.length), constr);
			}

			// loop over all constructor parameters
			for (int i = 0; i < propertyNames.length; ++i) {
				String propertyName = propertyNames[i];
				TypeMirror propertyType = parameters.get(i).asType();
				TypeM propertyTypeM = typeMUtils.getTypeM(propertyType);

				PropertyM propM = builderModel.getOrCreateProperty(propertyName, propertyTypeM);
				propM.setParameterPos(i);
			}
		} else {
			constr = findDefaultConstructor(constructors);
		}

		if (constr != null) {
			// find all exceptions that can be thrown by this constructor
			List throwTypes = constr.getThrownTypes();
			List exceptionTypes = new ArrayList();
			for (TypeMirror throwType : throwTypes) {
				TypeM exeptionType = typeMUtils.getTypeM(throwType);
				exceptionTypes.add(exeptionType);
			}
			builderModel.getBuildExceptions().addAll(exceptionTypes);
		} else {
			throw new BuildException(Diagnostic.Kind.ERROR, String.format(
					"Missing default constructor OR constructor annotated with %s in class %s!",
					ConstructorProperties.class.getCanonicalName(), pojoTypeElement.getQualifiedName()),
					pojoTypeElement);
		}
	}

	private void addPropertyModelsForFactoryMethodParameters(ExecutableElement factoryMethod, BuilderM builderModel) {
		if (factoryMethod.getParameters().isEmpty()) {
			return;
File
BuilderModelProducer.java
Developer's decision
Version 1
Kind of conflict
Method declaration
Method invocation
Chunk
Conflicting content
			currentTypeElement = (TypeElement) env.getTypeUtils().asElement(currentTypeElement.getSuperclass());
		}
	}
<<<<<<< HEAD
	
	private void addPropertyModelsForGetterMethods(TypeElement pojoTypeElement, BuilderM builderModel) {
        TypeElement currentTypeElement = pojoTypeElement;
        while (!currentTypeElement.getQualifiedName().toString().equals(Object.class.getName())) {
            List members = env.getElementUtils().getAllMembers(currentTypeElement);
            // loop over all setter methods
            List methods = ElementFilter.methodsIn(members);
            for (ExecutableElement method : methods) {
                if (!isStatic(method) && isGetterMethod(method) && isAccessibleForBuilder(method, builderModel.getType())) {
                    String propertyName = getPropertyName(method);

                    DeclaredType declType = (DeclaredType) pojoTypeElement.asType();
                    ExecutableType execType = (ExecutableType) env.getTypeUtils().asMemberOf(declType, method);
                    TypeMirror propertyType = execType.getReturnType();

                    TypeM propertyTypeM = typeMUtils.getTypeM(propertyType);

                    PropertyM propM = builderModel.getProperty(propertyName, propertyTypeM);//resultMap.get(fieldName);
                    if (propM != null) {
                        propM.setGetter(method.getSimpleName().toString());
                    }
                }
            }
            currentTypeElement = (TypeElement) env.getTypeUtils().asElement(currentTypeElement.getSuperclass());
        }
    }
=======
>>>>>>> 82da060a119397a67512fb125eacabde113c1367

	private void addPropertyModelsForAccessibleFields(TypeElement pojoTypeElement, BuilderM builderModel) {
		TypeElement currentTypeElement = pojoTypeElement;
Solution content
			currentTypeElement = (TypeElement) env.getTypeUtils().asElement(currentTypeElement.getSuperclass());
		}
	}
	
	private void addPropertyModelsForGetterMethods(TypeElement pojoTypeElement, BuilderM builderModel) {
        TypeElement currentTypeElement = pojoTypeElement;
        while (!currentTypeElement.getQualifiedName().toString().equals(Object.class.getName())) {
            List members = env.getElementUtils().getAllMembers(currentTypeElement);
            // loop over all setter methods
            List methods = ElementFilter.methodsIn(members);
            for (ExecutableElement method : methods) {
                if (!isStatic(method) && isGetterMethod(method) && isAccessibleForBuilder(method, builderModel.getType())) {
                    String propertyName = getPropertyName(method);

                    DeclaredType declType = (DeclaredType) pojoTypeElement.asType();
                    ExecutableType execType = (ExecutableType) env.getTypeUtils().asMemberOf(declType, method);
                    TypeMirror propertyType = execType.getReturnType();

                    TypeM propertyTypeM = typeMUtils.getTypeM(propertyType);

                    PropertyM propM = builderModel.getProperty(propertyName, propertyTypeM);//resultMap.get(fieldName);
                    if (propM != null) {
                        propM.setGetter(method.getSimpleName().toString());
                    }
                }
            }
            currentTypeElement = (TypeElement) env.getTypeUtils().asElement(currentTypeElement.getSuperclass());
        }
    }

	private void addPropertyModelsForAccessibleFields(TypeElement pojoTypeElement, BuilderM builderModel) {
		TypeElement currentTypeElement = pojoTypeElement;
File
BuilderModelProducer.java
Developer's decision
Version 1
Kind of conflict
Method declaration
Chunk
Conflicting content
	}

<<<<<<< HEAD
package net.karneim.pojobuilder.model;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;

public class BuilderM extends BaseBuilderM {
	private TypeM selfType;
	private FactoryM factory;
	private final Map properties = new HashMap();
	private boolean isImplementingCopyMethod;

	public void setSelfType(TypeM selfType) {
		this.selfType = selfType;
	}

	public FactoryM getFactory() {
		return factory;
	}

	public void setFactory(FactoryM factory) {
		this.factory = factory;
	}

	public boolean isUsingFactory() {
		return factory != null;
	}
	
	public void setIsImplementingCopyMethod(boolean isImplementingCopyMethod) {
	    this.isImplementingCopyMethod = isImplementingCopyMethod;
	}

	public boolean isImplementingCopyMethod() {
	    return isImplementingCopyMethod;
	}

	public List getProperties() {
		return new ArrayList(properties.values());
	}

	public TypeM getSelfType() {
		return selfType;
	}

	public PropertyM getOrCreateProperty(String propertyName, TypeM propertyType) {
		String fieldname = computeBuilderFieldname(propertyName, propertyType.getQualifiedName());
		PropertyM result = properties.get(fieldname);
		if (result == null) {
			result = new PropertyM(propertyName, fieldname, propertyType);
			properties.put(fieldname, result);
		}
		return result;
	}
	
	public PropertyM getProperty(String propertyName, TypeM propertyType) {
	    String fieldname = computeBuilderFieldname(propertyName, propertyType.getQualifiedName());
        PropertyM result = properties.get(fieldname);
        return result;
	}

	private static String computeBuilderFieldname(String propertyName, String propertyType) {
		String typeString = propertyType.replaceAll("\\.", "\\$");
		typeString = typeString.replaceAll("\\[\\]", "\\$");
		return propertyName + "$" + typeString;
	}

	@Override
	public void addToImportTypes(Set result) {
		super.addToImportTypes(result);
		for (PropertyM prop : properties.values()) {
			prop.getType().addToImportTypes(result);
		}
		if (factory != null) {
			factory.addToImportTypes(result);
		}
	}

	public Collection getPropertiesForConstructor() {
		List result = getProperties();
		// Remove properties that have no parameter position
		Iterator it = result.iterator();
		while (it.hasNext()) {
			if (it.next().getParameterPos() == null) {
				it.remove();
			}
		}
		// sort result by parameter pos
		Collections.sort(result, new Comparator() {

			@Override
			public int compare(PropertyM o1, PropertyM o2) {
				return o1.getParameterPos().compareTo(o2.getParameterPos());
			}

		});
		return result;
	}

	public Collection getPropertiesForSetters() {
		List result = getProperties();
		// Remove properties that have a parameter position
		Iterator it = result.iterator();
		while (it.hasNext()) {
			PropertyM p = it.next();
			if (p.getParameterPos() != null || p.isHasSetter() == false) {
				it.remove();
			}
		}
		return result;
	}

	public Collection getPropertiesForAssignment() {
		List result = getProperties();
		// Remove properties that have a parameter position and have setters
		Iterator it = result.iterator();
		while (it.hasNext()) {
			PropertyM p = it.next();
			if (p.getParameterPos() != null || p.isHasSetter() || p.isAccessible() == false) {
				it.remove();
			}
		}
		return result;
	}

}
=======
package net.karneim.pojobuilder.model;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;

public class BuilderM extends BaseBuilderM {
	private TypeM selfType;
	private FactoryM factory;
	private final Map properties = new HashMap();

	public void setSelfType(TypeM selfType) {
		this.selfType = selfType;
	public FactoryM getFactory() {
		return factory;
	}

	public void setFactory(FactoryM factory) {
		this.factory = factory;
	}

	public boolean isUsingFactory() {
		return factory != null;
	}

	public List getProperties() {
		return new ArrayList(properties.values());
	}

	public TypeM getSelfType() {
		return selfType;
	}

	public PropertyM getOrCreateProperty(String propertyName, TypeM propertyType) {
		String fieldname = computeBuilderFieldname(propertyName, propertyType.getQualifiedName());
		PropertyM result = properties.get(fieldname);
		if (result == null) {
			result = new PropertyM(propertyName, fieldname, propertyType);
			properties.put(fieldname, result);
		}
		return result;
	}

	private static String computeBuilderFieldname(String propertyName, String propertyType) {
		String typeString = propertyType.replaceAll("\\.", "\\$");
		typeString = typeString.replaceAll("\\[\\]", "\\$");
		return propertyName + "$" + typeString;
	}

	@Override
	public void addToImportTypes(Set result) {
		super.addToImportTypes(result);
		for (PropertyM prop : properties.values()) {
			prop.getType().addToImportTypes(result);
		}
		if (factory != null) {
			factory.addToImportTypes(result);
		}
	}

	public Collection getPropertiesForConstructor() {
		List result = getProperties();
		// Remove properties that have no parameter position
		Iterator it = result.iterator();
		while (it.hasNext()) {
			if (it.next().getParameterPos() == null) {
				it.remove();
			}
		}
		// sort result by parameter pos
		Collections.sort(result, new Comparator() {

			@Override
			public int compare(PropertyM o1, PropertyM o2) {
				return o1.getParameterPos().compareTo(o2.getParameterPos());
			}

		});
		return result;
	}

	public Collection getPropertiesForSetters() {
		List result = getProperties();
		// Remove properties that have a parameter position
		Iterator it = result.iterator();
		while (it.hasNext()) {
			PropertyM p = it.next();
			if (p.getParameterPos() != null || p.isHasSetter() == false) {
				it.remove();
			}
		}
		return result;
	}

	public Collection getPropertiesForAssignment() {
		List result = getProperties();
		// Remove properties that have a parameter position and have setters
		Iterator it = result.iterator();
		while (it.hasNext()) {
			PropertyM p = it.next();
			if (p.getParameterPos() != null || p.isHasSetter() || p.isAccessible() == false) {
				it.remove();
			}
		}
		return result;
	}

}
>>>>>>> 82da060a119397a67512fb125eacabde113c1367
Solution content
package net.karneim.pojobuilder.model;

import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;

public class BuilderM extends BaseBuilderM {
	private TypeM selfType;
	private FactoryM factory;
	private final Map properties = new HashMap();
	private boolean isImplementingCopyMethod;

	public void setSelfType(TypeM selfType) {
		this.selfType = selfType;
	}

	public FactoryM getFactory() {
		return factory;
	}

	public void setFactory(FactoryM factory) {
		this.factory = factory;
	}

	public boolean isUsingFactory() {
		return factory != null;
	}
	
	public void setIsImplementingCopyMethod(boolean isImplementingCopyMethod) {
	    this.isImplementingCopyMethod = isImplementingCopyMethod;
	}

	public boolean isImplementingCopyMethod() {
	    return isImplementingCopyMethod;
	}

	public List getProperties() {
		return new ArrayList(properties.values());
	}

	public TypeM getSelfType() {
		return selfType;
	}

	public PropertyM getOrCreateProperty(String propertyName, TypeM propertyType) {
		String fieldname = computeBuilderFieldname(propertyName, propertyType.getQualifiedName());
		PropertyM result = properties.get(fieldname);
		if (result == null) {
			result = new PropertyM(propertyName, fieldname, propertyType);
			properties.put(fieldname, result);
		}
		return result;
	}
	
	public PropertyM getProperty(String propertyName, TypeM propertyType) {
	    String fieldname = computeBuilderFieldname(propertyName, propertyType.getQualifiedName());
        PropertyM result = properties.get(fieldname);
        return result;
	}

	private static String computeBuilderFieldname(String propertyName, String propertyType) {
		String typeString = propertyType.replaceAll("\\.", "\\$");
		typeString = typeString.replaceAll("\\[\\]", "\\$");
		return propertyName + "$" + typeString;
	}

	@Override
	public void addToImportTypes(Set result) {
		super.addToImportTypes(result);
		for (PropertyM prop : properties.values()) {
			prop.getType().addToImportTypes(result);
		}
		if (factory != null) {
			factory.addToImportTypes(result);
		}
	}

	public Collection getPropertiesForConstructor() {
		List result = getProperties();
		// Remove properties that have no parameter position
		Iterator it = result.iterator();
		while (it.hasNext()) {
			if (it.next().getParameterPos() == null) {
				it.remove();
			}
		}
		// sort result by parameter pos
		Collections.sort(result, new Comparator() {

			@Override
			public int compare(PropertyM o1, PropertyM o2) {
				return o1.getParameterPos().compareTo(o2.getParameterPos());
			}

		});
		return result;
	}

	public Collection getPropertiesForSetters() {
		List result = getProperties();
		// Remove properties that have a parameter position
		Iterator it = result.iterator();
		while (it.hasNext()) {
			PropertyM p = it.next();
			if (p.getParameterPos() != null || p.isHasSetter() == false) {
				it.remove();
			}
		}
		return result;
	}

	public Collection getPropertiesForAssignment() {
		List result = getProperties();
		// Remove properties that have a parameter position and have setters
		Iterator it = result.iterator();
		while (it.hasNext()) {
			PropertyM p = it.next();
			if (p.getParameterPos() != null || p.isHasSetter() || p.isAccessible() == false) {
				it.remove();
			}
		}
		return result;
	}

}
File
BuilderM.java
Developer's decision
Version 1
Kind of conflict
Class declaration
Import
Package declaration