ElementaryOperator extends Operator<Self> { @SuppressWarnings("unchecked") protected Class<? extends Function> getFunctionClass() { for (final Class<?> stubClass : this.getClass().getDeclaredClasses()) if ((stubClass.getModifiers() & Modifier.STATIC) != 0 && Function.class.isAssignableFrom(stubClass)) return (Class<? extends Function>) stubClass; return null; } ElementaryOperator();  ElementaryOperator(final int inputs);  ElementaryOperator(final int minInputs, final int maxInputs); @Override void appendAsString(final Appendable appendable); @Override ElementarySopremoModule asElementaryOperators(); PactModule asPactModule(); @Override boolean equals(final Object obj); Set<EvaluationExpression> getAllKeyExpressions(); @SuppressWarnings("unchecked") List<OrderingExpression> getInnerGroupOrder(final int inputIndex); @SuppressWarnings("unchecked") List<? extends EvaluationExpression> getKeyExpressions(final int inputIndex); EvaluationExpression getResultProjection(); @Override int hashCode(); boolean isCombinable(); boolean isCombinableFirst(); boolean isCombinableSecond(); void setCombinable(final boolean combinable); void setCombinableFirst(final boolean combinableFirst); void setCombinableSecond(final boolean combinableSecond); void setInnerGroupOrder(final int inputIndex, final List<OrderingExpression> innerGroupOrder); void setInnerGroupOrder(final int inputIndex, final OrderingExpression... innerGroupOrder); void setKeyExpressions(final int index, final EvaluationExpression... keyExpressions); void setKeyExpressions(final int inputIndex,
			final List<? extends EvaluationExpression> keyExpressions); @Property @Name(preposition = "into") void setResultProjection(final EvaluationExpression resultProjection); Self withCombinable(final boolean combinable); Self withCombinableFirst(final boolean combinableFirst); void withCombinableSecond(final boolean combinableSecond); Self withInnerGroupOrdering(final int index, final List<OrderingExpression> innerGroupOrder); Self withInnerGroupOrdering(final int index, final OrderingExpression... innerGroupOrder); Self withKeyExpression(final int index, final EvaluationExpression... keyExpressions); Self withKeyExpressions(final int index, final List<? extends EvaluationExpression> keyExpressions); Self withResultProjection(final EvaluationExpression resultProjection);  }
@Test public void getFunctionClassShouldReturnNullIfNoFunction() { assertEquals(null, new OperatorWithNoFunctions().getFunctionClass()); }
@Test public void getFunctionClassShouldReturnTheFirstFunction() { final Class<? extends Function> stubClass = new OperatorWithTwoFunctions().getFunctionClass(); assertEquals(OperatorWithTwoFunctions.class, stubClass.getDeclaringClass()); assertTrue(Arrays.asList(OperatorWithTwoFunctions.Implementation1.class, OperatorWithTwoFunctions.Implementation2.class).contains(stubClass)); }
@Test public void getFunctionClassShouldReturnTheOnlyFunction() { assertEquals(OperatorWithOneFunction.Implementation.class, new OperatorWithOneFunction().getFunctionClass()); }