@@ -315,11 +315,14 @@ public boolean typeCheck(Vector types, Vector entities)
315315 { cntx .add (entity ); }
316316 Vector env = new Vector ();
317317 initialExpression .typeCheck (types ,entities ,cntx ,env );
318+ System .out .println (">> Type of attribute: " + name + " is " + type + "(" + elementType + ")" );
318319 if (type == null )
319320 { type = initialExpression .type ;
320- elementType = initialExpression .elementType ;
321+ elementType = initialExpression .elementType ;
322+ type .elementType = elementType ;
321323 }
322- System .out .println (">> Type of " + initialExpression + " is " + type + "(" + elementType + ")" );
324+ System .out .println (">> Type of initialiser: " + initialExpression + " is " + type + "(" + elementType + ")" );
325+ return true ;
323326 }
324327
325328 if (type == null )
@@ -331,13 +334,35 @@ public boolean typeCheck(Vector types, Vector entities)
331334 Type t = Type .getTypeFor (tname , types , entities );
332335 if (t == null )
333336 { System .err .println ("!! Warning: null type for attribute " + name );
334- type = new Type ("OclAny" , null );
337+ // type = new Type("OclAny", null);
335338 return true ;
336339 }
340+
337341 type = t ;
342+
343+ Type et = elementType ;
344+ if (elementType != null )
345+ { String etname = elementType + "" ;
346+ et = Type .getTypeFor (etname , types , entities );
347+ if (et == null )
348+ { System .err .println ("!! Warning: null element type for attribute " + name );
349+ et = elementType ;
350+ type .elementType = elementType ;
351+ }
352+ else
353+ { elementType = et ;
354+ type .elementType = et ;
355+ }
356+ }
357+
358+ System .out .println (">> Updated type of attribute: " + name + " is " + type + "(" + elementType + ")" );
359+
338360 if (initialExpression != null &&
339361 initialExpression .type == null )
340- { initialExpression .type = type ; }
362+ { initialExpression .type = type ;
363+ initialExpression .elementType = et ;
364+ }
365+
341366 return true ;
342367 }
343368
@@ -469,6 +494,9 @@ public boolean isSet()
469494 public boolean isSequence ()
470495 { return type != null && type .isSequenceType (); }
471496
497+ public boolean isMap ()
498+ { return type != null && type .isMapType (); }
499+
472500 public boolean isTree ()
473501 { return type != null && "OclAny" .equals (type .getName ()); }
474502 // Should have an actual OclTree type, or a kind of collection.
@@ -1565,7 +1593,8 @@ public String methodDeclarationJava6()
15651593
15661594 public String methodDeclarationJava7 ()
15671595 { String res = "" ;
1568- res = " " + getType ().getJava7 (elementType ) + " " + getName ();
1596+ res = " " + getType ().getJava7 () + " " + getName ();
1597+ // getJava7(elementType)
15691598 Expression initval = initialExpression ;
15701599 if (initval != null )
15711600 { res = res + " = " + initval .queryFormJava7 (new java .util .HashMap (), true ); }
@@ -1615,7 +1644,7 @@ else if (visibility == PROTECTED)
16151644
16161645 if (!instanceScope ) { out .print ("static " ); }
16171646 if (isFinal ()) { out .print ("final " ); }
1618- type .generateJava7 (out , elementType );
1647+ type .generateJava7 (out ); // ,elementType
16191648 if (isFinal () && initialValue != null )
16201649 { out .print (getName () + " = " + initialValue + ";" ); }
16211650 else
@@ -2219,7 +2248,7 @@ public String setIndexOperation(Entity ent, Vector cons,
22192248 if (frozen ) { return "" ; }
22202249 String nme = getName ();
22212250 if (type == null || ent == null || entity == null ) // error
2222- { System .err .println ("ERROR: null type or entity in attribute " + nme );
2251+ { System .err .println ("!! ERROR: null type or entity in attribute " + nme );
22232252 return "" ;
22242253 }
22252254
@@ -2447,6 +2476,8 @@ public String setIndexOperationJava7(Entity ent, Vector cons,
24472476 }
24482477
24492478 Type eType = elementType ;
2479+ if (eType == null || "OclAny" .equals ("" + eType ))
2480+ { eType = type .elementType ; }
24502481 if (eType == null )
24512482 { eType = new Type ("OclAny" , null ); }
24522483
@@ -2500,6 +2531,75 @@ else if (!instanceScope)
25002531 return opheader + " }\n " ;
25012532 }
25022533
2534+ // setattindex operation for the entity:
2535+ public String setMapIndexOperationJava7 (Entity ent , Vector cons ,
2536+ Vector entities , Vector types )
2537+ { // setatt(String index, elementType vx)
2538+ // if ent != entity, creates subclass ent extension op for att
2539+
2540+ if (frozen ) { return "" ; }
2541+ String nme = getName ();
2542+ if (type == null || ent == null || entity == null ) // error
2543+ { System .err .println ("!! ERROR: null type or entity in attribute " + nme );
2544+ return "" ;
2545+ }
2546+
2547+ Type eType = elementType ;
2548+ if (eType == null || "OclAny" .equals ("" + eType ))
2549+ { eType = type .elementType ; }
2550+ if (eType == null )
2551+ { eType = new Type ("OclAny" , null ); }
2552+
2553+ String val = nme + "_x" ;
2554+ Attribute par = new Attribute (val ,eType ,ModelElement .INTERNAL );
2555+ // par.setElementType(elementType);
2556+ Attribute ind = new Attribute ("_key" , new Type ("String" , null ), ModelElement .INTERNAL );
2557+
2558+ Vector v1 = new Vector ();
2559+ v1 .add (ind );
2560+ v1 .add (par );
2561+ String t = eType .getJava7 ();
2562+ // if (v == null) // int or double, String or boolean
2563+ // { t = type.getName(); }
2564+ // else
2565+ // { t = "int"; }
2566+
2567+ if (ent .isInterface ())
2568+ { return " void set" + nme + "(String _key, " + t + " _x);\n " ; }
2569+
2570+
2571+ BehaviouralFeature event =
2572+ new BehaviouralFeature ("set" + nme ,v1 ,false ,null );
2573+
2574+ String qual = " " ;
2575+ String code = "" ;
2576+ String sync = "" ;
2577+
2578+ if (entity .isSequential ())
2579+ { sync = " synchronized" ; }
2580+
2581+ if (ent != entity && !entity .isInterface ())
2582+ { code = "super.set" + nme + "(_key, " + val + ");" ; }
2583+ else if (!instanceScope )
2584+ { qual = " static " ;
2585+ code = nme + ".put(_key, " + val + ");" ;
2586+ }
2587+ else
2588+ { code = nme + ".put(_key, " + val + ");" ; }
2589+
2590+ String opheader ;
2591+ opheader = "public" + sync + qual + "void set" + nme + "(String _key, " + t +
2592+ " " + val + ") { " + code ;
2593+
2594+ if (!instanceScope )
2595+ { opheader = opheader + " }\n \n " +
2596+ "public" + sync + " void localSet" + nme + "(String _key, " + t +
2597+ " " + val + ") { " ;
2598+ }
2599+
2600+ return opheader + " }\n " ;
2601+ }
2602+
25032603 public String setOperationJava7 (Entity ent , Vector cons ,
25042604 Vector entities , Vector types )
25052605 { // setatt(type attx)
@@ -2519,7 +2619,7 @@ public String setOperationJava7(Entity ent, Vector cons,
25192619
25202620 Vector v1 = new Vector ();
25212621 v1 .add (par );
2522- String t = type .getJava7 (elementType );
2622+ String t = type .getJava7 (); // (elementType)
25232623 // if (v == null) // int or double, String or boolean
25242624 // { t = type.getName(); }
25252625 // else
@@ -2600,6 +2700,8 @@ public String setIndexOperationCSharp(Entity ent, Vector cons,
26002700
26012701 Type eType = elementType ;
26022702 if (eType == null )
2703+ { eType = type .elementType ; }
2704+ if (eType == null )
26032705 { eType = new Type ("OclAny" , null ); }
26042706
26052707 String val = nme + "_x" ;
@@ -2881,7 +2983,9 @@ public String addremOperation(Entity ent)
28812983 { String res = "" ;
28822984 if (!isMultiple ()) { return res ; }
28832985 Type eType = elementType ;
2884- if (elementType == null )
2986+ if (eType == null )
2987+ { eType = type .elementType ; }
2988+ if (eType == null )
28852989 { eType = new Type ("OclAny" , null ); }
28862990
28872991 String nme = getName ();
@@ -2951,15 +3055,23 @@ else if (instanceScope)
29513055
29523056 public String addremOperationJava7 (Entity ent )
29533057 { String res = "" ;
3058+
3059+ // System.out.println("$$$ type = " + type + " elementType = " + elementType);
3060+
29543061 if (!isMultiple ()) { return res ; }
3062+
29553063 Type eType = elementType ;
2956- if (elementType == null )
3064+ if (eType == null || "OclAny" .equals ("" + eType ))
3065+ { eType = type .elementType ; }
3066+ if (eType == null )
29573067 { eType = new Type ("OclAny" , null ); }
29583068
3069+ // System.out.println("$$$ eType = " + eType);
29593070
29603071 String nme = getName ();
29613072 String attx = nme + "_x" ;
29623073 String et = eType .getJava7 ();
3074+ String wrapet = eType .typeWrapperJava7 ();
29633075 String wattx = Expression .wrap (eType ,attx );
29643076
29653077 if (ent .isInterface ())
@@ -2970,7 +3082,7 @@ else if (instanceScope)
29703082 { return " public void add" + nme + "(" + et + " " + attx + ")\n " +
29713083 " { " + nme + ".add(" + wattx + "); }\n \n " +
29723084 " public void remove" + nme + "(" + et + " " + attx + ")\n " +
2973- " { ArrayList<" + et + "> _removed" + nme + " = new ArrayList<" + et + ">();\n " +
3085+ " { ArrayList<" + wrapet + "> _removed" + nme + " = new ArrayList<" + wrapet + ">();\n " +
29743086 " _removed" + nme + ".add(" + wattx + ");\n " +
29753087 " " + nme + ".removeAll(_removed" + nme + ");\n " +
29763088 " }\n \n " ;
@@ -2979,7 +3091,7 @@ else if (instanceScope)
29793091 { return " public static void add" + nme + "(" + et + " " + attx + ")\n " +
29803092 " { " + nme + ".add(" + wattx + "); }\n \n " +
29813093 " public static void remove" + nme + "(" + et + " " + attx + ")\n " +
2982- " { ArrayList<" + et + "> _removed" + nme + " = new ArrayList<" + et + ">();\n " +
3094+ " { ArrayList<" + wrapet + "> _removed" + nme + " = new ArrayList<" + wrapet + ">();\n " +
29833095 " _removed" + nme + ".add(" + wattx + ");\n " +
29843096 " " + nme + ".removeAll(_removed" + nme + ");\n " +
29853097 " }\n \n " ;
@@ -2990,7 +3102,10 @@ public String addremOperationCSharp(Entity ent)
29903102 { String res = "" ;
29913103 if (!isMultiple ()) { return res ; }
29923104 Type eType = elementType ;
2993- if (elementType == null )
3105+ if (eType == null )
3106+ { eType = type .elementType ; }
3107+
3108+ if (eType == null )
29943109 { JOptionPane .showMessageDialog (null , "Warning: null element type in attribute " + this ,
29953110 "" , JOptionPane .ERROR_MESSAGE );
29963111 eType = new Type ("OclAny" , null );
@@ -3213,7 +3328,7 @@ public String setAllOperationJava7(String ename)
32133328 String ex = ename .toLowerCase () + "_x" ;
32143329 String nme = getName ();
32153330 String update = "Controller.inst().set" + nme + "(" + ex + ",val);" ;
3216- String typ = type .getJava7 (elementType );
3331+ String typ = type .getJava7 (); // (elementType)
32173332
32183333 String es = ename .toLowerCase () + "_s" ;
32193334 String res = " public static void setAll" + nme ;
@@ -3361,7 +3476,7 @@ public String getOperationJava6(Entity ent)
33613476
33623477 public String getOperationJava7 (Entity ent )
33633478 { String nme = getName ();
3364- String tn = type .getJava7 (elementType );
3479+ String tn = type .getJava7 (); // (elementType)
33653480 String qual = " " ;
33663481 if (!instanceScope )
33673482 { qual = " static " ; }
@@ -3499,7 +3614,7 @@ public String getAllOperationJava7(Entity ent, String ename)
34993614 { elem = ename + "." + nme ; }
35003615 String item = elem ;
35013616 String wtype = type .typeWrapperJava7 ();
3502- String tname = type .getJava7 (elementType );
3617+ String tname = type .getJava7 (); // (elementType)
35033618 if (tname .equals ("boolean" ))
35043619 { item = "new Boolean(" + elem + ")" ; }
35053620 else if (tname .equals ("String" ))
@@ -3692,7 +3807,7 @@ public String getAllOrderedOperationJava7(Entity ent, String ename)
36923807 String item = elem ;
36933808 if (isStatic ())
36943809 { item = ename + "." + nme ; }
3695- String tname = type .getJava7 (elementType );
3810+ String tname = type .getJava7 (); // (elementType)
36963811 String wtype = type .typeWrapperJava7 ();
36973812
36983813 if (tname .equals ("boolean" ))
@@ -4046,7 +4161,7 @@ public Vector addremOperationsCodeJava6(Entity ent)
40464161 public Vector senOperationsCodeJava7 (Vector cons ,
40474162 Entity ent ,Vector entities ,Vector types )
40484163 { Vector res = new Vector ();
4049- if (frozen ) { return res ; } // ??
4164+ if (frozen || type == null ) { return res ; } // ??
40504165 String opheader = "" ;
40514166 String nme = getName ();
40524167 String ename = ent .getName ();
@@ -4056,6 +4171,9 @@ public Vector senOperationsCodeJava7(Vector cons,
40564171 String attx = nme + "_x" ;
40574172 BasicExpression attxbe = new BasicExpression (attx );
40584173
4174+ // System.out.println("$$$ Type of " + nme + " is " +
4175+ // type + " " + elementType);
4176+
40594177 Attribute epar = new Attribute (ex ,new Type (ent ),ModelElement .INTERNAL );
40604178 Attribute apar = new Attribute (attx ,type ,ModelElement .INTERNAL );
40614179 apar .setElementType (elementType );
@@ -4066,10 +4184,14 @@ public Vector senOperationsCodeJava7(Vector cons,
40664184 v1 .add (apar );
40674185 BehaviouralFeature event =
40684186 new BehaviouralFeature ("set" + nme ,v1 ,false ,null );
4069- String t = type .getJava7 (elementType );
4070- String et = "Object" ;
4071- if (elementType != null )
4072- { et = elementType .getJava7 (); }
4187+ String t = type .getJava7 (); // (elementType)
4188+
4189+ Type eType = elementType ;
4190+ if (eType == null || "OclAny" .equals (eType + "" ))
4191+ { eType = type .elementType ; }
4192+ if (eType == null )
4193+ { eType = new Type ("OclAny" , null ); }
4194+ String et = eType .getJava7 ();
40734195
40744196 // if (vals == null)
40754197 // { t = type.getName(); }
@@ -4094,6 +4216,11 @@ else if (instanceScope)
40944216 ex + ", int _ind, " + et + " " + attx + ") \n { " +
40954217 ex + ".set" + nme + "(_ind, " + attx + "); }\n \n " ;
40964218 }
4219+ else if (type .isMap ())
4220+ { opheader = "public void set" + nme + "(" + ename + " " +
4221+ ex + ", String _key, " + et + " " + attx + ") \n { " +
4222+ ex + ".set" + nme + "(_key, " + attx + "); }\n \n " ;
4223+ }
40974224 opheader = opheader + "public void set" + nme + "(" + ename + " " +
40984225 ex + ", " + t +
40994226 " " + attx + ") \n { " +
@@ -4142,11 +4269,21 @@ else if (cc.allFeaturesUsedIn().contains(nme) && cc.getEvent() == null)
41424269
41434270 public Vector addremOperationsCodeJava7 (Entity ent )
41444271 { Vector res = new Vector ();
4145- if (!isMultiple ()) { return res ; }
4146- String et = "Object" ;
4147- if (elementType != null )
4148- { et = elementType .getJava7 (); }
4272+ if (!isMultiple ())
4273+ { return res ; }
4274+ if (type == null )
4275+ { return res ; }
4276+ if (type .isMap ())
4277+ { return res ; }
41494278
4279+ Type eType = elementType ;
4280+ if (eType == null || "OclAny" .equals (eType + "" ))
4281+ { eType = type .elementType ; }
4282+ if (eType == null )
4283+ { eType = new Type ("OclAny" , null ); }
4284+
4285+ String et = eType .getJava7 ();
4286+
41504287 String opheader = "" ;
41514288 String ename = ent .getName ();
41524289 String ex = ename .toLowerCase () + "x" ;
@@ -4699,6 +4836,10 @@ public String getCreateCodeJava7(Entity ent, String ex)
46994836 // else if (initialValue != null &&
47004837 // !initialValue.equals(""))
47014838 // { ini = initialValue; }
4839+ else if (initialExpression != null )
4840+ { ini = initialExpression .queryFormJava7 (
4841+ new java .util .HashMap (), true );
4842+ }
47024843 else
47034844 { ini = type .getDefaultJava7 (); }
47044845 if (ini == null ) { return "" ; }
0 commit comments