private String eval(FunctionEvaluationValue eval, PatternModelAcceptor<?> acceptor) throws SpecificationBuilderException { String outputVariableName = acceptor.createVirtualVariable(); XExpression expression = eval.getExpression(); acceptor.acceptExpressionEvaluation(expression, outputVariableName); return outputVariableName; }
/** * This validator looks up all variables in the {@link FunctionEvaluationValue} and reports an error if one them is not an * {@link EDataType} instance. We do not allow arbitrary EMF elements in, so the checks are less likely to have * side-effects. */ @Check public void checkForWrongVariablesInXExpressions(FunctionEvaluationValue eval) { checkForWrongVariablesInXExpressionsInternal(eval.getExpression()); }
@Check(CheckType.NORMAL) public void checkForImpureJavaCallsInEvalExpressions(FunctionEvaluationValue eval) { checkForImpureJavaCallsInternal(eval.getExpression(), PatternLanguagePackage.Literals.FUNCTION_EVALUATION_VALUE__EXPRESSION); }
/** * @param valueReference * @return all variables from the ValueReference object. (Either referenced directly, or referenced throught an * AggregatedValue.) */ public static Set<Variable> getVariablesFromValueReference(ValueReference valueReference) { Set<Variable> resultSet = new HashSet<Variable>(); if (valueReference != null) { if (valueReference instanceof VariableValue) { resultSet.add(((VariableValue) valueReference).getValue().getVariable()); } else if (valueReference instanceof AggregatedValue) { AggregatedValue aggregatedValue = (AggregatedValue) valueReference; for (ValueReference valueReferenceInner : aggregatedValue.getCall().getParameters()) { for (Variable variable : getVariablesFromValueReference(valueReferenceInner)) { resultSet.add(variable); } } } else if (valueReference instanceof FunctionEvaluationValue) { FunctionEvaluationValue eval = (FunctionEvaluationValue) valueReference; final List<Variable> usedVariables = CorePatternLanguageHelper.getUsedVariables(eval.getExpression(), containerPatternBody(eval).getVariables()); resultSet.addAll(usedVariables); } } return resultSet; }
CorePatternLanguageHelper.getUsedVariables(eval.getExpression(), containerPatternBody(eval).getVariables()); if (!onlyFromAggregatedValues) {
/** * Contexts: * ValueReference returns FunctionEvaluationValue * AnnotationValueReference returns FunctionEvaluationValue * ComputationValue returns FunctionEvaluationValue * FunctionEvaluationValue returns FunctionEvaluationValue * * Constraint: * expression=XExpression */ protected void sequence_FunctionEvaluationValue(ISerializationContext context, FunctionEvaluationValue semanticObject) { if (errorAcceptor != null) { if (transientValues.isValueTransient(semanticObject, PatternLanguagePackage.Literals.FUNCTION_EVALUATION_VALUE__EXPRESSION) == ValueTransient.YES) errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, PatternLanguagePackage.Literals.FUNCTION_EVALUATION_VALUE__EXPRESSION)); } SequenceFeeder feeder = createSequencerFeeder(context, semanticObject); feeder.accept(grammarAccess.getFunctionEvaluationValueAccess().getExpressionXExpressionParserRuleCall_3_0(), semanticObject.getExpression()); feeder.finish(); }
final XExpression xExpression = eval.getExpression();