[Ooc-checkins] libpobj/src/PObj CodeGenJava.Mod,1.100,1.101
Brought to you by:
mva
From: Michael v. A. <mv...@us...> - 2006-08-04 10:18:55
|
Update of /cvsroot/ooc/libpobj/src/PObj In directory sc8-pr-cvs3.sourceforge.net:/tmp/cvs-serv1871/src/PObj Modified Files: CodeGenJava.Mod Log Message: Put class definition into separate static methods. Index: CodeGenJava.Mod =================================================================== RCS file: /cvsroot/ooc/libpobj/src/PObj/CodeGenJava.Mod,v retrieving revision 1.100 retrieving revision 1.101 diff -u -d -r1.100 -r1.101 --- CodeGenJava.Mod 3 Aug 2006 07:13:27 -0000 1.100 +++ CodeGenJava.Mod 4 Aug 2006 10:18:50 -0000 1.101 @@ -2244,10 +2244,10 @@ RAISES IO.Error; CONST newFile = {FileChannel.write, FileChannel.tmpFile}; - genIdFactory = 0; (* currently, there is at most one id factory *) - genType = 1; (* recycleable type names *) - genHashMap = 2; (* currently, there is at most one id hash map *) - genDurarableType = 3; (* durable type names *) + genIdFactory = 0; (* currently, there is at most one id factory *) + genType = 1; (* recycleable type names *) + genHashMap = 2; (* currently, there is at most one id hash map *) + genDurableType = 3; (* durable type names *) TYPE NameGenerator = RECORD next: LONGINT; (* number to be used for next type name *) @@ -2265,10 +2265,11 @@ wGlobals: IO.ByteChannel; sb: StringBuffer.StringBuffer; - ng: ARRAY genDurarableType+1 OF NameGenerator; + ng: ARRAY genDurableType+1 OF NameGenerator; idFactory: Dictionary.Dictionary(STRING, STRING); finishedTable: Dictionary.Dictionary(MetaData.Class, Object.Object); fixupStatm, fixupDecl: ArrayList.ArrayList(STRING); + staticMethods: ArrayList.ArrayList(StringBuffer.StringBuffer); PROCEDURE Ln(); VAR i: LONGINT; @@ -2283,17 +2284,9 @@ BEGIN IntStr.IntToStr(gen.next, str); INC(gen.next); - RETURN prefix+Object.NewLatin1(str); + RETURN prefix+"["+Object.NewLatin1(str)+"]"; END GenerateName; - PROCEDURE AppendIfNewName(VAR gen: NameGenerator; string: STRING); - BEGIN - IF (gen.next-1 > gen.max) THEN - sb.Append(string); - gen.max := gen.next-1; - END; - END AppendIfNewName; - PROCEDURE TableOfClass(te: MetaData.TableExpr): STRING; VAR c: STRING; @@ -2345,19 +2338,26 @@ ELSE x := GenerateName(ng[genIdFactory], "idFactory"); Ln; - AppendIfNewName(ng[genIdFactory], 'IdFactory '); sb.Append(x+' = new IdFactory("'+seqName+'");'); idFactory.Set(seqName, x); RETURN x; END; END AddIdFactory; - PROCEDURE AddType(t: MetaData.Type; referenceFixup: STRING): STRING; + PROCEDURE AddType(sb: StringBuffer.StringBuffer; + t: MetaData.Type; referenceFixup: STRING): STRING; VAR name, typeName, fixupName, x, hashName, mapName, baseType: STRING; value: Object.Object; i: LONGINT; + PROCEDURE Ln(); + VAR i: LONGINT; + BEGIN + sb.AppendLn; + FOR i := 1 TO indent DO sb.Append(indentLevel); END; + END Ln; + PROCEDURE RealToInt(x: LONGREAL): STRING; VAR str: ARRAY 64 OF CHAR; @@ -2370,7 +2370,7 @@ WITH t: MetaData.BooleanWrapper DO (* need to have an instance of the wrapper's base type _before_ creating the type of the BooleanWrapper *) - baseType := AddType(t.baseType, NIL); + baseType := AddType(sb, t.baseType, NIL); ELSE baseType := NIL; END; @@ -2379,7 +2379,6 @@ typeName := t.Name(module, MetaData.typeClassJavaNoMap); fixupName := NIL; Ln; - AppendIfNewName(ng[genType], "AttributeType "); sb.Append(name+" = "); WITH t: MetaData.String DO sb.Append("new "+typeName+"("); @@ -2440,7 +2439,7 @@ x := TableOfClass(t.targetClass); ELSE x := "null"; - fixupName := GenerateName(ng[genDurarableType], "fixupType"); + fixupName := GenerateName(ng[genDurableType], "fixupType"); fixupStatm.Append("((Reference)"+fixupName+").setTable("+ TableOfClass(t.targetClass)+");"); IF (referenceFixup # NIL) THEN @@ -2471,7 +2470,7 @@ AttributeName(t.targetClass, t.refToParentField); ELSE x := "null, null"; - fixupName := GenerateName(ng[genDurarableType], "fixupType"); + fixupName := GenerateName(ng[genDurableType], "fixupType"); fixupStatm.Append("((NestedTableType)"+fixupName+").setTable("+ TableOfClass(t.targetClass)+");"); fixupStatm.Append("((NestedTableType)"+fixupName+").setParentRef("+ @@ -2511,7 +2510,7 @@ IF (fixupName # NIL) THEN Ln; - sb.Append("AttributeType "+fixupName+" = "+name+";"); + sb.Append(fixupName+" = "+name+";"); END; IF (t.map = NIL) THEN @@ -2519,7 +2518,6 @@ ELSE hashName := GenerateName(ng[genHashMap], "hashMap"); Ln; - AppendIfNewName(ng[genHashMap], "HashMap "); sb.Append(hashName+" = new HashMap();"); FOR i := 0 TO t.map.size-1 DO Ln; @@ -2545,16 +2543,24 @@ END; mapName := GenerateName(ng[genType], "type"); Ln; - AppendIfNewName(ng[genType], "AttributeType "); sb.Append(mapName+" = new MappingType("+name+", "+hashName+");"); ng[genHashMap].next := 1; (* reset name generator for hash maps *) RETURN mapName; END; END AddType; - PROCEDURE AddAttribute(f: MetaData.Field; class: MetaData.Class); + PROCEDURE AddAttribute(sb: StringBuffer.StringBuffer; + f: MetaData.Field; class: MetaData.Class); VAR type, label, referenceFixup: STRING; + + PROCEDURE Ln(); + VAR i: LONGINT; + BEGIN + sb.AppendLn; + FOR i := 1 TO indent DO sb.Append(indentLevel); END; + END Ln; + BEGIN WITH f: MetaData.IdField DO label := "null"; @@ -2568,7 +2574,7 @@ END; referenceFixup := TableOfClass(class)+".resolveReferenceAttribute("+ AttributeName(class, f)+");"; - type := AddType(f.type, referenceFixup); + type := AddType(sb, f.type, referenceFixup); END; Ln; @@ -2624,40 +2630,51 @@ Ln; Ln; - sb.Append("static {"); - INC(indent); IF (LEN(module.tableExprs^) # 0) THEN Ln; - sb.Append("Table t;"); + sb.Append("private static Table t;"); Ln; - sb.Append("Attribute a;"); + sb.Append("private static Attribute a;"); Ln; - sb.Append("PseudoAttribute pa;"); + sb.Append("private static PseudoAttribute pa;"); Ln; - sb.Append("Parameter p;"); + sb.Append("private static Parameter p;"); Ln; - sb.Append("Parameter[] output;"); + sb.Append("private static Parameter[] output;"); Ln; - sb.Append("Select s;"); + sb.Append("private static Select s;"); + Ln; + sb.Append("private static AttributeType[] fixupType = new AttributeType[1000];"); + Ln; + sb.Append("private static AttributeType[] type = new AttributeType[100];"); + Ln; + sb.Append("private static HashMap[] hashMap = new HashMap[100];"); + Ln; + sb.Append("private static IdFactory[] idFactory = new IdFactory[100];"); END; IF (LEN(module.commands^) # 0) THEN Ln; - sb.Append("Command c;"); + sb.Append("private static Command c;"); END; IF (LEN(module.forms^) # 0) OR (LEN(module.tableExprs^) # 0) THEN Ln; - sb.Append("FormEntry e;"); + sb.Append("private static FormEntry e;"); Ln; - sb.Append("FormEntry[] entries;"); + sb.Append("private static FormEntry[] entries;"); Ln; - sb.Append("FormDecl form;"); + sb.Append("private static FormDecl form;"); END; IF (LEN(module.workflows^) # 0) THEN Ln; - sb.Append("Workflow wf;"); + sb.Append("private static Workflow wf;"); Ln; - sb.Append("Waitstate[] tr;"); + sb.Append("private static Waitstate[] tr;"); END; + + Ln; + Ln; + sb.Append("static {"); + INC(indent); Ln; Ln; @@ -2666,7 +2683,7 @@ FOR i := 0 TO LEN(module.types^)-1 DO typeDecl := module.types[i]; - name := AddType(typeDecl.type, NIL); + name := AddType(sb, typeDecl.type, NIL); memberName := "type"+typeDecl.name; Ln; sb.Append(memberName+" = "+name+";"); @@ -2675,9 +2692,11 @@ END GlobalsStart; PROCEDURE GlobalsEnd(packageName: STRING; + methods: ArrayList.ArrayList(StringBuffer.StringBuffer); statms, decls: ArrayList.ArrayList(STRING)); VAR i: LONGINT; + sb2: StringBuffer.StringBuffer; BEGIN indent := 3; @@ -2710,6 +2729,10 @@ sb.Append(decls.Get(i)); END; + FOR sb2 IN methods.IterElements() DO + sb.Append(sb2); + END; + DEC(indent); Ln; sb.Append("} // "+packageName+".Globals"); @@ -2734,10 +2757,18 @@ END WriteBuffer; PROCEDURE ClassGlobals(packageName: STRING; - class: MetaData.Class); + class: MetaData.Class): StringBuffer.StringBuffer; VAR - i: LONGINT; + i, indent: LONGINT; col: MetaData.Column; + sb: StringBuffer.StringBuffer; + + PROCEDURE Ln(); + VAR i: LONGINT; + BEGIN + sb.AppendLn; + FOR i := 1 TO indent DO sb.Append(indentLevel); END; + END Ln; PROCEDURE AddField(f: MetaData.Field); VAR @@ -2749,7 +2780,7 @@ INC(indent); WITH f: MetaData.PseudoField DO - type := AddType(f.type, NIL); + type := AddType(sb, f.type, NIL); Ln; sb.Append('pa = new PseudoAttribute("'+f.schemaName+'", "'+ @@ -2762,7 +2793,7 @@ Ln; sb.Append(AttributeName(class, f)+" = pa;"); ELSE - AddAttribute(f, class); + AddAttribute(sb, f, class); Ln; sb.Append("t.addAttribute(a);"); @@ -2795,7 +2826,7 @@ WITH c: MetaData.Unique DO name := c.Name(class.module, class, MetaData.constraintMemberJava); - fixupDecl.Append("public static final Constraint "+name+";"); + fixupDecl.Append("public static Constraint "+name+";"); Ln; IF c.primaryKey THEN @@ -2848,10 +2879,16 @@ END AddConstraint; BEGIN - indent := 3; + sb := NEW(StringBuffer.StringBuffer, 2048); + indent := 1; Ln; Ln; + sb.Append("private static void init"); + sb.Append(class.name); + sb.Append("() throws ClassNotFoundException { "); + INC(indent); + Ln; sb.Append('t = dict.newTable("'+class.schemaName+'", "'+class.label+ '", '+TableOfClass(class.baseClass)+', new Attribute[0]);'); @@ -2889,6 +2926,13 @@ sb.Append(TableOfClass(class)+" = t;"); finishedTable.Set(class, NIL); ng[genIdFactory].next := 1; (* reset name generator for id factories *) + + DEC(indent); + Ln; + sb.Append("} // init"); + sb.Append(class.name); + sb.Append("()"); + RETURN sb; END ClassGlobals; PROCEDURE EntryListVar(): STRING; @@ -2979,7 +3023,7 @@ BEGIN WITH e: MetaData.TextAreaEntry DO - type := AddType(e.type, NIL); + type := AddType(sb, e.type, NIL); Ln; sb.Append(varName+' = new TextAreaEntry("'+e.name+'", '+type+", "+ QuotedString(e.label)+", "+ @@ -2995,7 +3039,7 @@ QuotedString(e.label)+", "+Bool(e.null)+');'); AddTooltip(varName, e.tooltip); | e: MetaData.InputEntry DO - type := AddType(e.type, NIL); + type := AddType(sb, e.type, NIL); Ln; sb.Append(varName+' = new InputEntry("'+e.name+'", '+type+", "+ Layout(e.layout)+", "+QuotedString(e.label)+", "+ @@ -3167,7 +3211,7 @@ sb.Append("// "+f.schemaName+" / "+f.name); INC(indent); - type := AddType(f.type, NIL); + type := AddType(sb, f.type, NIL); Ln; sb.Append('p = new Parameter("'+f.name+'", "'+f.schemaName+'", '+ @@ -3409,6 +3453,7 @@ finishedTable := NEW(Dictionary.Dictionary(MetaData.Class, Object.Object)); fixupStatm := NEW(ArrayList.ArrayList(STRING), 16); fixupDecl := NEW(ArrayList.ArrayList(STRING), 16); + staticMethods := NEW(ArrayList.ArrayList(StringBuffer.StringBuffer), 16); sb := NEW(StringBuffer.StringBuffer, 4*1024); FOR i := 0 TO LEN(cd.modules^)-1 DO @@ -3424,7 +3469,7 @@ Files.MakeDirs(Path.DirName(fileName), Files.defaultMode); wGlobals := FileChannel.Open(fileName, newFile); END; - FOR j := genIdFactory TO genDurarableType DO + FOR j := genIdFactory TO genDurableType DO ng[j].next := 1; ng[j].max := 0; END; genIdEntryList := 0; @@ -3442,7 +3487,9 @@ WriteFile("class", FileName(baseDir, module, class, TRUE), sb); (* write the class's section of the Globals.java file *) - ClassGlobals(module.javaPackage, class); + staticMethods.Append(ClassGlobals(module.javaPackage, class)); + Ln; + sb.Append("init"+class.name+"();"); WriteBuffer(wGlobals, sb); (* write a rudimentary application class, unless the file @@ -3499,10 +3546,11 @@ WriteBuffer(wGlobals, sb); END; - GlobalsEnd(module.javaPackage, fixupStatm, fixupDecl); + GlobalsEnd(module.javaPackage, staticMethods, fixupStatm, fixupDecl); WriteBuffer(wGlobals, sb); fixupStatm.Clear(); fixupDecl.Clear(); + staticMethods.Clear(); wGlobals.CloseAndRegister(); END; |