Skip to content

Commit 179de64

Browse files
authored
updated Cobol abstractor and libraries
1 parent efca535 commit 179de64

File tree

10 files changed

+289
-53
lines changed

10 files changed

+289
-53
lines changed

Attribute.java

Lines changed: 167 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)