X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=bundles%2Forg.simantics.modeling%2Fsrc%2Forg%2Fsimantics%2Fmodeling%2FSCLTypeUtils.java;h=eeabbd960b4e6583bc0a05d35d2b89998e5f8883;hb=HEAD;hp=d3c7310e4ccf23c47350224f99fc0b3a45574082;hpb=0ae2b770234dfc3cbb18bd38f324125cf0faca07;p=simantics%2Fplatform.git diff --git a/bundles/org.simantics.modeling/src/org/simantics/modeling/SCLTypeUtils.java b/bundles/org.simantics.modeling/src/org/simantics/modeling/SCLTypeUtils.java index d3c7310e4..eeabbd960 100644 --- a/bundles/org.simantics.modeling/src/org/simantics/modeling/SCLTypeUtils.java +++ b/bundles/org.simantics.modeling/src/org/simantics/modeling/SCLTypeUtils.java @@ -13,13 +13,19 @@ import org.simantics.databoard.type.LongType; import org.simantics.databoard.type.StringType; import org.simantics.db.layer0.request.PropertyInfo; import org.simantics.scl.compiler.types.TCon; +import org.simantics.scl.compiler.types.TVar; import org.simantics.scl.compiler.types.Type; import org.simantics.scl.compiler.types.Types; import org.simantics.scl.compiler.types.kinds.Kinds; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; public class SCLTypeUtils { + private static final Logger LOGGER = LoggerFactory.getLogger(SCLTypeUtils.class); private static final THashMap TYPE_MAP = new THashMap(); + private static final TVar STAR = Types.var(Kinds.STAR); + private static void add(TCon type) { TYPE_MAP.put(type.name, type); } @@ -54,9 +60,19 @@ public class SCLTypeUtils { TYPE_MAP.put("Vector Float", Types.vector(Types.FLOAT)); TYPE_MAP.put("Vector Double", Types.vector(Types.DOUBLE)); TYPE_MAP.put("Vector String", Types.vector(Types.STRING)); - - add(Types.BYTE_ARRAY); + TYPE_MAP.put("ByteArray", Types.BYTE_ARRAY); + + // #83: L0.typeResource + TCon variable = Types.con("Simantics/Variables", "Variable"); + add(variable); + TYPE_MAP.put("Variable -> Resource -> Resource", + Types.functionE(new Type[] {variable, Types.RESOURCE}, Types.READ_GRAPH, Types.RESOURCE)); + add((TCon)Types.RESOURCE); + add(Types.con("Simantics/ChangeInformation", "ChangeInformation")); // MOD.ChangeInformation + add(Types.con("Simantics/GUID", "GUID")); // L0.GUID + add(Types.con("Simantics/Variables", "StructuredProperty")); // L0.methods + add(Types.con("Simantics/Variables", "ValueAccessor")); // L0.ValueAccessor add(Types.con("Simantics/Variables", "VariableMap")); } @@ -68,8 +84,8 @@ public class SCLTypeUtils { public static Type getType(String typeText) { Type type = TYPE_MAP.get(typeText); if(type == null) { - System.err.println("SCLTypeUtils.getType cannot transform '" + typeText + "' to type. Returns a as default."); - return Types.var(Kinds.STAR); + LOGGER.warn("SCLTypeUtils.getType cannot transform '" + typeText + "' to type. Returns a as default."); + return STAR; } return type; } @@ -92,19 +108,24 @@ public class SCLTypeUtils { else if(dataType instanceof ArrayType) return Types.list(getType(((ArrayType)dataType).componentType)); else { - System.err.println("SCLTypeUtils.getType cannot transform data type '" + dataType + "' to type. Returns a as default."); - return Types.var(Kinds.STAR); + LOGGER.warn("SCLTypeUtils.getType cannot transform data type '" + dataType + "' to type. Returns a as default."); + return STAR; } } - public static Type getType(PropertyInfo propertyInfo) { + public static Type getType(PropertyInfo propertyInfo, boolean warnOfNoTypeInformation) { if(propertyInfo.requiredValueType != null) return getType(propertyInfo.requiredValueType); else if(propertyInfo.requiredDatatype != null) return getType(propertyInfo.requiredDatatype); else { - System.err.println(propertyInfo.name + " doesn't have type information. Returns a as default."); - return Types.var(Kinds.STAR); + if (warnOfNoTypeInformation) + LOGGER.warn(propertyInfo.name + " doesn't have type information. Returns a as default."); + return STAR; } } + + public static Type getType(PropertyInfo propertyInfo) { + return getType(propertyInfo, propertyInfo.isHasProperty); + } }