private String aggregate(AggregatedValue reference, PatternModelAcceptor<?> acceptor) throws SpecificationBuilderException { String resultVariableName = acceptor.createVirtualVariable(); PatternCall call = reference.getCall(); Pattern patternRef = call.getPatternRef(); List<String> variableNames = getVariableNames(call.getParameters(), acceptor); AggregatorExpression aggregator = reference.getAggregator(); if (aggregator instanceof CountAggregator) { acceptor.acceptPatternMatchCounter(variableNames, patternRef, resultVariableName); } else { throw new SpecificationBuilderException("Unsupported aggregator expression type {1} in pattern {2}.", new String[] { aggregator.eClass().getName(), patternFQN }, "Unsupported aggregator expression", pattern); } return resultVariableName; }
if (aggregatedValue.getAggregator() instanceof CountAggregator) { return EcorePackage.Literals.EINT;
/** * Contexts: * ValueReference returns AggregatedValue * AnnotationValueReference returns AggregatedValue * ComputationValue returns AggregatedValue * AggregatedValue returns AggregatedValue * * Constraint: * (aggregator=AggregatorExpression call=PatternCall) */ protected void sequence_AggregatedValue(ISerializationContext context, AggregatedValue semanticObject) { if (errorAcceptor != null) { if (transientValues.isValueTransient(semanticObject, PatternLanguagePackage.Literals.AGGREGATED_VALUE__AGGREGATOR) == ValueTransient.YES) errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, PatternLanguagePackage.Literals.AGGREGATED_VALUE__AGGREGATOR)); if (transientValues.isValueTransient(semanticObject, PatternLanguagePackage.Literals.AGGREGATED_VALUE__CALL) == ValueTransient.YES) errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, PatternLanguagePackage.Literals.AGGREGATED_VALUE__CALL)); } SequenceFeeder feeder = createSequencerFeeder(context, semanticObject); feeder.accept(grammarAccess.getAggregatedValueAccess().getAggregatorAggregatorExpressionParserRuleCall_1_0(), semanticObject.getAggregator()); feeder.accept(grammarAccess.getAggregatedValueAccess().getCallPatternCallParserRuleCall_2_0(), semanticObject.getCall()); feeder.finish(); }