1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32 package com.unitesk.atp.treedl;
33
34 import com.unitesk.atp.tool.PluginClass;
35 import com.unitesk.atp.treedl.TDL.*;
36
37 /***
38 * @author <A href="mailto:demakov@ispras.ru">Alexey Demakov</A>
39 * @version $Id: CSharpNodeFactoryGenerator.java,v 1.2 2005/11/20 21:26:55 all-x Exp $
40 */
41 public class CSharpNodeFactoryGenerator
42 extends CSharpInterfaceFactoryGenerator
43 {
44 /***
45 * {@inheritDoc}
46 */
47 public String getVersion()
48 {
49 return PluginClass.getRevision( "$Revision: 1.2 $" ) + "-alpha";
50 }
51
52 public void visitModule( Module node )
53 {
54 setFunction( "PredefinedTypeName", new PredefinedTypeNameFunction() );
55
56 generateHeader();
57
58 int indexOfLastDot = getOutClassName().lastIndexOf( '.' );
59 if( indexOfLastDot != -1 )
60 {
61 txt( "namespace " + getOutClassName().substring( 0, indexOfLastDot ) ); nl();
62 block_nl();
63 }
64
65 if( node.getOptHeader() != null )
66 {
67 txt( "//-----------------------------------------------------------------------------" ); nl();
68 txt( "// tree header" ); nl();
69 txt( "${optHeader}" ); nl();
70 txt( "//-----------------------------------------------------------------------------" ); nl();
71 nl();
72 }
73
74 String outShortClassName = getOutClassName().substring( indexOfLastDot + 1 );
75
76 txt( "public class " + outShortClassName + " : " );
77 String[] implementedInterfaceList = getImplementedInterfaceList();
78 Object oldImplementedInterfaceList
79 = setVariable( "implementedInterfaceList", implementedInterfaceList );
80 list( "i", 0, implementedInterfaceList.length, "${.implementedInterfaceList[i]}", ", " ); nl();
81 setVariable( "implementedInterfaceList", oldImplementedInterfaceList );
82 block();
83 list( "i", 0, node.sizeOptMemberList(), "${optMemberList[i]}", null ); nl();
84 unblock_nl();
85
86 if( node.getName().sizeIdList() > 1 )
87 {
88 txt( "}" ); nl();
89 }
90 }
91
92 public void visitNodeTypeDecl( NodeTypeDecl node )
93 {
94 if( node.isAbstract() ) return;
95
96 nl();
97 txt( "public virtual ${parent.name}.${name} Create${name}" );
98 int constructorParametersCount = 0;
99 for( int i = 0; i < node.sizeFullFieldList(); i++ )
100 {
101 Field field = node.getFullFieldList( i );
102
103 if( TDL_Module.isConstructorParameter( field ) )
104 {
105 pushNode( field );
106
107 nl();
108 txtif( constructorParametersCount == 0, "(", "," );
109 txt( " ${type} ${name}" );
110 constructorParametersCount++;
111
112 popNode();
113 }
114 }
115
116 switch( constructorParametersCount )
117 {
118 case 0:
119 txt( "()" );
120 break;
121 case 1:
122 txt( " )" );
123 break;
124 default:
125 nl();
126 txt( ")" );
127 break;
128 }
129 nl();
130 block_nl();
131 if( node.isAbstract() )
132 {
133 txt( "throw new InvalidOperationException( \"Create${name}\" );"); nl();
134 } else {
135 txt( "return new ${parent.name}.${name}" );
136 constructorParametersCount = 0;
137 for( int i = 0; i < node.sizeFullFieldList(); i++ )
138 {
139 Field field = node.getFullFieldList( i );
140
141 if( TDL_Module.isConstructorParameter( field ) )
142 {
143 pushNode( field );
144
145 nl();
146 txtif( constructorParametersCount == 0, "(", "," );
147 txt( " ${name}" );
148 constructorParametersCount++;
149
150 popNode();
151 }
152 }
153
154 switch( constructorParametersCount )
155 {
156 case 0:
157 txt( "();" );
158 break;
159 case 1:
160 txt( " );" );
161 break;
162 default:
163 nl();
164 txt( ");" );
165 break;
166 }
167 nl();
168 }
169 unblock_nl();
170 }
171 }