package org.example.entities.validation; import java.util.HashSet; import java.util.Set; import org.eclipse.xtext.validation.Check; import org.example.entities.entities.EntitiesPackage; import org.example.entities.entities.Entity; public class EntitiesJavaValidator extends AbstractEntitiesJavaValidator { public static final String HIERARCHY_CICLE = "org.example.entities.HierarchyCycle"; @Check public void checkNoCycleInEntityHierarchy(Entity entity) { if (entity.getSuperType() == null) return; // nothing to check Set<Entity> visitedEntities = new HashSet<Entity>(); visitedEntities.add(entity); Entity current = entity.getSuperType(); while (current != null) { if (visitedEntities.contains(current)) { error("cycle in hierarchy of entity '" + current.getName() + "'", EntitiesPackage.Literals.ENTITY__SUPER_TYPE, HIERARCHY_CICLE, current.getSuperType().getName()); return; } visitedEntities.add(current); current = current.getSuperType(); } } }