AadlBaParserVisitor.java
/**
* AADL-BA-FrontEnd
*
* Copyright © 2013 TELECOM ParisTech and CNRS
*
* TELECOM ParisTech/LTCI
*
* Authors: see AUTHORS
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the Eclipse Public License as published by Eclipse,
* either version 2.0 of the License, or (at your option) any later version.
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* Eclipse Public License for more details.
* You should have received a copy of the Eclipse Public License
* along with this program. If not, see
* https://www.eclipse.org/legal/epl-2.0/
*/
package org.osate.ba.parser;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.antlr.v4.runtime.CommonToken;
import org.antlr.v4.runtime.Token;
import org.antlr.v4.runtime.misc.NotNull;
import org.antlr.v4.runtime.tree.AbstractParseTreeVisitor;
import org.antlr.v4.runtime.tree.TerminalNode;
import org.eclipse.emf.common.util.BasicEList;
import org.eclipse.emf.common.util.URI;
import org.eclipse.emf.ecore.resource.Resource;
import org.eclipse.emf.ecore.resource.ResourceSet;
import org.eclipse.emf.ecore.resource.impl.ResourceSetImpl;
import org.osate.aadl2.Aadl2Factory;
import org.osate.aadl2.BooleanLiteral;
import org.osate.aadl2.ClassifierValue;
import org.osate.aadl2.IntegerLiteral;
import org.osate.aadl2.ListValue;
import org.osate.aadl2.ModalPropertyValue;
import org.osate.aadl2.ProcessorClassifier;
import org.osate.aadl2.PropertyAssociation;
import org.osate.aadl2.PropertyExpression;
import org.osate.aadl2.RangeValue;
import org.osate.aadl2.RealLiteral;
import org.osate.aadl2.RecordValue;
import org.osate.aadl2.ReferenceValue;
import org.osate.aadl2.StringLiteral;
import org.osate.aadl2.parsesupport.AObject;
import org.osate.ba.aadlba.AadlBaFactory;
import org.osate.ba.aadlba.Any;
import org.osate.ba.aadlba.BasicPropertyHolder;
import org.osate.ba.aadlba.BehaviorActionCollection;
import org.osate.ba.aadlba.BehaviorActions;
import org.osate.ba.aadlba.BehaviorAnnex;
import org.osate.ba.aadlba.BehaviorBooleanLiteral;
import org.osate.ba.aadlba.BehaviorIntegerLiteral;
import org.osate.ba.aadlba.BehaviorPropertyConstant;
import org.osate.ba.aadlba.BehaviorRealLiteral;
import org.osate.ba.aadlba.BehaviorState;
import org.osate.ba.aadlba.BehaviorStringLiteral;
import org.osate.ba.aadlba.BehaviorVariableHolder;
import org.osate.ba.aadlba.BinaryAddingOperator;
import org.osate.ba.aadlba.BinaryNumericOperator;
import org.osate.ba.aadlba.ClassifierFeatureHolder;
import org.osate.ba.aadlba.ClassifierFeaturePropertyReference;
import org.osate.ba.aadlba.ClassifierPropertyReference;
import org.osate.ba.aadlba.DataAccessHolder;
import org.osate.ba.aadlba.DataAccessPrototypeHolder;
import org.osate.ba.aadlba.DataPortHolder;
import org.osate.ba.aadlba.DataSubcomponentHolder;
import org.osate.ba.aadlba.ElementHolder;
import org.osate.ba.aadlba.ElseStatement;
import org.osate.ba.aadlba.EnumLiteralHolder;
import org.osate.ba.aadlba.EventDataPortHolder;
import org.osate.ba.aadlba.EventPortHolder;
import org.osate.ba.aadlba.Factor;
import org.osate.ba.aadlba.FeatureHolder;
import org.osate.ba.aadlba.FeaturePrototypeHolder;
import org.osate.ba.aadlba.IfStatement;
import org.osate.ba.aadlba.IntegerValue;
import org.osate.ba.aadlba.IterativeVariable;
import org.osate.ba.aadlba.LogicalOperator;
import org.osate.ba.aadlba.LowerBound;
import org.osate.ba.aadlba.MultiplyingOperator;
import org.osate.ba.aadlba.ParameterHolder;
import org.osate.ba.aadlba.ParameterLabel;
import org.osate.ba.aadlba.PortPrototypeHolder;
import org.osate.ba.aadlba.PropertyAssociationHolder;
import org.osate.ba.aadlba.PropertyElementHolder;
import org.osate.ba.aadlba.PropertyExpressionHolder;
import org.osate.ba.aadlba.PropertyNameField;
import org.osate.ba.aadlba.PropertyNameHolder;
import org.osate.ba.aadlba.PropertyReference;
import org.osate.ba.aadlba.PropertySetPropertyReference;
import org.osate.ba.aadlba.PropertyTypeHolder;
import org.osate.ba.aadlba.PrototypeHolder;
import org.osate.ba.aadlba.Relation;
import org.osate.ba.aadlba.RelationalOperator;
import org.osate.ba.aadlba.SubcomponentHolder;
import org.osate.ba.aadlba.SubprogramAccessHolder;
import org.osate.ba.aadlba.SubprogramPrototypeHolder;
import org.osate.ba.aadlba.SubprogramSubcomponentHolder;
import org.osate.ba.aadlba.Term;
import org.osate.ba.aadlba.UnaryAddingOperator;
import org.osate.ba.aadlba.UnaryBooleanOperator;
import org.osate.ba.aadlba.UnaryNumericOperator;
import org.osate.ba.aadlba.UpperBound;
import org.osate.ba.aadlba.Value;
import org.osate.ba.aadlba.ValueConstant;
import org.osate.ba.declarative.DeclarativeArrayDimension;
import org.osate.ba.declarative.DeclarativeBehaviorAnnex;
import org.osate.ba.declarative.DeclarativeClassifierValue;
import org.osate.ba.declarative.DeclarativeFactory;
import org.osate.ba.declarative.DeclarativePropertyExpression;
import org.osate.ba.declarative.DeclarativePropertyName;
import org.osate.ba.declarative.DeclarativePropertyReference;
import org.osate.ba.declarative.DeclarativeReferenceValue;
import org.osate.ba.declarative.Identifier;
import org.osate.ba.declarative.NamedValue;
import org.osate.ba.declarative.QualifiedNamedElement;
import org.osate.ba.declarative.Reference;
import org.osate.ba.parser.AadlBaParser.Array_identifierContext;
import org.osate.ba.parser.AadlBaParser.Behavior_actionContext;
import org.osate.ba.parser.AadlBaParser.Behavior_state_listContext;
import org.osate.ba.parser.AadlBaParser.Behavior_transitionContext;
import org.osate.ba.parser.AadlBaParser.Behavior_variableContext;
import org.osate.ba.parser.AadlBaParser.Behavior_variable_listContext;
import org.osate.ba.parser.AadlBaParser.Binary_adding_operatorContext;
import org.osate.ba.parser.AadlBaParser.Boolean_property_valueContext;
import org.osate.ba.parser.AadlBaParser.Classifier_property_valueContext;
import org.osate.ba.parser.AadlBaParser.Data_classifier_property_associationContext;
import org.osate.ba.parser.AadlBaParser.Dispatch_conjunctionContext;
import org.osate.ba.parser.AadlBaParser.Elsif_statementContext;
import org.osate.ba.parser.AadlBaParser.FactorContext;
import org.osate.ba.parser.AadlBaParser.Field_property_associationContext;
import org.osate.ba.parser.AadlBaParser.In_bindingContext;
import org.osate.ba.parser.AadlBaParser.Integer_property_valueContext;
import org.osate.ba.parser.AadlBaParser.Integer_valueContext;
import org.osate.ba.parser.AadlBaParser.Integer_value_constantContext;
import org.osate.ba.parser.AadlBaParser.List_property_valueContext;
import org.osate.ba.parser.AadlBaParser.Logical_operatorContext;
import org.osate.ba.parser.AadlBaParser.Mode_switch_trigger_conjunctionContext;
import org.osate.ba.parser.AadlBaParser.Multiplying_operatorContext;
import org.osate.ba.parser.AadlBaParser.Numeric_property_valueContext;
import org.osate.ba.parser.AadlBaParser.Numeric_range_property_valueContext;
import org.osate.ba.parser.AadlBaParser.Parameter_labelContext;
import org.osate.ba.parser.AadlBaParser.Property_nameContext;
import org.osate.ba.parser.AadlBaParser.Property_refContext;
import org.osate.ba.parser.AadlBaParser.Property_referenceContext;
import org.osate.ba.parser.AadlBaParser.Property_valueContext;
import org.osate.ba.parser.AadlBaParser.Qualifiable_propertyContext;
import org.osate.ba.parser.AadlBaParser.Real_literalContext;
import org.osate.ba.parser.AadlBaParser.Real_property_valueContext;
import org.osate.ba.parser.AadlBaParser.Record_property_valueContext;
import org.osate.ba.parser.AadlBaParser.ReferenceContext;
import org.osate.ba.parser.AadlBaParser.Reference_property_valueContext;
import org.osate.ba.parser.AadlBaParser.RelationContext;
import org.osate.ba.parser.AadlBaParser.Signed_intContext;
import org.osate.ba.parser.AadlBaParser.Signed_realContext;
import org.osate.ba.parser.AadlBaParser.String_property_valueContext;
import org.osate.ba.parser.AadlBaParser.TermContext;
import org.osate.ba.parser.AadlBaParser.Unique_component_classifier_referenceContext;
import org.osate.ba.parser.AadlBaParser.Unit_referenceContext;
import org.osate.ba.parser.AadlBaParser.Value_constantContext;
import org.osate.ba.parser.AadlBaParser.Value_constant_or_variableContext;
import org.osate.ba.utils.AadlBaLocationReference;
/**
* This class provides an empty implementation of {@link AadlBaVisitor},
* which can be extended to create a visitor which only needs to handle a subset
* of the available methods.
*
* @param <T> The return type of the visit operation. Use {@link Void} for
* operations with no return type.
*/
public class AadlBaParserVisitor<T> extends AbstractParseTreeVisitor<T> implements AadlBaVisitor<T> {
protected BehaviorAnnex _ba = null;
private DeclarativeBehaviorAnnex _dba = null;
protected AadlBaFactory _baFact = AadlBaFactory.eINSTANCE;
protected Aadl2Factory _coreFact = Aadl2Factory.eINSTANCE;
protected DeclarativeFactory _decl = DeclarativeFactory.eINSTANCE;
protected String _filename;
protected final static String behaviorElementId = "";
protected int _annexOffset = 0;
public AadlBaParserVisitor(String filename, int annexOffset) {
_filename = filename;
_annexOffset = annexOffset;
}
/**
* Sets obj's location reference based on full token informations.
*
* @param obj the AObject to be set
* @param src the token
*/
protected void setLocationReference(AObject obj, Token token) {
int offset = ((CommonToken) token).getStartIndex();
int length = token.getText().length();
int column = token.getCharPositionInLine() + 1; // Zero index based.
int line = token.getLine();
AadlBaLocationReference location = new AadlBaLocationReference(_annexOffset, _filename, line, offset, length,
column, behaviorElementId);
obj.setLocationReference(location);
}
protected void setLocationReference(AObject obj, TerminalNode node) {
setLocationReference(obj, node.getSymbol());
}
public void setAnnexOffset(int offset) {
_annexOffset = offset;
}
/**
* {@inheritDoc}
* <p/>
* The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.
*/
@Override
public T visitNumeral(@NotNull AadlBaParser.NumeralContext ctx) {
String tmp = ctx.INTEGER_LIT().getText();
tmp = tmp.replaceAll("_", "");
ctx.result = new Integer(Integer.parseInt(tmp));
return null;
}
/**
* {@inheritDoc}
* <p/>
* The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.
*/
@Override
public T visitUnary_boolean_operator(@NotNull AadlBaParser.Unary_boolean_operatorContext ctx) {
ctx.result = UnaryBooleanOperator.NOT;
return null;
}
/**
* {@inheritDoc}
* <p/>
* The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.
*/
@Override
public T visitDispatch_condition(@NotNull AadlBaParser.Dispatch_conditionContext ctx) {
visitChildren(ctx);
// Location reference is set in behavior_condition
ctx.result = _baFact.createDispatchCondition();
if (ctx.dispatch_trigger_condition() != null) {
ctx.result.setDispatchTriggerCondition(ctx.dispatch_trigger_condition().result);
}
if (ctx.FROZEN() != null) {
for (ReferenceContext rc : ctx.reference()) {
ctx.result.getFrozenPorts().add(rc.result);
}
}
return null;
}
/**
* {@inheritDoc}
* <p/>
* The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.
*/
@Override
public T visitDispatch_conjunction(@NotNull AadlBaParser.Dispatch_conjunctionContext ctx) {
visitChildren(ctx);
ctx.result = _baFact.createDispatchConjunction();
ctx.result.setLocationReference(ctx.reference(0).result.getLocationReference());
for (ReferenceContext rc : ctx.reference()) {
ctx.result.getDispatchTriggers().add(rc.result);
}
return null;
}
/**
* {@inheritDoc}
* <p/>
* The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.
*/
@Override
public T visitDispatch_trigger_logical_expression(
@NotNull AadlBaParser.Dispatch_trigger_logical_expressionContext ctx) {
visitChildren(ctx);
ctx.result = _baFact.createDispatchTriggerLogicalExpression();
ctx.result.setLocationReference(ctx.dispatch_conjunction(0).result.getLocationReference());
for (Dispatch_conjunctionContext dcc : ctx.dispatch_conjunction()) {
ctx.result.getDispatchConjunctions().add(dcc.result);
}
return null;
}
/**
* {@inheritDoc}
* <p/>
* The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.
*/
@Override
public T visitFor_statement(@NotNull AadlBaParser.For_statementContext ctx) {
visitChildren(ctx);
ctx.result = ctx.for_condition().result;
ctx.result.setBehaviorActions(ctx.behavior_actions().result);
return null;
}
/**
* {@inheritDoc}
* <p/>
* The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.
*/
@Override
public T visitBehavior_variable_list(@NotNull AadlBaParser.Behavior_variable_listContext ctx) {
visitChildren(ctx);
_dba.getDeclarativeBehaviorElements().add(ctx.unique_component_classifier_reference().result);
List<Data_classifier_property_associationContext> dcpaList = ctx.data_classifier_property_association();
for (Behavior_variableContext bvc : ctx.behavior_variable()) {
bvc.result.setDataClassifier(ctx.unique_component_classifier_reference().result);
if (ctx.value_constant() != null) {
bvc.result.setOwnedValueConstant(cloneValueConstant(ctx.value_constant().result));
}
for (Data_classifier_property_associationContext dcpa : dcpaList) {
PropertyAssociation pa = _coreFact.createPropertyAssociation();
pa.setProperty(dcpa.property_ref().result);
ModalPropertyValue mpv = _coreFact.createModalPropertyValue();
mpv.setOwnedValue(clonePropertyExpression(dcpa.property_value().result));
pa.getOwnedValues().add(mpv);
bvc.result.getOwnedPropertyAssociations().add(pa);
}
ctx.ba.getVariables().add(bvc.result);
}
return null;
}
private ValueConstant cloneValueConstant(ValueConstant sourceValueConstant) {
ValueConstant targetValueConstant = null;
/*
* value_constant ::=
* boolean_literal
* | numeric_literal
* | string_literal
* | property_constant
* | property_reference
*/
if (sourceValueConstant instanceof BehaviorBooleanLiteral) {
BehaviorBooleanLiteral sourceBbl = (BehaviorBooleanLiteral) sourceValueConstant;
BehaviorBooleanLiteral targetBbl = _baFact.createBehaviorBooleanLiteral();
targetBbl.setValue(sourceBbl.getValue());
targetValueConstant = targetBbl;
} else if (sourceValueConstant instanceof BehaviorRealLiteral) {
BehaviorRealLiteral sourceBrl = (BehaviorRealLiteral) sourceValueConstant;
BehaviorRealLiteral targetBrl = _baFact.createBehaviorRealLiteral();
targetBrl.setValue(sourceBrl.getValue());
targetBrl.setUnit(sourceBrl.getUnit());
targetValueConstant = targetBrl;
} else if (sourceValueConstant instanceof BehaviorIntegerLiteral) {
BehaviorIntegerLiteral sourceIl = (BehaviorIntegerLiteral) sourceValueConstant;
BehaviorIntegerLiteral targetIl = _baFact.createBehaviorIntegerLiteral();
targetIl.setValue(sourceIl.getValue());
targetIl.setUnit(sourceIl.getUnit());
targetValueConstant = targetIl;
} else if (sourceValueConstant instanceof BehaviorStringLiteral) {
BehaviorStringLiteral sourceBsl = (BehaviorStringLiteral) sourceValueConstant;
BehaviorStringLiteral targetBsl = _baFact.createBehaviorStringLiteral();
targetBsl.setValue(sourceBsl.getValue());
targetValueConstant = targetBsl;
} else if (sourceValueConstant instanceof BehaviorPropertyConstant) {
BehaviorPropertyConstant sourceBpc = (BehaviorPropertyConstant) sourceValueConstant;
BehaviorPropertyConstant targetBpc = _baFact.createBehaviorPropertyConstant();
targetBpc.setProperty(sourceBpc.getProperty());
targetBpc.setPropertySet(sourceBpc.getPropertySet());
targetValueConstant = targetBpc;
} else if (sourceValueConstant instanceof PropertyReference) {
PropertyReference sourcePr = (PropertyReference) sourceValueConstant;
List<PropertyNameHolder> sourceProperties = sourcePr.getProperties();
if (sourceValueConstant instanceof ClassifierFeaturePropertyReference) {
ClassifierFeaturePropertyReference sourceCfpr = (ClassifierFeaturePropertyReference) sourceValueConstant;
ClassifierFeaturePropertyReference targetCfpr = _baFact.createClassifierFeaturePropertyReference();
targetCfpr.setComponent((ClassifierFeatureHolder) cloneHolder(sourceCfpr.getComponent()));
targetCfpr.getProperties().addAll(clonePropertyNameHolderList(sourceProperties));
targetValueConstant = targetCfpr;
} else if (sourceValueConstant instanceof ClassifierPropertyReference) {
ClassifierPropertyReference sourceCpr = (ClassifierPropertyReference) sourceValueConstant;
ClassifierPropertyReference targetCpr = _baFact.createClassifierPropertyReference();
targetCpr.setClassifier(sourceCpr.getClassifier());
targetCpr.getProperties().addAll(clonePropertyNameHolderList(sourceProperties));
targetValueConstant = targetCpr;
} else if (sourceValueConstant instanceof PropertySetPropertyReference) {
PropertySetPropertyReference sourcePspr = (PropertySetPropertyReference) sourceValueConstant;
PropertySetPropertyReference targetPspr = _baFact.createPropertySetPropertyReference();
targetPspr.setPropertySet(sourcePspr.getPropertySet());
targetPspr.getProperties().addAll(clonePropertyNameHolderList(sourceProperties));
targetValueConstant = targetPspr;
}
}
targetValueConstant.setLocationReference(sourceValueConstant.getLocationReference());
return targetValueConstant;
}
private List<PropertyNameHolder> clonePropertyNameHolderList(List<PropertyNameHolder> sourceProperties) {
List<PropertyNameHolder> result = new ArrayList<PropertyNameHolder>();
for (PropertyNameHolder pnh : sourceProperties) {
result.add(clonePropertyNameHolder(pnh));
}
return result;
}
private PropertyNameHolder clonePropertyNameHolder(PropertyNameHolder pnh) {
PropertyNameHolder result = _baFact.createPropertyNameHolder();
if (pnh.isSetField()) {
result.setField(clonePropertyNameField(pnh.getField()));
}
result.setProperty(clonePropertyNameHolder(pnh.getProperty()));
return result;
}
private PropertyNameField clonePropertyNameField(PropertyNameField field) {
PropertyNameField result = null;
if (field instanceof LowerBound) {
result = _baFact.createLowerBound();
} else if (field instanceof UpperBound) {
result = _baFact.createUpperBound();
}
result.setLocationReference(field.getLocationReference());
return result;
}
private PropertyElementHolder clonePropertyNameHolder(PropertyElementHolder sourcePeh) {
PropertyElementHolder result = null;
// BasicPropertyHolder
if (sourcePeh instanceof BasicPropertyHolder) {
result = _baFact.createBasicPropertyHolder();
} else if (sourcePeh instanceof EnumLiteralHolder) {
result = _baFact.createEnumLiteralHolder();
} else if (sourcePeh instanceof PropertyAssociationHolder) {
result = _baFact.createPropertyAssociationHolder();
} else if (sourcePeh instanceof PropertyExpressionHolder) {
result = _baFact.createPropertyExpressionHolder();
} else if (sourcePeh instanceof PropertyTypeHolder) {
result = _baFact.createPropertyTypeHolder();
}
result.setElement(sourcePeh.getElement());
result.setLocationReference(sourcePeh.getLocationReference());
return result;
}
private ElementHolder cloneHolder(ElementHolder sourceElementHolder) {
ElementHolder targetElementHolder = null;
if (sourceElementHolder instanceof ClassifierFeatureHolder) {
ClassifierFeatureHolder sourceCfh = (ClassifierFeatureHolder) sourceElementHolder;
if (sourceElementHolder instanceof BehaviorVariableHolder) {
// BehaviorVariableHolder
targetElementHolder = _baFact.createBehaviorVariableHolder();
} else if (sourceElementHolder instanceof FeatureHolder) {
FeatureHolder sourceFeatureHolder = (FeatureHolder) sourceElementHolder;
// FeatureHolder
if (sourceFeatureHolder instanceof DataAccessHolder) {
// DataAccessHolder
targetElementHolder = _baFact.createDataAccessHolder();
} else if (sourceFeatureHolder instanceof ParameterHolder) {
// ParameterHolder
targetElementHolder = _baFact.createParameterHolder();
} else if (sourceFeatureHolder instanceof DataPortHolder) {
targetElementHolder = _baFact.createDataPortHolder();
} else if (sourceFeatureHolder instanceof EventDataPortHolder) {
targetElementHolder = _baFact.createEventDataPortHolder();
} else if (sourceFeatureHolder instanceof EventPortHolder) {
targetElementHolder = _baFact.createEventPortHolder();
} else if (sourceFeatureHolder instanceof SubprogramAccessHolder) {
targetElementHolder = _baFact.createSubprogramAccessHolder();
}
}
// PrototypeHolder
else if (sourceElementHolder instanceof PrototypeHolder) {
// DataAccessPrototypeHolder
if (sourceElementHolder instanceof DataAccessPrototypeHolder) {
targetElementHolder = _baFact.createDataAccessPrototypeHolder();
} else if (sourceElementHolder instanceof FeaturePrototypeHolder) {
targetElementHolder = _baFact.createFeaturePrototypeHolder();
} else if (sourceElementHolder instanceof PortPrototypeHolder) {
targetElementHolder = _baFact.createPortPrototypeHolder();
} else if (sourceElementHolder instanceof SubprogramPrototypeHolder) {
targetElementHolder = _baFact.createSubprogramPrototypeHolder();
}
}
// SubcomponentHolder
else if (sourceElementHolder instanceof SubcomponentHolder) {
// DataSubcomponentHolder
if (sourceElementHolder instanceof DataSubcomponentHolder) {
targetElementHolder = _baFact.createDataSubcomponentHolder();
} else if (sourceElementHolder instanceof SubprogramSubcomponentHolder) {
targetElementHolder = _baFact.createSubprogramSubcomponentHolder();
}
}
ClassifierFeatureHolder targetCfh = (ClassifierFeatureHolder) targetElementHolder;
targetCfh.setClassifierFeature(sourceCfh.getClassifierFeature());
}
if (targetElementHolder != null) {
targetElementHolder.setElement(sourceElementHolder.getElement());
}
return targetElementHolder;
}
private PropertyExpression clonePropertyExpression(PropertyExpression sourcePropertyExpression) {
PropertyExpression targetPropertyExpression = null;
if (sourcePropertyExpression instanceof ListValue) {
ListValue sourceLV = (ListValue) sourcePropertyExpression;
ListValue targetLV = _coreFact.createListValue();
for (PropertyExpression propInList : sourceLV.getOwnedListElements()) {
targetLV.getOwnedListElements().add(clonePropertyExpression(propInList));
}
targetPropertyExpression = targetLV;
} else if (sourcePropertyExpression instanceof StringLiteral) {
StringLiteral sourceSL = (StringLiteral) sourcePropertyExpression;
StringLiteral targetSL = _coreFact.createStringLiteral();
targetSL.setValue(sourceSL.getValue());
targetPropertyExpression = targetSL;
} else if (sourcePropertyExpression instanceof IntegerLiteral) {
IntegerLiteral sourceIL = (IntegerLiteral) sourcePropertyExpression;
IntegerLiteral targetIL = _coreFact.createIntegerLiteral();
targetIL.setValue(sourceIL.getValue());
targetIL.setUnit(sourceIL.getUnit());
targetPropertyExpression = targetIL;
} else if (sourcePropertyExpression instanceof RealLiteral) {
RealLiteral sourceRL = (RealLiteral) sourcePropertyExpression;
RealLiteral targetRL = _coreFact.createRealLiteral();
targetRL.setValue(sourceRL.getValue());
targetRL.setUnit(sourceRL.getUnit());
targetPropertyExpression = targetRL;
} else if (sourcePropertyExpression instanceof RecordValue) {
RecordValue sourceRV = (RecordValue) sourcePropertyExpression;
RecordValue targetRV = _coreFact.createRecordValue();
targetRV.getOwnedFieldValues().addAll(sourceRV.getOwnedFieldValues());
targetPropertyExpression = targetRV;
} else if (sourcePropertyExpression instanceof BooleanLiteral) {
BooleanLiteral sourceBL = (BooleanLiteral) sourcePropertyExpression;
BooleanLiteral targetBL = _coreFact.createBooleanLiteral();
targetBL.setValue(sourceBL.getValue());
targetPropertyExpression = targetBL;
} else if (sourcePropertyExpression instanceof RangeValue) {
RangeValue sourceRV = (RangeValue) sourcePropertyExpression;
RangeValue targetRV = _coreFact.createRangeValue();
targetRV.setMinimum(clonePropertyExpression(sourceRV.getMinimum()));
targetRV.setMaximum(clonePropertyExpression(sourceRV.getMaximum()));
targetPropertyExpression = targetRV;
} else if (sourcePropertyExpression instanceof DeclarativeReferenceValue) {
DeclarativeReferenceValue sourceDRV = (DeclarativeReferenceValue) sourcePropertyExpression;
ReferenceValue targetRV = _coreFact.createReferenceValue();
targetRV.setPath(sourceDRV.getRef());
targetPropertyExpression = targetRV;
} else if (sourcePropertyExpression instanceof DeclarativeClassifierValue) {
DeclarativeClassifierValue sourceDCV = (DeclarativeClassifierValue) sourcePropertyExpression;
ClassifierValue targetCV = _coreFact.createClassifierValue();
targetCV.setClassifier(sourceDCV.getClassifier());
targetPropertyExpression = targetCV;
}
return targetPropertyExpression;
}
/**
* {@inheritDoc}
* <p/>
* The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.
*/
@Override
public T visitParameter_label(@NotNull AadlBaParser.Parameter_labelContext ctx) {
visitChildren(ctx);
ctx.result = ctx.value_expression().result;
return null;
}
/**
* {@inheritDoc}
* <p/>
* The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.
*/
@Override
public T visitRelation(@NotNull AadlBaParser.RelationContext ctx) {
visitChildren(ctx);
ctx.result = _baFact.createRelation();
ctx.result.setFirstExpression(ctx.simple_expression(0).result);
ctx.result.setLocationReference(ctx.simple_expression(0).result.getLocationReference());
if (ctx.relational_operator() != null) {
ctx.result.setRelationalOperator(ctx.relational_operator().result);
ctx.result.setSecondExpression(ctx.simple_expression(1).result);
}
return null;
}
/**
* {@inheritDoc}
* <p/>
* The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.
*/
@Override
public T visitBinary_numeric_operator(@NotNull AadlBaParser.Binary_numeric_operatorContext ctx) {
ctx.result = BinaryNumericOperator.MULTIPLY_MULTIPLY;
return null;
}
/**
* {@inheritDoc}
* <p/>
* The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.
*/
@Override
public T visitSubprogram_parameter_list(@NotNull AadlBaParser.Subprogram_parameter_listContext ctx) {
visitChildren(ctx);
ctx.result = new BasicEList<ParameterLabel>();
for (Parameter_labelContext plc : ctx.parameter_label()) {
ctx.result.add(plc.result);
}
return null;
}
/**
* {@inheritDoc}
* <p/>
* The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.
*/
@Override
public T visitMultiplying_operator(@NotNull AadlBaParser.Multiplying_operatorContext ctx) {
if (ctx.STAR() != null) {
ctx.result = MultiplyingOperator.MULTIPLY;
} else if (ctx.DIVIDE() != null) {
ctx.result = MultiplyingOperator.DIVIDE;
} else if (ctx.MOD() != null) {
ctx.result = MultiplyingOperator.MOD;
} else {
ctx.result = MultiplyingOperator.REM;
}
return null;
}
/**
* {@inheritDoc}
* <p/>
* The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.
*/
@Override
public T visitDispatch_trigger_condition(@NotNull AadlBaParser.Dispatch_trigger_conditionContext ctx) {
visitChildren(ctx);
if (ctx.dispatch_trigger_logical_expression() != null) {
ctx.result = ctx.dispatch_trigger_logical_expression().result;
} else if (ctx.TIMEOUT() != null) {
if (ctx.behavior_time() != null) {
ctx.result = ctx.behavior_time().result;
} else {
ctx.result = _baFact.createDispatchRelativeTimeout();
setLocationReference(ctx.result, ctx.TIMEOUT());
}
} else {
ctx.result = _baFact.createDispatchTriggerConditionStop();
setLocationReference(ctx.result, ctx.STOP());
}
return null;
}
/**
* {@inheritDoc}
* <p/>
* The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.
*/
@Override
public T visitBinary_adding_operator(@NotNull AadlBaParser.Binary_adding_operatorContext ctx) {
if (ctx.PLUS() != null) {
ctx.result = BinaryAddingOperator.PLUS;
} else {
ctx.result = BinaryAddingOperator.MINUS;
}
return null;
}
/**
* {@inheritDoc}
* <p/>
* The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.
*/
@Override
public T visitBehavior_action(@NotNull AadlBaParser.Behavior_actionContext ctx) {
visitChildren(ctx);
if (ctx.basic_action() != null) {
ctx.result = ctx.basic_action().result;
} else if (ctx.if_statement() != null) {
ctx.result = ctx.if_statement().result;
} else if (ctx.for_statement() != null) {
ctx.result = ctx.for_statement().result;
} else if (ctx.while_statement() != null) {
ctx.result = ctx.while_statement().result;
} else if (ctx.dountil_statement() != null) {
ctx.result = ctx.dountil_statement().result;
} else if (ctx.behavior_action_block() != null) {
ctx.result = ctx.behavior_action_block().result;
} else {
ctx.result = ctx.forall_statement().result;
}
return null;
}
/**
* {@inheritDoc}
* <p/>
* The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.
*/
@Override
public T visitAssignment_action(@NotNull AadlBaParser.Assignment_actionContext ctx) {
visitChildren(ctx);
ctx.result = _baFact.createAssignmentAction();
ctx.result.setLocationReference(ctx.target().result.getLocationReference());
ctx.result.setTarget(ctx.target().result);
if (ctx.value_expression() != null) {
ctx.result.setValueExpression(ctx.value_expression().result);
} else {
Any any = _baFact.createAny();
setLocationReference(any, ctx.ANY());
ctx.result.setValueExpression(any);
}
return null;
}
/**
* {@inheritDoc}
* <p/>
* The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.
*/
@Override
public T visitLogical_operator(@NotNull AadlBaParser.Logical_operatorContext ctx) {
if (ctx.AND() != null) {
ctx.result = LogicalOperator.AND;
} else if (ctx.OR() != null) {
ctx.result = LogicalOperator.OR;
} else {
ctx.result = LogicalOperator.XOR;
}
return null;
}
/**
* {@inheritDoc}
* <p/>
* The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.
*/
@Override
public T visitCommunication_action(@NotNull AadlBaParser.Communication_actionContext ctx) {
visitChildren(ctx);
ctx.result = _decl.createCommAction();
_dba.getDeclarativeBehaviorElements().add(ctx.result);
if (ctx.reference() != null) {
_dba.getDeclarativeBehaviorElements().add(ctx.result);
ctx.result.setReference(ctx.reference().result);
ctx.result.setLocationReference(ctx.reference().result.getLocationReference());
if (ctx.INTERROG() != null) {
ctx.result.setPortDequeue(true);
if (ctx.target() != null) {
ctx.result.setTarget(ctx.target().result);
}
} else if (ctx.GGREATER() != null) {
ctx.result.setPortFreeze(true);
} else if (ctx.EXCLLESS() != null) {
ctx.result.setLock(true);
} else if (ctx.EXCLGREATER() != null) {
ctx.result.setUnlock(true);
} else {
if (ctx.subprogram_parameter_list() != null) {
ctx.result.getParameters().addAll(ctx.subprogram_parameter_list().result);
}
}
} else if (ctx.qualified_named_element() != null) {
ctx.result.setLocationReference(ctx.qualified_named_element().result.getLocationReference());
ctx.result.setQualifiedName(ctx.qualified_named_element().result);
if (ctx.subprogram_parameter_list() != null) {
ctx.result.getParameters().addAll(ctx.subprogram_parameter_list().result);
}
} else {
if (ctx.EXCLLESS() != null) {
ctx.result.setLock(true);
} else {
ctx.result.setUnlock(true);
}
setLocationReference(ctx.result, ctx.STAR());
}
return null;
}
/**
* {@inheritDoc}
* <p/>
* The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.
*/
@Override
public T visitBehavior_action_block(@NotNull AadlBaParser.Behavior_action_blockContext ctx) {
visitChildren(ctx);
ctx.result = ctx.action_block().result;
if (ctx.TIMEOUT() != null) {
ctx.result.setTimeout(ctx.behavior_time().result);
}
return null;
}
/**
* {@inheritDoc}
* <p/>
* The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.
*/
@Override
public T visitValue_variable(@NotNull AadlBaParser.Value_variableContext ctx) {
visitChildren(ctx);
Reference tmp = ctx.reference().result;
if (ctx.TICK() != null) {
if (ctx.COUNT() != null) {
NamedValue nv = _decl.createNamedValue();
_dba.getDeclarativeBehaviorElements().add(nv);
nv.setReference(tmp);
nv.setCount(true);
nv.setLocationReference(tmp.getLocationReference());
ctx.result = nv;
} else {
NamedValue nv = _decl.createNamedValue();
_dba.getDeclarativeBehaviorElements().add(nv);
nv.setReference(tmp);
nv.setFresh(true);
nv.setLocationReference(tmp.getLocationReference());
ctx.result = nv;
}
} else if (ctx.INTERROG() != null) {
NamedValue nv = _decl.createNamedValue();
_dba.getDeclarativeBehaviorElements().add(nv);
nv.setReference(tmp);
nv.setDequeue(true);
nv.setLocationReference(tmp.getLocationReference());
ctx.result = nv;
} else {
ctx.result = tmp;
}
return null;
}
/**
* {@inheritDoc}
* <p/>
* The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.
*/
@Override
public T visitQualifiable_named_element(@NotNull AadlBaParser.Qualifiable_named_elementContext ctx) {
Identifier nameId = _decl.createIdentifier();
_dba.getDeclarativeBehaviorElements().add(nameId);
nameId.setId(ctx.id2);
setLocationReference(nameId, ctx.identifier2);
ctx.result.setBaName(nameId);
if (!ctx.id1.equals("")) {
Identifier nameSpaceId = _decl.createIdentifier();
_dba.getDeclarativeBehaviorElements().add(nameSpaceId);
nameSpaceId.setId(ctx.id1);
setLocationReference(nameSpaceId, ctx.identifier1);
ctx.result.setBaNamespace(nameSpaceId);
setLocationReference(ctx.result, ctx.identifier1);
} else {
setLocationReference(ctx.result, ctx.identifier2);
}
return null;
}
/**
* {@inheritDoc}
* <p/>
* The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.
*/
@Override
public T visitInteger_literal(@NotNull AadlBaParser.Integer_literalContext ctx) {
String str = ctx.INTEGER_LIT().getText();
BehaviorIntegerLiteral tmp = _baFact.createBehaviorIntegerLiteral();
tmp.setValue(str);
setLocationReference(tmp, ctx.INTEGER_LIT());
ctx.result = tmp;
return null;
}
/**
* {@inheritDoc}
* <p/>
* The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.
*/
@Override
public T visitString_literal(@NotNull AadlBaParser.String_literalContext ctx) {
ctx.result = _baFact.createBehaviorStringLiteral();
String str = ctx.STRING_LITERAL().getText();
// stripout the quotes
ctx.result.setValue(str.substring(1, str.length() - 1));
setLocationReference(ctx.result, ctx.STRING_LITERAL());
return null;
}
/**
* {@inheritDoc}
* <p/>
* The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.
*/
@Override
public T visitUnary_numeric_operator(@NotNull AadlBaParser.Unary_numeric_operatorContext ctx) {
ctx.result = UnaryNumericOperator.ABS;
return null;
}
/**
* {@inheritDoc}
* <p/>
* The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.
*/
@Override
public T visitQualified_named_element(@NotNull AadlBaParser.Qualified_named_elementContext ctx) {
ctx.result = _decl.createQualifiedNamedElement();
_dba.getDeclarativeBehaviorElements().add(ctx.result);
Identifier nameId = _decl.createIdentifier();
_dba.getDeclarativeBehaviorElements().add(nameId);
nameId.setId(ctx.nameId);
setLocationReference(nameId, ctx.id2);
ctx.result.setBaName(nameId);
if (ctx.id1 != null) {
Identifier nameSpaceId = _decl.createIdentifier();
_dba.getDeclarativeBehaviorElements().add(nameSpaceId);
nameSpaceId.setId(ctx.namespaceId);
setLocationReference(nameSpaceId, ctx.id1);
ctx.result.setBaNamespace(nameSpaceId);
setLocationReference(ctx.result, ctx.id1);
} else {
setLocationReference(ctx.result, ctx.id2);
}
return null;
}
/**
* {@inheritDoc}
* <p/>
* The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.
*/
@Override
public T visitBoolean_literal(@NotNull AadlBaParser.Boolean_literalContext ctx) {
ctx.result = _baFact.createBehaviorBooleanLiteral();
TerminalNode node = null;
if (ctx.TRUE() != null) {
ctx.result.setValue(true);
node = ctx.TRUE();
} else {
ctx.result.setValue(false);
node = ctx.FALSE();
}
setLocationReference(ctx.result, node);
return null;
}
/**
* {@inheritDoc}
* <p/>
* The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.
*/
@Override
public T visitAction_block(@NotNull AadlBaParser.Action_blockContext ctx) {
visitChildren(ctx);
ctx.result = _baFact.createBehaviorActionBlock();
ctx.result.setContent(ctx.behavior_actions().result);
setLocationReference(ctx.result, ctx.LCURLY(0));
return null;
}
/**
* {@inheritDoc}
* <p/>
* The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.
*/
@Override
public T visitDountil_statement(@NotNull AadlBaParser.Dountil_statementContext ctx) {
visitChildren(ctx);
ctx.result = _baFact.createWhileOrDoUntilStatement();
setLocationReference(ctx.result, ctx.DO());
ctx.result.setDoUntil(true);
ctx.result.setBehaviorActions(ctx.behavior_actions().result);
ctx.result.setLogicalValueExpression(ctx.value_expression().result);
return null;
}
/**
* {@inheritDoc}
* <p/>
* The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.
*/
@Override
public T visitArray_identifier(@NotNull AadlBaParser.Array_identifierContext ctx) {
visitChildren(ctx);
ctx.result = _decl.createArrayableIdentifier();
_dba.getDeclarativeBehaviorElements().add(ctx.result);
ctx.result.setId(ctx.IDENT().getText());
setLocationReference(ctx.result, ctx.IDENT());
if (!ctx.integer_value().isEmpty()) {
for (Integer_valueContext ivc : ctx.integer_value()) {
ctx.result.getArrayIndexes().add(ivc.result);
}
}
return null;
}
/**
* {@inheritDoc}
* <p/>
* The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.
*/
@Override
public T visitIf_statement(@NotNull AadlBaParser.If_statementContext ctx) {
visitChildren(ctx);
ctx.result = _baFact.createIfStatement();
setLocationReference(ctx.result, ctx.IF(0));
ctx.result.setLogicalValueExpression(ctx.value_expression().result);
ctx.result.setBehaviorActions(ctx.behavior_actions(0).result);
IfStatement previousState = ctx.result;
if (!ctx.elsif_statement().isEmpty()) {
IfStatement elsifStat = null;
for (Elsif_statementContext isc : ctx.elsif_statement()) {
elsifStat = isc.result;
previousState.setElseStatement(elsifStat);
previousState = elsifStat;
}
}
if (ctx.ELSE() != null) {
ElseStatement elseStat = _baFact.createElseStatement();
setLocationReference(elseStat, ctx.ELSE());
elseStat.setBehaviorActions(ctx.behavior_actions(1).result);
previousState.setElseStatement(elseStat);
}
return null;
}
/**
* {@inheritDoc}
* <p/>
* The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.
*/
@Override
public T visitWhile_statement(@NotNull AadlBaParser.While_statementContext ctx) {
visitChildren(ctx);
ctx.result = ctx.while_condition().result;
ctx.result.setBehaviorActions(ctx.behavior_actions().result);
return null;
}
/**
* {@inheritDoc}
* <p/>
* The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.
*/
@Override
public T visitBehavior_state_list(@NotNull AadlBaParser.Behavior_state_listContext ctx) {
visitChildren(ctx);
BehaviorState bs = null;
for (TerminalNode bsId : ctx.IDENT()) {
bs = _baFact.createBehaviorState();
bs.setName(bsId.getText());
setLocationReference(bs, bsId);
if (ctx.INITIAL() != null) {
bs.setInitial(true);
ctx.ba.setInitialState(bs);
}
if (ctx.COMPLETE() != null) {
bs.setComplete(true);
}
if (ctx.FINAL() != null) {
bs.setFinal(true);
}
ctx.ba.getStates().add(bs);
}
return null;
}
/**
* {@inheritDoc}
* <p/>
* The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.
*/
@Override
public T visitTimed_action(@NotNull AadlBaParser.Timed_actionContext ctx) {
ctx.result = _baFact.createTimedAction();
setLocationReference(ctx.result, ctx.COMPUTATION());
if (ctx.in_binding() != null) {
ctx.in_binding().ta = ctx.result;
}
visitChildren(ctx);
ctx.result.setLowerTime(ctx.behavior_time(0).result);
if (ctx.behavior_time().size() == 2) {
ctx.result.setUpperTime(ctx.behavior_time(1).result);
}
return null;
}
@Override
public T visitProcessor_parameter_list(@NotNull AadlBaParser.Processor_parameter_listContext ctx) {
visitChildren(ctx);
ctx.result = new BasicEList<ProcessorClassifier>();
for (Unique_component_classifier_referenceContext uccrc : ctx.unique_component_classifier_reference()) {
_dba.getDeclarativeBehaviorElements().add(uccrc.result);
ctx.result.add(uccrc.result);
}
return null;
}
/**
* {@inheritDoc}
* <p/>
* The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.
*/
@Override
public T visitForall_condition(@NotNull AadlBaParser.Forall_conditionContext ctx) {
visitChildren(ctx);
ctx.result = _baFact.createForOrForAllStatement();
ctx.result.setForAll(true);
setLocationReference(ctx.result, ctx.FORALL());
IterativeVariable itVar = _baFact.createIterativeVariable();
itVar.setName(ctx.IDENT().getText());
setLocationReference(itVar, ctx.IDENT());
ctx.result.setIterativeVariable(itVar);
_dba.getDeclarativeBehaviorElements().add(ctx.unique_component_classifier_reference().result);
itVar.setDataClassifier(ctx.unique_component_classifier_reference().result);
ctx.result.setIteratedValues(ctx.element_values().result);
return null;
}
/**
* {@inheritDoc}
* <p/>
* The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.
*/
@Override
public T visitBasic_action(@NotNull AadlBaParser.Basic_actionContext ctx) {
visitChildren(ctx);
if (ctx.assignment_action() != null) {
ctx.result = ctx.assignment_action().result;
} else if (ctx.communication_action() != null) {
ctx.result = ctx.communication_action().result;
} else {
ctx.result = ctx.timed_action().result;
}
return null;
}
/**
* {@inheritDoc}
* <p/>
* The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.
*/
@Override
public T visitSimple_expression(@NotNull AadlBaParser.Simple_expressionContext ctx) {
visitChildren(ctx);
ctx.result = _baFact.createSimpleExpression();
if (ctx.unary_adding_operator() != null) {
ctx.result.setUnaryAddingOperator(ctx.unary_adding_operator().result);
}
Iterator<TermContext> termIt = ctx.term().iterator();
Term tmp = termIt.next().result;
ctx.result.getTerms().add(tmp);
ctx.result.setLocationReference(tmp.getLocationReference());
for (Binary_adding_operatorContext op : ctx.binary_adding_operator()) {
tmp = termIt.next().result;
ctx.result.getTerms().add(tmp);
ctx.result.getBinaryAddingOperators().add(op.result);
}
return null;
}
/**
* {@inheritDoc}
* <p/>
* The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.
*/
@Override
public T visitFor_condition(@NotNull AadlBaParser.For_conditionContext ctx) {
visitChildren(ctx);
ctx.result = _baFact.createForOrForAllStatement();
ctx.result.setForAll(false);
setLocationReference(ctx.result, ctx.FOR());
IterativeVariable itVar = _baFact.createIterativeVariable();
itVar.setName(ctx.IDENT().getText());
setLocationReference(itVar, ctx.IDENT());
ctx.result.setIterativeVariable(itVar);
_dba.getDeclarativeBehaviorElements().add(ctx.unique_component_classifier_reference().result);
itVar.setDataClassifier(ctx.unique_component_classifier_reference().result);
ctx.result.setIteratedValues(ctx.element_values().result);
return null;
}
/**
* {@inheritDoc}
* <p/>
* The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.
*/
@Override
public T visitBehavior_time(@NotNull AadlBaParser.Behavior_timeContext ctx) {
visitChildren(ctx);
ctx.result = _decl.createDeclarativeTime();
_dba.getDeclarativeBehaviorElements().add(ctx.result);
ctx.result.setIntegerValue(ctx.integer_value().result);
ctx.result.setLocationReference(ctx.integer_value().result.getLocationReference());
Identifier id = _decl.createIdentifier();
_dba.getDeclarativeBehaviorElements().add(id);
id.setId(ctx.IDENT().getText());
setLocationReference(id, ctx.IDENT());
ctx.result.setUnitId(id);
return null;
}
/**
* {@inheritDoc}
* <p/>
* The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.
*/
@Override
public T visitUnary_adding_operator(@NotNull AadlBaParser.Unary_adding_operatorContext ctx) {
if (ctx.PLUS() != null) {
ctx.result = UnaryAddingOperator.PLUS;
} else {
ctx.result = UnaryAddingOperator.MINUS;
}
return null;
}
/**
* {@inheritDoc}
* <p/>
* The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.
*/
@Override
public T visitInteger_range(@NotNull AadlBaParser.Integer_rangeContext ctx) {
visitChildren(ctx);
ctx.result = _baFact.createIntegerRange();
Iterator<Integer_valueContext> it = ctx.integer_value().iterator();
IntegerValue tmp = it.next().result;
ctx.result.setLowerIntegerValue(tmp);
ctx.result.setUpperIntegerValue(it.next().result);
ctx.result.setLocationReference(tmp.getLocationReference());
return null;
}
/**
* {@inheritDoc}
* <p/>
* The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.
*/
@Override
public T visitUnique_component_classifier_reference(
@NotNull AadlBaParser.Unique_component_classifier_referenceContext ctx) {
ctx.result = _decl.createQualifiedNamedElement();
_dba.getDeclarativeBehaviorElements().add(ctx.result);
// Location reference is set in visitQualifiable_named_element.
ctx.qualifiable_named_element().result = ctx.result;
visitChildren(ctx);
visitQualifiable_named_element(ctx.qualifiable_named_element());
return null;
}
/**
* {@inheritDoc}
* <p/>
* The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.
*/
@Override
public T visitBehavior_condition(@NotNull AadlBaParser.Behavior_conditionContext ctx) {
visitChildren(ctx);
if (ctx.ON() != null) {
if (ctx.dispatch_condition() != null && ctx.dispatch_condition().result != null) {
setLocationReference(ctx.dispatch_condition().result, ctx.ON());
ctx.result = ctx.dispatch_condition().result;
} else {
if (ctx.mode_switch_trigger_logical_expression() != null
&& ctx.mode_switch_trigger_logical_expression().result != null) {
setLocationReference(ctx.mode_switch_trigger_logical_expression().result, ctx.ON());
ctx.result = ctx.mode_switch_trigger_logical_expression().result;
}
}
} else {
if (ctx.execute_condition() != null && ctx.execute_condition().result != null) {
ctx.result = ctx.execute_condition().result;
} else {
ctx.result = null;
}
}
return null;
}
/**
* {@inheritDoc}
* <p/>
* The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.
*/
@Override
public T visitBehavior_variable(@NotNull AadlBaParser.Behavior_variableContext ctx) {
ctx.result = _baFact.createBehaviorVariable();
visitChildren(ctx);
setLocationReference(ctx.result, ctx.IDENT());
ctx.result.setName(ctx.IDENT().getText());
DeclarativeArrayDimension dad = null;
for (Integer_value_constantContext ivcc : ctx.integer_value_constant()) {
dad = _decl.createDeclarativeArrayDimension();
_dba.getDeclarativeBehaviorElements().add(dad);
dad.setLocationReference(ivcc.result.getLocationReference());
dad.setDimension(ivcc.result);
ctx.result.getArrayDimensions().add(dad);
}
return null;
}
/**
* {@inheritDoc}
* <p/>
* The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.
*/
@Override
public T visitFactor(@NotNull AadlBaParser.FactorContext ctx) {
visitChildren(ctx);
ctx.result = _baFact.createFactor();
Iterator<Value_constant_or_variableContext> it = ctx.value_constant_or_variable().iterator();
Value tmpValue = it.next().result;
ctx.result.setFirstValue(tmpValue);
ctx.result.setLocationReference(tmpValue.getLocationReference());
if (ctx.binary_numeric_operator() != null) {
ctx.result.setBinaryNumericOperator(ctx.binary_numeric_operator().result);
ctx.result.setSecondValue(it.next().result);
} else if (ctx.unary_numeric_operator() != null) {
ctx.result.setUnaryNumericOperator(ctx.unary_numeric_operator().result);
} else if (ctx.unary_boolean_operator() != null) {
ctx.result.setUnaryBooleanOperator(ctx.unary_boolean_operator().result);
}
return null;
}
/**
* {@inheritDoc}
* <p/>
* The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.
*/
@Override
public T visitRelational_operator(@NotNull AadlBaParser.Relational_operatorContext ctx) {
if (ctx.EQUAL() != null) {
ctx.result = RelationalOperator.EQUAL;
} else if (ctx.NOTEQUAL() != null) {
ctx.result = RelationalOperator.NOT_EQUAL;
} else if (ctx.LESSTHAN() != null) {
ctx.result = RelationalOperator.LESS_THAN;
} else if (ctx.LESSOREQUAL() != null) {
ctx.result = RelationalOperator.LESS_OR_EQUAL_THAN;
} else if (ctx.GREATERTHAN() != null) {
ctx.result = RelationalOperator.GREATER_THAN;
} else {
ctx.result = RelationalOperator.GREATER_OR_EQUAL_THAN;
}
return null;
}
/**
* {@inheritDoc}
* <p/>
* The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.
*/
@Override
public T visitBehavior_annex(@NotNull AadlBaParser.Behavior_annexContext ctx) {
_dba = _decl.createDeclarativeBehaviorAnnex();
ResourceSet rs = new ResourceSetImpl();
// put declarative behavior annex in a (useless) resource to fix error raised by Xtext otherwise
Resource declarativeBehaviorAnnexResource = rs.createResource(URI.createURI("tmp.declarative"));
declarativeBehaviorAnnexResource.getContents().add(_dba);
_ba = _baFact.createBehaviorAnnex();
ctx.result = _ba;
for (Behavior_variable_listContext balc : ctx.behavior_variable_list()) {
balc.ba = _ba;
}
for (Behavior_state_listContext bslc : ctx.behavior_state_list()) {
bslc.ba = _ba;
}
visitChildren(ctx);
if (ctx.TRANSITIONS() != null) {
for (Behavior_transitionContext btc : ctx.behavior_transition()) {
ctx.result.getTransitions().add(btc.result);
}
}
return null;
}
/**
* {@inheritDoc}
* <p/>
* The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.
*/
@Override
public T visitElement_values(@NotNull AadlBaParser.Element_valuesContext ctx) {
visitChildren(ctx);
if (ctx.integer_range() != null) {
ctx.result = ctx.integer_range().result;
} else {
ctx.result = ctx.reference().result;
}
return null;
}
/**
* {@inheritDoc}
* <p/>
* The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.
*/
@Override
public T visitReference(@NotNull AadlBaParser.ReferenceContext ctx) {
visitChildren(ctx);
ctx.result = _decl.createReference();
_dba.getDeclarativeBehaviorElements().add(ctx.result);
ctx.result.setLocationReference(ctx.array_identifier(0).result.getLocationReference());
for (Array_identifierContext aic : ctx.array_identifier()) {
ctx.result.getIds().add(aic.result);
}
return null;
}
/**
* {@inheritDoc}
* <p/>
* The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.
*/
@Override
public T visitValue_expression(@NotNull AadlBaParser.Value_expressionContext ctx) {
visitChildren(ctx);
ctx.result = _baFact.createValueExpression();
Iterator<RelationContext> reIt = ctx.relation().iterator();
Relation tmpRe = reIt.next().result;
ctx.result.getRelations().add(tmpRe);
ctx.result.setLocationReference(tmpRe.getLocationReference());
if (!ctx.logical_operator().isEmpty()) {
for (Logical_operatorContext loc : ctx.logical_operator()) {
tmpRe = reIt.next().result;
ctx.result.getRelations().add(tmpRe);
ctx.result.getLogicalOperators().add(loc.result);
}
}
return null;
}
/**
* {@inheritDoc}
* <p/>
* The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.
*/
@Override
public T visitNumeric_literal(@NotNull AadlBaParser.Numeric_literalContext ctx) {
visitChildren(ctx);
if (ctx.integer_literal() != null) {
ctx.result = ctx.integer_literal().result;
} else {
ctx.result = ctx.real_literal().result;
}
return null;
}
/**
* {@inheritDoc}
* <p/>
* The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.
*/
@Override
public T visitInteger_value(@NotNull AadlBaParser.Integer_valueContext ctx) {
visitChildren(ctx);
Value result = null;
if (ctx.integer_value_constant() != null) {
result = ctx.integer_value_constant().result;
} else {
result = ctx.value_variable().result;
}
ctx.result = (IntegerValue) result;
return null;
}
/**
* {@inheritDoc}
* <p/>
* The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.
*/
@Override
public T visitWhile_condition(@NotNull AadlBaParser.While_conditionContext ctx) {
visitChildren(ctx);
ctx.result = _baFact.createWhileOrDoUntilStatement();
setLocationReference(ctx.result, ctx.WHILE());
ctx.result.setDoUntil(false);
ctx.result.setLogicalValueExpression(ctx.value_expression().result);
return null;
}
/**
* {@inheritDoc}
* <p/>
* The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.
*/
@Override
public T visitInteger_value_constant(@NotNull AadlBaParser.Integer_value_constantContext ctx) {
visitChildren(ctx);
if (ctx.integer_literal() != null) {
ctx.result = ctx.integer_literal().result;
} else {
ctx.result = ctx.property_reference().result;
}
return null;
}
/**
* {@inheritDoc}
* <p/>
* The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.
*/
@Override
public T visitTerm(@NotNull AadlBaParser.TermContext ctx) {
visitChildren(ctx);
ctx.result = _baFact.createTerm();
Iterator<FactorContext> factIt = ctx.factor().iterator();
Factor tmpFact = factIt.next().result;
ctx.result.getFactors().add(tmpFact);
ctx.result.setLocationReference(tmpFact.getLocationReference());
for (Multiplying_operatorContext mec : ctx.multiplying_operator()) {
ctx.result.getMultiplyingOperators().add(mec.result);
tmpFact = factIt.next().result;
ctx.result.getFactors().add(tmpFact);
}
return null;
}
/**
* {@inheritDoc}
* <p/>
* The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.
*/
@Override
public T visitForall_statement(@NotNull AadlBaParser.Forall_statementContext ctx) {
visitChildren(ctx);
ctx.result = ctx.forall_condition().result;
ctx.result.setBehaviorActions(ctx.behavior_actions().result);
return null;
}
/**
* {@inheritDoc}
* <p/>
* The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.
*/
@Override
public T visitTarget(@NotNull AadlBaParser.TargetContext ctx) {
visitChildren(ctx);
ctx.result = ctx.reference().result;
return null;
}
/**
* {@inheritDoc}
* <p/>
* The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.
*/
@Override
public T visitExecute_condition(@NotNull AadlBaParser.Execute_conditionContext ctx) {
visitChildren(ctx);
if (ctx.value_expression() != null) {
ctx.result = ctx.value_expression().result;
} else if (ctx.TIMEOUT() != null) {
ctx.result = _baFact.createExecutionTimeoutCatch();
setLocationReference(ctx.result, ctx.TIMEOUT());
} else {
ctx.result = _baFact.createOtherwise();
setLocationReference(ctx.result, ctx.OTHERWISE());
}
return null;
}
/**
* {@inheritDoc}
* <p/>
* The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.
*/
@Override
public T visitBehavior_actions(@NotNull AadlBaParser.Behavior_actionsContext ctx) {
visitChildren(ctx);
BehaviorActions firstAction = ctx.behavior_action(0).result;
if (ctx.behavior_action().size() > 1) {
BehaviorActionCollection tmp = null;
if (ctx.SEMICOLON().size() > 0) {
tmp = _baFact.createBehaviorActionSequence();
} else {
tmp = _baFact.createBehaviorActionSet();
}
tmp.setLocationReference(firstAction.getLocationReference());
for (Behavior_actionContext bac : ctx.behavior_action()) {
tmp.getActions().add(bac.result);
}
ctx.result = tmp;
} else {
ctx.result = firstAction;
}
return null;
}
/**
* {@inheritDoc}
* <p/>
* The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.
*/
@Override
public T visitBehavior_transition(@NotNull AadlBaParser.Behavior_transitionContext ctx) {
visitChildren(ctx);
Identifier id = null;
TerminalNode node = null;
ctx.result = _decl.createDeclarativeBehaviorTransition();
_dba.getDeclarativeBehaviorElements().add(ctx.result);
int srcStatesIndex = 0;
if (ctx.transId != null) {
ctx.result.setName(ctx.transId.getText());
setLocationReference(ctx.result, ctx.transId);
srcStatesIndex++;
if (ctx.numeral() != null) {
ctx.result.setPriority(ctx.numeral().result);
}
}
if (ctx.result.getLocationReference() == null) {
setLocationReference(ctx.result, ctx.IDENT(srcStatesIndex));
}
while (srcStatesIndex < ctx.IDENT().size() - 1) {
node = ctx.IDENT(srcStatesIndex);
id = _decl.createIdentifier();
id.setId(node.getText());
setLocationReference(id, node);
ctx.result.getSrcStates().add(id);
srcStatesIndex++;
}
// behavior condition can be null.
if (ctx.behavior_condition() != null && ctx.behavior_condition().result != null) {
_ba.getConditions().add(ctx.behavior_condition().result);
ctx.result.setCondition(ctx.behavior_condition().result);
}
id = _decl.createIdentifier();
id.setId(ctx.destId.getText());
setLocationReference(id, ctx.destId);
ctx.result.setDestState(id);
if (ctx.behavior_action_block() != null) {
_ba.getActions().add(ctx.behavior_action_block().result);
ctx.result.setActionBlock(ctx.behavior_action_block().result);
}
return null;
}
@Override
public T visitElsif_statement(Elsif_statementContext ctx) {
visitChildren(ctx);
IfStatement elsifStat = _baFact.createIfStatement();
ctx.result = elsifStat;
elsifStat.setElif(true);
setLocationReference(elsifStat, ctx.ELSIF());
elsifStat.setLogicalValueExpression(ctx.value_expression().result);
elsifStat.setBehaviorActions(ctx.behavior_actions().result);
return null;
}
@Override
public T visitReal_literal(Real_literalContext ctx) {
String str = ctx.REAL_LIT().getText();
BehaviorRealLiteral tmp = _baFact.createBehaviorRealLiteral();
str = str.replaceAll("_", "");
tmp.setValue(str);
setLocationReference(tmp, ctx.REAL_LIT());
ctx.result = tmp;
return null;
}
@Override
public T visitIn_binding(In_bindingContext ctx) {
visitChildren(ctx);
ctx.ta.getProcessorClassifier().addAll(ctx.processor_parameter_list().result);
return null;
}
@Override
public T visitProperty_reference(Property_referenceContext ctx) {
visitChildren(ctx);
DeclarativePropertyReference result = _decl.createDeclarativePropertyReference();
_dba.getDeclarativeBehaviorElements().add(result);
if (ctx.h1 != null) {
result.setPropertySet(true);
if (ctx.IDENT() != null) {
Identifier nameSpaceId = _decl.createIdentifier();
_dba.getDeclarativeBehaviorElements().add(nameSpaceId);
nameSpaceId.setId(ctx.IDENT().getText());
setLocationReference(nameSpaceId, ctx.IDENT());
Identifier dummy = _decl.createIdentifier();
_dba.getDeclarativeBehaviorElements().add(dummy);
dummy.setId("");
QualifiedNamedElement qne = _decl.createQualifiedNamedElement();
qne.setBaNamespace(nameSpaceId);
qne.setBaName(dummy); // Dummy. Do not use !
qne.setLocationReference(nameSpaceId.getLocationReference());
_dba.getDeclarativeBehaviorElements().add(qne);
result.setQualifiedName(qne);
}
} else {
if (ctx.reference() != null) {
result.setReference(ctx.reference().result);
result.setLocationReference(ctx.reference().result.getLocationReference());
} else {
result.setQualifiedName(ctx.qualified_named_element().result);
result.setLocationReference(ctx.qualified_named_element().result.getLocationReference());
}
}
for (Property_nameContext pnc : ctx.property_name()) {
result.getPropertyNames().add(pnc.result);
}
ctx.result = result;
return null;
}
@Override
public T visitValue_constant(Value_constantContext ctx) {
visitChildren(ctx);
if (ctx.numeric_literal() != null) {
ctx.result = ctx.numeric_literal().result;
} else if (ctx.string_literal() != null) {
ctx.result = ctx.string_literal().result;
} else if (ctx.boolean_literal() != null) {
ctx.result = ctx.boolean_literal().result;
} else {
ctx.result = ctx.property_reference().result;
}
return null;
}
@Override
public T visitProperty_name(Property_nameContext ctx) {
visitChildren(ctx);
DeclarativePropertyName result = _decl.createDeclarativePropertyName();
_dba.getDeclarativeBehaviorElements().add(result);
setLocationReference(result, ctx.IDENT());
Identifier propertyName = _decl.createIdentifier();
_dba.getDeclarativeBehaviorElements().add(propertyName);
setLocationReference(propertyName, ctx.IDENT());
propertyName.setId(ctx.IDENT().getText());
result.setPropertyName(propertyName);
if (ctx.UPPER_BOUND() != null) {
UpperBound upField = _baFact.createUpperBound();
setLocationReference(upField, ctx.UPPER_BOUND());
result.setField(upField);
} else if (ctx.LOWER_BOUND() != null) {
LowerBound lowerField = _baFact.createLowerBound();
setLocationReference(lowerField, ctx.LOWER_BOUND());
result.setField(lowerField);
} else if (false == ctx.integer_value().isEmpty()) {
for (Integer_valueContext ivc : ctx.integer_value()) {
result.getIndexes().add(ivc.result);
}
}
ctx.result = result;
return null;
}
@Override
public T visitMode_switch_trigger_conjunction(@NotNull AadlBaParser.Mode_switch_trigger_conjunctionContext ctx) {
visitChildren(ctx);
ctx.result = _baFact.createModeSwitchConjunction();
ctx.result.setLocationReference(ctx.reference(0).result.getLocationReference());
for (ReferenceContext rc : ctx.reference()) {
ctx.result.getModeSwitchTriggers().add(rc.result);
}
return null;
}
@Override
public T visitMode_switch_trigger_logical_expression(
@NotNull AadlBaParser.Mode_switch_trigger_logical_expressionContext ctx) {
visitChildren(ctx);
ctx.result = _baFact.createModeSwitchTriggerLogicalExpression();
ctx.result.setLocationReference(ctx.mode_switch_trigger_conjunction(0).result.getLocationReference());
for (Mode_switch_trigger_conjunctionContext dcc : ctx.mode_switch_trigger_conjunction()) {
ctx.result.getModeSwitchConjunctions().add(dcc.result);
}
return null;
}
/**
* {@inheritDoc}
* <p/>
* The default implementation returns the result of calling
* {@link #visitChildren} on {@code ctx}.
*/
@Override
public T visitValue_constant_or_variable(Value_constant_or_variableContext ctx) {
visitChildren(ctx);
if (ctx.value_constant() != null) {
ctx.result = ctx.value_constant().result;
} else if (ctx.value_variable() != null) {
ctx.result = ctx.value_variable().result;
} else {
ctx.result = ctx.value_expression().result;
}
return null;
}
@Override
public T visitData_classifier_property_association(Data_classifier_property_associationContext ctx) {
visitChildren(ctx);
ctx.result = _decl.createDeclarativePropertyAssociation();
_dba.getDeclarativeBehaviorElements().add(ctx.result);
ctx.result.setProperty(ctx.property_ref().result);
ctx.result.setOwnedValue(ctx.property_value().result);
return null;
}
@Override
public T visitQualifiable_property(Qualifiable_propertyContext ctx) {
visitChildren(ctx);
ctx.result = _decl.createQualifiedNamedElement();
_dba.getDeclarativeBehaviorElements().add(ctx.result);
Identifier nameId = _decl.createIdentifier();
_dba.getDeclarativeBehaviorElements().add(nameId);
nameId.setId(ctx.id2);
setLocationReference(nameId, ctx.identifier2);
ctx.result.setBaName(nameId);
if (!ctx.id1.equals("")) {
Identifier nameSpaceId = _decl.createIdentifier();
_dba.getDeclarativeBehaviorElements().add(nameSpaceId);
nameSpaceId.setId(ctx.id1);
setLocationReference(nameSpaceId, ctx.identifier1);
ctx.result.setBaNamespace(nameSpaceId);
setLocationReference(ctx.result, ctx.identifier1);
} else {
setLocationReference(ctx.result, ctx.identifier2);
}
return null;
}
@Override
public T visitProperty_ref(Property_refContext ctx) {
visitChildren(ctx);
ctx.result = ctx.qualifiable_property().result;
return null;
}
@Override
public T visitProperty_value(Property_valueContext ctx) {
visitChildren(ctx);
if (ctx.list_property_value() != null) {
ctx.result = ctx.list_property_value().result;
} else if (ctx.string_property_value() != null) {
ctx.result = (DeclarativePropertyExpression) ctx.string_property_value().result;
} else if (ctx.integer_property_value() != null) {
ctx.result = (DeclarativePropertyExpression) ctx.integer_property_value().result;
} else if (ctx.real_property_value() != null) {
ctx.result = (DeclarativePropertyExpression) ctx.real_property_value().result;
} else if (ctx.record_property_value() != null) {
ctx.result = ctx.record_property_value().result;
} else if (ctx.boolean_property_value() != null) {
ctx.result = (DeclarativePropertyExpression) ctx.boolean_property_value().result;
} else if (ctx.numeric_range_property_value() != null) {
ctx.result = ctx.numeric_range_property_value().result;
} else if (ctx.reference_property_value() != null) {
ctx.result = ctx.reference_property_value().result;
} else if (ctx.classifier_property_value() != null) {
ctx.result = ctx.classifier_property_value().result;
}
return null;
}
@Override
public T visitList_property_value(List_property_valueContext ctx) {
visitChildren(ctx);
ctx.result = _decl.createDeclarativeListValue();
for (Property_valueContext pvc : ctx.property_value()) {
ctx.result.getOwnedListElements().add(pvc.result);
}
return null;
}
@Override
public T visitUnit_reference(Unit_referenceContext ctx) {
visitChildren(ctx);
ctx.result = ctx.qualifiable_property().result;
return null;
}
@Override
public T visitSigned_int(Signed_intContext ctx) {
visitChildren(ctx);
ctx.result = Integer.parseInt(ctx.getText());
return null;
}
@Override
public T visitInteger_property_value(Integer_property_valueContext ctx) {
visitChildren(ctx);
ctx.result = _decl.createDeclarativeIntegerLiteral();
ctx.result.setValue(ctx.signed_int().result);
if (ctx.unit_reference() != null) {
ctx.result.setUnit(ctx.unit_reference().result);
}
return null;
}
@Override
public T visitReal_property_value(Real_property_valueContext ctx) {
visitChildren(ctx);
ctx.result = _decl.createDeclarativeRealLiteral();
ctx.result.setValue(ctx.signed_real().result);
if (ctx.unit_reference() != null) {
ctx.result.setUnit(ctx.unit_reference().result);
}
return null;
}
@Override
public T visitSigned_real(Signed_realContext ctx) {
visitChildren(ctx);
ctx.result = Double.parseDouble(ctx.getText());
return null;
}
@Override
public T visitRecord_property_value(Record_property_valueContext ctx) {
visitChildren(ctx);
ctx.result = _decl.createDeclarativeRecordValue();
for (Field_property_associationContext assignCtx : ctx.field_assign) {
ctx.result.getOwnedFieldValues().add(assignCtx.result);
}
return null;
}
@Override
public T visitField_property_association(Field_property_associationContext ctx) {
visitChildren(ctx);
ctx.result = _decl.createDeclarativeBasicPropertyAssociation();
ctx.result.setBasicPropertyName(ctx.property.getText());
ctx.result.setOwnedValue(ctx.property_value().result);
return null;
}
@Override
public T visitBoolean_property_value(Boolean_property_valueContext ctx) {
visitChildren(ctx);
ctx.result = _decl.createDeclarativeBooleanLiteral();
if (ctx.getText().equalsIgnoreCase("true")) {
ctx.result.setValue(true);
} else {
ctx.result.setValue(false);
}
return null;
}
@Override
public T visitNumeric_range_property_value(Numeric_range_property_valueContext ctx) {
visitChildren(ctx);
ctx.result = _decl.createDeclarativeRangeValue();
ctx.result.setMinimum(ctx.lower_bound.result);
ctx.result.setMaximum(ctx.upper_bound.result);
return null;
}
@Override
public T visitNumeric_property_value(Numeric_property_valueContext ctx) {
visitChildren(ctx);
if (ctx.real_property_value() != null) {
ctx.result = (DeclarativePropertyExpression) ctx.real_property_value().result;
} else if (ctx.integer_property_value() != null) {
ctx.result = (DeclarativePropertyExpression) ctx.integer_property_value().result;
}
return null;
}
@Override
public T visitReference_property_value(Reference_property_valueContext ctx) {
visitChildren(ctx);
ctx.result = _decl.createDeclarativeReferenceValue();
ctx.result.setRef(ctx.reference().result);
return null;
}
@Override
public T visitClassifier_property_value(Classifier_property_valueContext ctx) {
visitChildren(ctx);
ctx.result = _decl.createDeclarativeClassifierValue();
ctx.result.setClassifier(ctx.unique_component_classifier_reference().result);
return null;
}
@Override
public T visitString_property_value(String_property_valueContext ctx) {
visitChildren(ctx);
ctx.result = _decl.createDeclarativeStringLiteral();
String str = ctx.STRING_LITERAL().getText();
// stripout the quotes
ctx.result.setValue(str.substring(1, str.length() - 1));
setLocationReference(ctx.result, ctx.STRING_LITERAL());
return null;
}
}