// Path: droitatedDBProcessor/src/main/java/org/droitateddb/builder/schema/data/Table.java
// public class Table {
// 
// 	private final String name;
// 	private final String entityClassName;
// 
// 	private final Set<Column> columns = new TreeSet<Column>(new Comparator<Column>() {
// 		@Override
// 		public int compare(final Column c1, final Column c2) {
// 			return c1.getNameInEntity().compareTo(c2.getNameInEntity());
// 		}
// 	});
// 	private final Set<Association> associations = new TreeSet<Association>(new Comparator<Association>() {
// 		@Override
// 		public int compare(final Association a1, final Association a2) {
// 			return a1.getNameInEntity().compareTo(a2.getNameInEntity());
// 		}
// 	});
// 
// 	public Table(final String name, final String entityClassName) {
// 		this.name = name;
// 		this.entityClassName = entityClassName;
// 	}
// 
// 	public String getName() {
// 		return name;
// 	}
// 
// 	public String getEntityClassName() {
// 		return entityClassName;
// 	}
// 
// 	public Set<Column> getColumns() {
// 		return Collections.unmodifiableSet(columns);
// 	}
// 
// 	public void addColumn(final Column column) {
// 		columns.add(column);
// 	}
// 
// 	public Set<Association> getAssociations() {
// 		return Collections.unmodifiableSet(associations);
// 	}
// 
// 	public void addAssociation(final Association association) {
// 		associations.add(association);
// 	}
// 
// }
// 
// Path: droitatedDBProcessor/src/main/java/org/droitateddb/builder/schema/visitor/AssociationElementResolvingTypeVisitor.java
// public class AssociationElementResolvingTypeVisitor extends DefaultElementVisitor<VariableElement, Void> {
// 
// 	 @Override
// 	 public VariableElement visitVariable(final VariableElement e, final Void p) {
// 		 if (e.getAnnotation(Relationship.class) != null) {
// 			 return e;
// 		 } else {
// 			 return null;
// 		 }
// 	 }
// 
//  }
// 
// Path: droitatedDBProcessor/src/main/java/org/droitateddb/builder/schema/visitor/EmptyContructorVisitor.java
// public class EmptyContructorVisitor extends DefaultElementVisitor<ExecutableElement, Void> {
// 	@Override
// 	public ExecutableElement visitExecutable(final ExecutableElement e, final Void p) {
// 		if ("<init>".equals(e.getSimpleName().toString()) && e.getParameters().size() == 0) {
// 			return e;
// 		}
// 		return null;
// 	}
// }


