@Julien I looked some more into moving those methods to MapReduceOper and getAlias is pretty straightforward but getPigFeature poses more issues.
Currently MapReduceOper has a private OPER_FEATURE enum that it sets internally and uses to answer a dozen or so isFoo methods (i.e. isSampler isGroupBy). ScriptState.getPigFeature calls those MapReduceOper.isFoo methods to then map to a package-private PIG_FEATURE enum.
If we moved getPigFeature into MapReduceOper we'd probably want to move PIG_FEATURE with it and we'd need to make it public. We'd then have a private OPER_FEATURE and a public PIG_FEATURE in the same class, along with a getPigFeature method and a bunch of isFoo methods. I worry we'd make the MapReduceOper API and it's implementation more confusing, without a significant refactoring. (Or a counter-argument could be made that it's simplifying because we won't have feature logic in two class in two packages. Once class gets more confusing, but logic gets centralized.)