use of verdict.vdm.vdm_data.RecordType in project VERDICT by ge-high-assurance.
the class Agree2Vdm method resolveAADLDataImplementationType.
private void resolveAADLDataImplementationType(DataImplementation dataImplementationImpl, HashSet<String> dataTypeDecl, Model model) {
verdict.vdm.vdm_data.DataType dtype = new verdict.vdm.vdm_data.DataType();
// GET DETAILS OF THE DATA IMPLEMENTATION AND CREATE CORRESPONDING VDM DATATYPE
EList<DataSubcomponent> subcomponents = dataImplementationImpl.getOwnedDataSubcomponents();
if (!subcomponents.isEmpty()) {
// if the dataType definition has subcomponents
RecordType recType = new RecordType();
for (DataSubcomponent dataSubComp : subcomponents) {
RecordField recField = new RecordField();
recField.setName(dataSubComp.getName());
DataSubcomponentType dataSubCompType = dataSubComp.getDataSubcomponentType();
if (dataSubCompType instanceof org.osate.aadl2.DataType) {
org.osate.aadl2.DataType aadlDataType = (org.osate.aadl2.DataType) dataSubCompType;
// the line below is just to ensure that the type's declaration is added to VDM
resolveAADLDataType(aadlDataType, dataTypeDecl, model);
verdict.vdm.vdm_data.DataType recFieldDtype = getVdmTypeFromAADLType(aadlDataType);
recField.setType(recFieldDtype);
recType.getRecordField().add(recField);
} else if (dataSubCompType instanceof DataImplementation) {
DataImplementation dataSubCompDataImplementation = (DataImplementation) dataSubCompType;
// the line below is just to ensure that the type's declaration is added to VDM
resolveAADLDataImplementationType(dataSubCompDataImplementation, dataTypeDecl, model);
verdict.vdm.vdm_data.DataType recFieldDtype = new verdict.vdm.vdm_data.DataType();
recFieldDtype.setUserDefinedType(dataSubCompDataImplementation.getName());
recField.setType(recFieldDtype);
recType.getRecordField().add(recField);
} else {
System.out.println("Unexpected Data Subcomponent that is not a DataTypeImpl or DataImplementatioImpl.");
}
}
if (recType.getRecordField().size() != 0) {
dtype.setRecordType(recType);
// DEFINE DATA TYPE IN DECLARATIONS IF NOT ALREADY DEFINED
String dataImplementationName = dataImplementationImpl.getName();
if (!dataTypeDecl.contains(dataImplementationName)) {
dataTypeDecl.add(dataImplementationName);
// vdm data type declaration
TypeDeclaration dataTypeVdm = new TypeDeclaration();
dataTypeVdm.setName(dataImplementationName);
dataTypeVdm.setDefinition(dtype);
// add the typeDeclaration to the model
model.getTypeDeclaration().add(dataTypeVdm);
}
}
} else {
// if the dataType is base type boolean or integer or char or string
System.out.println("Unexpected data implementation type with no subcomponents");
// DEFINE DATA TYPE IN DECLARATIONS IF NOT ALREADY DEFINED
String dataImplementationName = dataImplementationImpl.getName();
if (!dataTypeDecl.contains(dataImplementationName)) {
dataTypeDecl.add(dataImplementationName);
// vdm data type declaration
TypeDeclaration dataTypeVdm = new TypeDeclaration();
dataTypeVdm.setName(dataImplementationName);
// add the typeDeclaration to the model
model.getTypeDeclaration().add(dataTypeVdm);
}
}
}
use of verdict.vdm.vdm_data.RecordType in project VERDICT by ge-high-assurance.
the class VerdictLustreListener method exitRecordType.
/**
* Extract a record type.
*/
@Override
public void exitRecordType(LustreParser.RecordTypeContext ctx) {
RecordType recordType = new RecordType();
ctx.field().forEach(field -> {
field.ID().forEach(id -> {
RecordField recordField = new RecordField();
String name = id.getText();
recordField.setName(name);
recordField.setType(field.type().dataType);
recordType.getRecordField().add(recordField);
});
});
ctx.dataType = new DataType();
ctx.dataType.setRecordType(recordType);
}
use of verdict.vdm.vdm_data.RecordType in project VERDICT by ge-high-assurance.
the class VDM2Lustre method defineEventDeclaration.
protected TypeDeclaration defineEventDeclaration(DataType dataType) {
TypeDeclaration eventTypeDeclaration = new TypeDeclaration();
if (dataType != null) {
String user_defined_type = dataType.getUserDefinedType();
user_defined_type = user_defined_type.replace(".", "_dot_");
user_defined_type = user_defined_type.replace("::", "_double_colon_");
boolean implemented_type = typeDeclarations.containsKey(user_defined_type);
if (implemented_type) {
TypeDeclaration baseType = typeDeclarations.get(user_defined_type);
user_defined_type = baseType.getName();
String definedType = user_defined_type.replace("_dot_", "Event_");
eventTypeDeclaration.setName(definedType);
DataType eventDefinition = new DataType();
RecordType eventRecord = getEventrecord(user_defined_type);
eventDefinition.setRecordType(eventRecord);
eventTypeDeclaration.setDefinition(eventDefinition);
eventTypeDeclaration.setName(definedType);
}
} else {
// None DataType
String definedType = "EventDataType";
eventTypeDeclaration.setName(definedType);
DataType eventDefinition = new DataType();
RecordType eventRecord = getEventrecord(null);
eventDefinition.setRecordType(eventRecord);
eventTypeDeclaration.setDefinition(eventDefinition);
eventTypeDeclaration.setName(definedType);
}
return eventTypeDeclaration;
}
use of verdict.vdm.vdm_data.RecordType in project VERDICT by ge-high-assurance.
the class VDM2Lustre method visit.
// Copying Type Declaration.
public void visit(TypeDeclaration typeDeclaration, LustreProgram program) {
String identifier = typeDeclaration.getName();
// Renaming dot[.] in Type Declaration Identifier.
identifier = identifier.replace(".", "_dot_");
identifier = identifier.replace("::", "_double_colon_");
typeDeclaration.setName(identifier);
DataType data_type = typeDeclaration.getDefinition();
if (data_type != null) {
RecordType record_type = data_type.getRecordType();
if (record_type != null) {
// identifier = identifier + "_Impl";
List<RecordField> record_fields = record_type.getRecordField();
for (RecordField record_field : record_fields) {
// String identifier = record_field.getName();
data_type = record_field.getType();
if (data_type == null) {
data_type = defaultType();
record_field.setType(data_type);
}
String user_defined_type = data_type.getUserDefinedType();
if (user_defined_type != null) {
String updated_defined_type = user_defined_type.replace(".", "_dot_");
updated_defined_type = updated_defined_type.replace("::", "_double_colon_");
// for (TypeDeclaration type_declaration :
// program.getTypeDeclaration()) {
// if
// (user_defined_type.equals(type_declaration.getName())) {
data_type.setUserDefinedType(updated_defined_type);
// }
// }
}
}
// Updating TypeName_Impl
typeDeclaration.setName(identifier);
}
}
typeDeclarations.put(identifier, typeDeclaration);
program.getTypeDeclaration().add(typeDeclaration);
}
use of verdict.vdm.vdm_data.RecordType in project VERDICT by ge-high-assurance.
the class VDM2Lustre method getEventrecord.
protected RecordType getEventrecord(String userDefineType) {
// Define a Record
RecordType eventRecord = new RecordType();
// is_present: bool
RecordField eventField = new RecordField();
DataType boolType = new DataType();
boolType.setPlainType(PlainType.BOOL);
eventField.setName("is_present");
eventField.setType(boolType);
eventRecord.getRecordField().add(eventField);
// value: UserDefined
if (userDefineType != null) {
RecordField eventValue = new RecordField();
DataType valueType = new DataType();
valueType.setUserDefinedType(userDefineType);
eventValue.setName("value");
eventValue.setType(valueType);
eventRecord.getRecordField().add(eventValue);
}
return eventRecord;
}
Aggregations