/**
  * Replaces the element by an statement list containing all unary operators in the element
  *
  * @param element
  */
 private void replaceByUnaryBlock(CtElement element) {
   CtBlock<CtUnaryOperator> opBlock = new CtBlockImpl<CtUnaryOperator>();
   for (CtUnaryOperator s :
       element.getElements(new TypeFilter<CtUnaryOperator>(CtUnaryOperator.class)))
     if (s.getKind().compareTo(UnaryOperatorKind.PREINC) >= 0) {
       s.setParent(null);
       opBlock.addStatement(s);
       s.setParent(opBlock);
     }
   element.replace(opBlock);
 }
 /**
  * Indicates that contains operation assignment over variables non local to the element
  *
  * @param element
  * @return
  */
 private boolean containNonLocalOperatorAssignment(CtElement element) {
   // Handling operators assignment
   for (CtOperatorAssignment op :
       element.getElements(new TypeFilter<CtOperatorAssignment>(CtOperatorAssignment.class))) {
     for (CtVariableAccess a : accessOfExpression(op.getAssigned())) {
       // Add cyclic dependencies
       if (!declaredInsideBlock.contains(a.getVariable())) return true;
     }
   }
   return false;
 }
 /**
  * Indicates if the element contains unary operators acting on variables declared outside the
  * block being degraded
  *
  * @param element Element to inspect
  * @return True if contains
  */
 private boolean containsNonLocalUnaryOperators(CtElement element) {
   // Handling unary operators
   for (CtUnaryOperator op :
       element.getElements(new TypeFilter<CtUnaryOperator>(CtUnaryOperator.class))) {
     for (CtVariableAccess a : accessOfExpression(op)) {
       // We don't care about cyclic dependencies to vars declared inside the block being degraded
       if (!declaredInsideBlock.contains(a.getVariable())) return true;
     }
   }
   return false;
 }