Skip to content
Snippets Groups Projects
Commit f755a7d9 authored by Sophie Coudert's avatar Sophie Coudert
Browse files

save...

parent ca263b1f
No related branches found
No related tags found
4 merge requests!504merge first stable version of Avatar-SysML V2,!503merge the first stable version of the Avatar-SysML parser/generator,!501Avatar sys ml 04 2024,!498Avatar sys ml 04 2024 (first merge request, only for verification)
...@@ -8,8 +8,6 @@ import java.util.List; ...@@ -8,8 +8,6 @@ import java.util.List;
import java.util.Map; import java.util.Map;
public class AvatarDataType extends AvatarElement implements NameChecker.NameStartWithUpperCase { public class AvatarDataType extends AvatarElement implements NameChecker.NameStartWithUpperCase {
public static Map<String,AvatarDataType> dataTypeMap = new HashMap<String,AvatarDataType>();
private List<String> fieldStrings; // list of all primitive fields, unrolling sub-datatypes private List<String> fieldStrings; // list of all primitive fields, unrolling sub-datatypes
private List<AvatarType> fieldStringTypes; // list of primitive types associated to fieldStrings private List<AvatarType> fieldStringTypes; // list of primitive types associated to fieldStrings
private List<AvatarAttribute> attributes; // list of direct fields private List<AvatarAttribute> attributes; // list of direct fields
...@@ -62,7 +60,7 @@ public class AvatarDataType extends AvatarElement implements NameChecker.NameSta ...@@ -62,7 +60,7 @@ public class AvatarDataType extends AvatarElement implements NameChecker.NameSta
attributes.add(_attribute); attributes.add(_attribute);
} }
} }
public static void finalize(AvatarDataType adt) { public static void finalize(AvatarDataType adt, AvatarSpecification as) {
if (adt.fullSize != -1) return; if (adt.fullSize != -1) return;
int size = 0; int size = 0;
int length = adt.getAttributeNb(); int length = adt.getAttributeNb();
...@@ -79,9 +77,9 @@ public class AvatarDataType extends AvatarElement implements NameChecker.NameSta ...@@ -79,9 +77,9 @@ public class AvatarDataType extends AvatarElement implements NameChecker.NameSta
size += 1; size += 1;
continue; continue;
} }
AvatarDataType fieldDataType = dataTypeMap.get(adt.getDataTypeName(i)); AvatarDataType fieldDataType = as.getDataTypeByName(adt.getDataTypeName(i));
if (fieldDataType == null) return; // ERROR CASE if (fieldDataType == null) return; // ERROR CASE
finalize(fieldDataType); // loops if recursion => recursive types are forbidden finalize(fieldDataType, as); // loops if recursion => recursive types are forbidden
int fieldSize = fieldDataType.getFullSize(); int fieldSize = fieldDataType.getFullSize();
if (fieldSize == -1) return; // ERROR CASE if (fieldSize == -1) return; // ERROR CASE
size += fieldSize; size += fieldSize;
......
...@@ -170,8 +170,7 @@ public class AvatarFromSysML { ...@@ -170,8 +170,7 @@ public class AvatarFromSysML {
public BuildDataType(){} public BuildDataType(){}
public void accept(String n, StxDataType d) { public void accept(String n, StxDataType d) {
AvatarDataType dataType = new AvatarDataType(d.getName(),null); AvatarDataType dataType = new AvatarDataType(d.getName(),null);
AvatarDataType.dataTypeMap.put(d.getName(), dataType); avSpec.addDataType(dataType);
avSpec.getDataTypes().add(dataType);
int nbFields = d.getSize(); int nbFields = d.getSize();
for (int i = 0; i < nbFields; i++) { for (int i = 0; i < nbFields; i++) {
String type = d.getFieldType(i); String type = d.getFieldType(i);
...@@ -192,11 +191,10 @@ public class AvatarFromSysML { ...@@ -192,11 +191,10 @@ public class AvatarFromSysML {
} }
private void buildDataTypes(){ private void buildDataTypes(){
List<AvatarDataType> dtList = avSpec.getDataTypes(); List<AvatarDataType> dtList = avSpec.getDataTypes();
AvatarDataType.dataTypeMap.clear();
stxSpec.getDataTypeMap().forEach(new BuildDataType()); stxSpec.getDataTypeMap().forEach(new BuildDataType());
int size = dtList.size(); int size = dtList.size();
for(int i = 0; i < size; i++) for(int i = 0; i < size; i++)
AvatarDataType.finalize(dtList.get(i)); AvatarDataType.finalize(dtList.get(i), avSpec);
} }
// BUILDING BLOCKS (but not statemachines) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% // BUILDING BLOCKS (but not statemachines) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
private class BuildBlock implements BiConsumer<String, StxBlock> { private class BuildBlock implements BiConsumer<String, StxBlock> {
...@@ -226,7 +224,7 @@ public class AvatarFromSysML { ...@@ -226,7 +224,7 @@ public class AvatarFromSysML {
aa.setAsConstant(false); aa.setAsConstant(false);
} }
else { else {
AvatarDataType adt = AvatarDataType.dataTypeMap.get(a.getType()); AvatarDataType adt = avSpec.getDataTypeByName(a.getType());
int tsize = adt.getFullSize(); int tsize = adt.getFullSize();
for(int j = 0; j < tsize; j++) { for(int j = 0; j < tsize; j++) {
aa = new AvatarAttribute( aa = new AvatarAttribute(
...@@ -257,7 +255,7 @@ public class AvatarFromSysML { ...@@ -257,7 +255,7 @@ public class AvatarFromSysML {
aa.setAsConstant(true); aa.setAsConstant(true);
} }
else { else {
AvatarDataType adt = AvatarDataType.dataTypeMap.get(a.getType()); AvatarDataType adt = avSpec.getDataTypeByName(a.getType());
int tsize = adt.getFullSize(); int tsize = adt.getFullSize();
for(int j = 0; j < tsize; j++) { for(int j = 0; j < tsize; j++) {
aa = new AvatarAttribute( aa = new AvatarAttribute(
...@@ -291,7 +289,7 @@ public class AvatarFromSysML { ...@@ -291,7 +289,7 @@ public class AvatarFromSysML {
else if (returnType.equals("Boolean")) else if (returnType.equals("Boolean"))
am.addReturnParameter(new AvatarAttribute("return__0", AvatarType.BOOLEAN, theBlock, null)); am.addReturnParameter(new AvatarAttribute("return__0", AvatarType.BOOLEAN, theBlock, null));
else { else {
AvatarDataType adt = AvatarDataType.dataTypeMap.get(returnType); AvatarDataType adt = avSpec.getDataTypeByName(returnType);
int nbFields = adt.getAttributeNb(); int nbFields = adt.getAttributeNb();
for (int j = 0; j < nbFields; j++) { for (int j = 0; j < nbFields; j++) {
AvatarType type = (adt.getFieldStringType(j) == AvatarType.INTEGER ? AvatarType.INTEGER : AvatarType.BOOLEAN); AvatarType type = (adt.getFieldStringType(j) == AvatarType.INTEGER ? AvatarType.INTEGER : AvatarType.BOOLEAN);
...@@ -470,7 +468,7 @@ public class AvatarFromSysML { ...@@ -470,7 +468,7 @@ public class AvatarFromSysML {
am.addParameter(aa); am.addParameter(aa);
aa.setAsConstant(false); aa.setAsConstant(false);
} else { } else {
AvatarDataType adt = AvatarDataType.dataTypeMap.get(type); AvatarDataType adt = avSpec.getDataTypeByName(type);
int tsize = adt.getFullSize(); int tsize = adt.getFullSize();
for(int j = 0; j < tsize; j++) { for(int j = 0; j < tsize; j++) {
aa = new AvatarAttribute( aa = new AvatarAttribute(
...@@ -496,7 +494,7 @@ public class AvatarFromSysML { ...@@ -496,7 +494,7 @@ public class AvatarFromSysML {
String type = getStxAttributeType(path[0], b); String type = getStxAttributeType(path[0], b);
int size = path.length; int size = path.length;
for (int i = 1; i < size; i++) { for (int i = 1; i < size; i++) {
AvatarDataType adt = AvatarDataType.dataTypeMap.get(type); AvatarDataType adt = avSpec.getDataTypeByName(type);
if (adt == null) return null; if (adt == null) return null;
int nbFields = adt.getAttributeNb(); int nbFields = adt.getAttributeNb();
int j; int j;
...@@ -521,7 +519,7 @@ public class AvatarFromSysML { ...@@ -521,7 +519,7 @@ public class AvatarFromSysML {
extendType = null; extendType = null;
return path; return path;
} }
extendType = AvatarDataType.dataTypeMap.get(extendString); extendType = avSpec.getDataTypeByName(extendString);
int size = extendType.getFullSize() - 1; int size = extendType.getFullSize() - 1;
if (size == -1) return path; if (size == -1) return path;
StringBuffer res = new StringBuffer(); StringBuffer res = new StringBuffer();
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment