code: package it.unibz.inf.ontop.iq.node.impl;
  
  import com.google.common.collect.ImmutableSet;
  import it.unibz.inf.ontop.injection.IntermediateQueryFactory;
  import it.unibz.inf.ontop.iq.IQTree;
  import it.unibz.inf.ontop.iq.node.QueryModifierNode;
  import it.unibz.inf.ontop.iq.node.VariableNullability;
  import it.unibz.inf.ontop.model.term.ImmutableExpression;
  import it.unibz.inf.ontop.model.term.NonVariableTerm;
  import it.unibz.inf.ontop.model.term.Variable;
  import it.unibz.inf.ontop.substitution.ImmutableSubstitution;
  import it.unibz.inf.ontop.utils.VariableGenerator;
  
  
  public abstract class QueryModifierNodeImpl extends QueryNodeImpl implements QueryModifierNode {
  
      protected QueryModifierNodeImpl(IntermediateQueryFactory iqFactory) {
          super(iqFactory);
      }
  
      @Override
      public VariableNullability getVariableNullability(IQTree child) {
          return child.getVariableNullability();
      }
  
      @Override
      public boolean isConstructed(Variable variable, IQTree child) {
          return child.isConstructed(variable);
      }
  
      @Override
      public IQTree propagateDownConstraint(ImmutableExpression constraint, IQTree child, VariableGenerator variableGenerator) {
          return iqFactory.createUnaryIQTree(this, child.propagateDownConstraint(constraint, variableGenerator));
      }
  
      @Override
      public ImmutableSet<ImmutableSubstitution<NonVariableTerm>> getPossibleVariableDefinitions(IQTree child) {
          return child.getPossibleVariableDefinitions();
      }
  }
  