@@ -780,8 +780,14 @@ public static void updateVariableType(Expression lhs, Expression rhs)
780780 { if (lhs instanceof BasicExpression)
781781 { BasicExpression be = (BasicExpression) lhs;
782782 if (be.variable != null)
783- { Type elemType = rhs.getElementType();
783+ { Type elemType = rhs.getElementType();
784+
785+ System.out.println(">>> RHS element type: " + elemType);
786+
784787 Type oldElemType = be.variable.getElementType();
788+
789+ System.out.println(">>> old element type: " + oldElemType);
790+
785791 be.variable.setElementType(
786792 Type.refineType(oldElemType,elemType));
787793 System.out.println(">> From " + lhs + " := " + rhs + " deduced element type " + be.variable.getElementType() + " for " + be.data);
@@ -2091,7 +2097,7 @@ public String toAST()
20912097 { res = res + " ( ";
20922098
20932099 if (parameters.size() > 0)
2094- { res = res + "(ParameterArgument "; }
2100+ { res = res + " (ParameterArguments "; }
20952101
20962102 for (int i = 0; i < parameters.size(); i++)
20972103 { res = res + ((Expression) parameters.get(i)).toAST();
@@ -2102,7 +2108,7 @@ public String toAST()
21022108 if (parameters.size() > 0)
21032109 { res = res + " ) "; }
21042110
2105- res = res + " )";
2111+ res = res + " ) ";
21062112 }
21072113
21082114 if (arrayIndex != null)
@@ -2255,7 +2261,7 @@ else if (type != null && type.elementType != null)
22552261 out.println(res + ".elementType = " + tet);
22562262 }
22572263 else
2258- { System.err.println("Warning!: no element type for " + this);
2264+ { System.err.println("!!! Warning!: no element type for " + this);
22592265 out.println(res + ".elementType = " + tname);
22602266 }
22612267
@@ -3126,6 +3132,8 @@ public boolean typeCheck(final Vector types, final Vector entities,
31263132 "OclDate".equals(data) || "OclAny".equals(data) ||
31273133 "OclType".equals(data) || "OclFile".equals(data) ||
31283134 "OclRandom".equals(data) ||
3135+ "OclAttribute".equals(data) ||
3136+ "OclOperation".equals(data) ||
31293137 Type.isOclExceptionType(data) ||
31303138 "OclProcess".equals(data) ||
31313139 "OclProcessGroup".equals(data))
@@ -3239,6 +3247,7 @@ else if (objectRef.elementType != null && objectRef.elementType.isEntity())
32393247 { type = new Type("OclDate", null);
32403248 umlkind = UPDATEOP;
32413249 isStatic = true;
3250+ entity = (Entity) ModelElement.lookupByName("OclDate",entities);
32423251 multiplicity = ModelElement.ONE;
32433252 // set the formal parameters
32443253 if (parameters != null && parameters.size() > 0)
@@ -3332,16 +3341,21 @@ else if (createdClass.startsWith("OclIterator_String"))
33323341 { type = new Type("long", null);
33333342 umlkind = ATTRIBUTE;
33343343 multiplicity = ModelElement.ONE;
3335-
3344+ entity = (Entity) ModelElement.lookupByName("OclDate",entities);
3345+
33363346 return true;
33373347 }
33383348 }
33393349
33403350 if ("getSystemTime".equals(data) && "OclDate".equals(objectRef + ""))
33413351 { type = new Type("long", null);
33423352 umlkind = QUERY;
3343- isStatic = true;
3353+ isStatic = true;
3354+ entity = (Entity) ModelElement.lookupByName("OclDate",entities);
3355+
33443356 multiplicity = ModelElement.ONE;
3357+ entity =
3358+ (Entity) ModelElement.lookupByName("OclDate",entities);
33453359
33463360 return true;
33473361 }
@@ -3352,7 +3366,8 @@ else if (createdClass.startsWith("OclIterator_String"))
33523366 objectRef.type.getName().equals("OclDate"))
33533367 { umlkind = QUERY;
33543368 multiplicity = ModelElement.ONE;
3355- type = new Type("long", null);
3369+ type = new Type("long", null);
3370+ entity = (Entity) ModelElement.lookupByName("OclDate",entities);
33563371 return true;
33573372 }
33583373 }
@@ -3364,6 +3379,8 @@ else if (createdClass.startsWith("OclIterator_String"))
33643379 { type = new Type("void", null);
33653380 umlkind = UPDATEOP;
33663381 multiplicity = ModelElement.ONE;
3382+ entity =
3383+ (Entity) ModelElement.lookupByName("OclDate",entities);
33673384 // set the formal parameters
33683385 if (parameters != null && parameters.size() > 0)
33693386 { Expression par1 = (Expression) parameters.get(0);
@@ -3383,7 +3400,8 @@ else if (createdClass.startsWith("OclIterator_String"))
33833400 objectRef.type.getName().equals("OclDate"))
33843401 { type = new Type("boolean", null);
33853402 umlkind = QUERY;
3386- multiplicity = ModelElement.ONE;
3403+ multiplicity = ModelElement.ONE;
3404+ entity = (Entity) ModelElement.lookupByName("OclDate",entities);
33873405 // set the formal parameters
33883406 if (parameters != null && parameters.size() > 0)
33893407 { Expression par1 = (Expression) parameters.get(0);
@@ -3403,7 +3421,9 @@ else if (createdClass.startsWith("OclIterator_String"))
34033421 objectRef.type.getName().equals("OclDate"))
34043422 { type = new Type("boolean", null);
34053423 umlkind = QUERY;
3406- multiplicity = ModelElement.ONE;
3424+ multiplicity = ModelElement.ONE;
3425+ entity =
3426+ (Entity) ModelElement.lookupByName("OclDate",entities);
34073427 if (parameters != null && parameters.size() > 0)
34083428 { Expression par1 = (Expression) parameters.get(0);
34093429 Attribute fpar1 = new Attribute("d",
@@ -3851,8 +3871,10 @@ else if (data.equals("size") || data.equals("floor") || data.equals("count") ||
38513871 { type = new Type("int",null);
38523872 elementType = type;
38533873 }
3854- else if (data.equals("sort") || data.equals("characters") ||
3855- data.equals("sortedBy") || data.equals("asSequence") ||
3874+ else if (data.equals("sort") ||
3875+ data.equals("characters") ||
3876+ data.equals("sortedBy") ||
3877+ data.equals("asSequence") ||
38563878 data.equals("allInstances"))
38573879 { type = new Type("Sequence",null);
38583880 elementType = objectRef.elementType;
@@ -3910,6 +3932,7 @@ else if (data.equals("reverse") ||
39103932 data.equals("tail") ||
39113933 data.equals("front") ||
39123934 data.equals("insertAt") ||
3935+ data.equals("insertInto") ||
39133936 data.equals("setAt"))
39143937 { type = objectRef.getType(); // Sequence or String
39153938 elementType = objectRef.elementType;
@@ -4507,7 +4530,8 @@ else if (resType == null || resType.typeMultiplicity() == ModelElement.ONE)
45074530 private void adjustTypeForArrayIndex()
45084531 { // if there is an arrayIndex, make type = elementType, etc
45094532
4510- if (arrayIndex != null && "String".equals(type + ""))
4533+ if (arrayIndex != null && type != null &&
4534+ "String".equals(type.getName()))
45114535 { elementType = new Type("String", null);
45124536 multiplicity = ModelElement.ONE;
45134537 }
0 commit comments