private VariableRestriction() { }
public static VariableContextEntry createContextEntry(InternalReadAccessor fieldExtractor,
Declaration declaration,
Evaluator evaluator) {
ValueType coerced = evaluator.getCoercedValueType();
if ( evaluator.isTemporal() ) {
if ( evaluator instanceof BeforeEvaluator || evaluator instanceof MeetsEvaluator) {
return new LeftStartRightEndContextEntry( fieldExtractor,
declaration,
evaluator );
}
if ( evaluator instanceof AfterEvaluator || evaluator instanceof MetByEvaluator ) {
return new LeftEndRightStartContextEntry( fieldExtractor,
declaration,
evaluator );
}
// else
return new TemporalVariableContextEntry( fieldExtractor,
declaration,
evaluator );
}
if ( coerced.isBoolean() ) {
return new BooleanVariableContextEntry( fieldExtractor,
declaration,
evaluator );
} else if ( coerced.isFloatNumber() ) {
return new DoubleVariableContextEntry( fieldExtractor,
declaration,
evaluator );
} else if ( coerced.isIntegerNumber() || coerced.isEvent() ) {
return new LongVariableContextEntry( fieldExtractor,
declaration,
evaluator );
} else if ( coerced.isChar() ) {
return new CharVariableContextEntry( fieldExtractor,
declaration,
evaluator );
} else {
return new ObjectVariableContextEntry( fieldExtractor,