public void testFree() {
   final ColoredAlligator coloredAlligator =
       new ColoredAlligator(false, false, new Color(0), false);
   final Egg egg = new Egg(false, false, new Color(1), false);
   coloredAlligator.addChild(egg);
   assertTrue(Boundedness.isFree(egg));
   assertFalse(Boundedness.isBound(egg));
 }
 /** {@inheritDoc} */
 @Override
 public void visitEgg(Egg egg) {
   final Color eggColor = egg.getColor();
   if (egg != family) {
     for (Parent parent : GetParentHierarchy.get(egg)) {
       // TODO find a way to remove instanceof
       if (parent instanceof ColoredAlligator) {
         final ColoredAlligator colored = (ColoredAlligator) parent;
         if (eggColor.equals(colored.getColor())) {
           return;
         }
       }
       if (parent == family) {
         break;
       }
     }
   }
   freeColors.add(eggColor);
 }
 /** {@inheritDoc} */
 @Override
 public void visitColoredAlligator(ColoredAlligator alligator) {
   alligator.acceptOnChildren(this);
 }