--- /dev/null
+package org.simantics.scl.expressions.datatype;\r
+\r
+import org.simantics.databoard.type.ArrayType;\r
+import org.simantics.databoard.type.BooleanType;\r
+import org.simantics.databoard.type.ByteType;\r
+import org.simantics.databoard.type.Datatype;\r
+import org.simantics.databoard.type.DoubleType;\r
+import org.simantics.databoard.type.FloatType;\r
+import org.simantics.databoard.type.IntegerType;\r
+import org.simantics.databoard.type.LongType;\r
+import org.simantics.databoard.type.MapType;\r
+import org.simantics.databoard.type.OptionalType;\r
+import org.simantics.databoard.type.RecordType;\r
+import org.simantics.databoard.type.StringType;\r
+import org.simantics.databoard.type.UnionType;\r
+import org.simantics.databoard.type.VariantType;\r
+import org.simantics.scl.compiler.types.Type;\r
+import org.simantics.scl.compiler.types.Types;\r
+\r
+public class DatatypeConversion {\r
+\r
+ private static final Datatype.Visitor<Type> conversionVisitor = new Datatype.Visitor<Type>() {\r
+\r
+ @Override\r
+ public Type visit(ArrayType b) {\r
+ return Types.apply(Types.LIST, b.componentType.accept(this));\r
+ }\r
+\r
+ @Override\r
+ public Type visit(BooleanType b) {\r
+ return Types.BOOLEAN;\r
+ }\r
+\r
+ @Override\r
+ public Type visit(DoubleType b) {\r
+ return Types.DOUBLE;\r
+ }\r
+\r
+ @Override\r
+ public Type visit(FloatType b) {\r
+ return Types.FLOAT;\r
+ }\r
+\r
+ @Override\r
+ public Type visit(IntegerType b) {\r
+ return Types.INTEGER;\r
+ }\r
+\r
+ @Override\r
+ public Type visit(ByteType b) {\r
+ return Types.BYTE;\r
+ }\r
+\r
+ @Override\r
+ public Type visit(LongType b) {\r
+ return Types.LONG;\r
+ }\r
+\r
+ @Override\r
+ public Type visit(OptionalType b) {\r
+ return Types.apply(Types.MAYBE, b.componentType.accept(this));\r
+ }\r
+\r
+ @Override\r
+ public Type visit(RecordType b) {\r
+ throw new UnsupportedOperationException();\r
+ }\r
+\r
+ @Override\r
+ public Type visit(StringType b) {\r
+ return Types.STRING;\r
+ }\r
+\r
+ @Override\r
+ public Type visit(UnionType b) {\r
+ throw new UnsupportedOperationException();\r
+ }\r
+\r
+ @Override\r
+ public Type visit(VariantType b) {\r
+ throw new UnsupportedOperationException();\r
+ }\r
+\r
+ @Override\r
+ public Type visit(MapType b) {\r
+ throw new UnsupportedOperationException();\r
+ }\r
+\r
+ };\r
+\r
+ public static Type convertDatatypeToType(Datatype dataType) {\r
+ return dataType.accept(conversionVisitor);\r
+ }\r
+\r
+}\r