import javax.tools.Diagnostic.Kind;
import java.util.*;
import java.util.concurrent.atomic.AtomicInteger;
import org.droitateddb.builder.schema.data.Association;
import org.droitateddb.builder.schema.data.Column;
import org.droitateddb.builder.schema.data.Table;
import org.droitateddb.builder.schema.visitor.AssociationElementResolvingTypeVisitor;
import org.droitateddb.builder.schema.visitor.ColumnElementResolvingTypeVisitor;
import org.droitateddb.builder.schema.visitor.EmptyContructorVisitor;
import org.droitateddb.entity.PrimaryKey;
import org.droitateddb.entity.Relationship;
import org.droitateddb.schema.AssociationType;
import javax.annotation.processing.Messager;
import javax.lang.model.element.Element;
import javax.lang.model.element.TypeElement;
import javax.lang.model.element.VariableElement;
import javax.lang.model.util.Elements;
            if (child.accept(new EmptyContructorVisitor(), null) != null) {
                noArgsConstructor = true;
            }

            VariableElement column = child.accept(new ColumnElementResolvingTypeVisitor(), null);
            if (column != null) {
                if (hasAmbiguosAssociationDeclaration(column)) {
                    return null;
                }
                if (column.getAnnotation(PrimaryKey.class) != null && ++primaryKeyCount > 1) {
                    messager.printMessage(Kind.ERROR, "Only one @PrimaryKey is allowed within an @Entity", entity);
                    return null;
                }
                ColumnReader columnReader = new ColumnReader(column, elements, messager);
                Column read = columnReader.read();
                if (read != null) {
                    table.addColumn(read);
                }
            }

            VariableElement association = child.accept(new AssociationElementResolvingTypeVisitor(), null);
            if (association != null) {
                AssociationReader associationReader = new AssociationReader(association, entityNames, messager);
                Association read = associationReader.read();
                if (read != null) {
                    table.addAssociation(read);

                    if (AssociationType.TO_MANY == read.getCardinality()) {
                        if (countedToManyAssociations.containsKey(read.getCanonicalTypeInEntity())) {
                            countedToManyAssociations.get(read.getCanonicalTypeInEntity()).incrementAndGet();
// Path: droitatedDBProcessor/src/main/java/org/droitateddb/builder/schema/data/Table.java
// public class Table {
// 
// 	private final String name;
// 	private final String entityClassName;
// 
// 	private final Set<Column> columns = new TreeSet<Column>(new Comparator<Column>() {
// 		@Override
// 		public int compare(final Column c1, final Column c2) {
// 			return c1.getNameInEntity().compareTo(c2.getNameInEntity());
// 		}
// 	});
// 	private final Set<Association> associations = new TreeSet<Association>(new Comparator<Association>() {
// 		@Override
// 		public int compare(final Association a1, final Association a2) {
// 			return a1.getNameInEntity().compareTo(a2.getNameInEntity());
// 		}
// 	});
// 
// 	public Table(final String name, final String entityClassName) {
// 		this.name = name;
// 		this.entityClassName = entityClassName;
// 	}
// 
// 	public String getName() {
// 		return name;
// 	}
// 
// 	public String getEntityClassName() {
// 		return entityClassName;
// 	}
// 
// 	public Set<Column> getColumns() {
// 		return Collections.unmodifiableSet(columns);
// 	}
// 
// 	public void addColumn(final Column column) {
// 		columns.add(column);
// 	}
// 
// 	public Set<Association> getAssociations() {
// 		return Collections.unmodifiableSet(associations);
// 	}
// 
// 	public void addAssociation(final Association association) {
// 		associations.add(association);
// 	}
// 
// }
// 
// Path: droitatedDBProcessor/src/main/java/org/droitateddb/builder/schema/visitor/AssociationElementResolvingTypeVisitor.java
// public class AssociationElementResolvingTypeVisitor extends DefaultElementVisitor<VariableElement, Void> {
// 
// 	 @Override
// 	 public VariableElement visitVariable(final VariableElement e, final Void p) {
// 		 if (e.getAnnotation(Relationship.class) != null) {
// 			 return e;
// 		 } else {
// 			 return null;
// 		 }
// 	 }
// 
//  }
// 
// Path: droitatedDBProcessor/src/main/java/org/droitateddb/builder/schema/visitor/EmptyContructorVisitor.java
// public class EmptyContructorVisitor extends DefaultElementVisitor<ExecutableElement, Void> {
// 	@Override
// 	public ExecutableElement visitExecutable(final ExecutableElement e, final Void p) {
// 		if ("<init>".equals(e.getSimpleName().toString()) && e.getParameters().size() == 0) {
// 			return e;
// 		}
// 		return null;
// 	}
// }


// Path: droitatedDBProcessor/src/main/java/org/droitateddb/builder/schema/reader/TableReader.java
import javax.tools.Diagnostic.Kind;
import java.util.*;
import java.util.concurrent.atomic.AtomicInteger;
import org.droitateddb.builder.schema.data.Association;
import org.droitateddb.builder.schema.data.Column;
import org.droitateddb.builder.schema.data.Table;
import org.droitateddb.builder.schema.visitor.AssociationElementResolvingTypeVisitor;
import org.droitateddb.builder.schema.visitor.ColumnElementResolvingTypeVisitor;
import org.droitateddb.builder.schema.visitor.EmptyContructorVisitor;
import org.droitateddb.entity.PrimaryKey;
import org.droitateddb.entity.Relationship;
import org.droitateddb.schema.AssociationType;
import javax.annotation.processing.Messager;
import javax.lang.model.element.Element;
import javax.lang.model.element.TypeElement;
import javax.lang.model.element.VariableElement;
import javax.lang.model.util.Elements;

            if (child.accept(new EmptyContructorVisitor(), null) != null) {
                noArgsConstructor = true;
            }

            VariableElement column = child.accept(new ColumnElementResolvingTypeVisitor(), null);
            if (column != null) {
                if (hasAmbiguosAssociationDeclaration(column)) {
                    return null;
                }
                if (column.getAnnotation(PrimaryKey.class) != null && ++primaryKeyCount > 1) {
                    messager.printMessage(Kind.ERROR, "Only one @PrimaryKey is allowed within an @Entity", entity);
                    return null;
                }
                ColumnReader columnReader = new ColumnReader(column, elements, messager);
                Column read = columnReader.read();
                if (read != null) {
                    table.addColumn(read);
                }
            }

            VariableElement association = child.accept(new AssociationElementResolvingTypeVisitor(), null);
            if (association != null) {
                AssociationReader associationReader = new AssociationReader(association, entityNames, messager);
                Association read = associationReader.read();
                if (read != null) {
                    table.addAssociation(read);

                    if (AssociationType.TO_MANY == read.getCardinality()) {
                        if (countedToManyAssociations.containsKey(read.getCanonicalTypeInEntity())) {
                            countedToManyAssociations.get(read.getCanonicalTypeInEntity()).incrementAndGet();
                        } else {