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: Java5NodeFactoryGenerator.java,v 1.4 2005/11/20 20:20:13 all-x Exp $
40 */
41 public class Java5NodeFactoryGenerator
42 extends Java5InterfaceFactoryGenerator
43 {
44 /***
45 * {@inheritDoc}
46 */
47 public String getVersion()
48 {
49 return PluginClass.getRevision( "$Revision: 1.4 $" ) + "-beta";
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( "package " + getOutClassName().substring( 0, indexOfLastDot ) + ";" ); nl();
62 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 txt( "import ${name}.*;" ); nl();
74 nl();
75
76 String outShortClassName = getOutClassName().substring( indexOfLastDot + 1 );
77
78 txt( "public class " + outShortClassName + " implements " );
79 String[] implementedInterfaceList = getImplementedInterfaceList();
80 Object oldImplementedInterfaceList
81 = setVariable( "implementedInterfaceList", implementedInterfaceList );
82 list( "i", 0, implementedInterfaceList.length, "${.implementedInterfaceList[i]}", ", " ); nl();
83 setVariable( "implementedInterfaceList", oldImplementedInterfaceList );
84 block();
85 list( "i", 0, node.sizeOptMemberList(), "${optMemberList[i]}", null ); nl();
86 unblock_nl();
87 }
88
89 public void visitNodeTypeDecl( NodeTypeDecl node )
90 {
91 if( node.isAbstract() ) return;
92
93 nl();
94 txt( "public ${name} create${name}" );
95 int constructorParametersCount = 0;
96 for( int i = 0; i < node.sizeFullFieldList(); i++ )
97 {
98 Field field = node.getFullFieldList( i );
99
100 if( TDL_Module.isConstructorParameter( field ) )
101 {
102 pushNode( field );
103
104 nl();
105 txtif( constructorParametersCount == 0, "(", "," );
106 txt( " ${type} ${name}" );
107 constructorParametersCount++;
108
109 popNode();
110 }
111 }
112
113 switch( constructorParametersCount )
114 {
115 case 0:
116 txt( "()" );
117 break;
118 case 1:
119 txt( " )" );
120 break;
121 default:
122 nl();
123 txt( ")" );
124 break;
125 }
126 nl();
127 block_nl();
128 if( node.isAbstract() )
129 {
130 txt( "throw new UnsupportedOperationException( \"create${name}\" );"); nl();
131 } else {
132 txt( "return new ${name}" );
133 constructorParametersCount = 0;
134 for( int i = 0; i < node.sizeFullFieldList(); i++ )
135 {
136 Field field = node.getFullFieldList( i );
137
138 if( TDL_Module.isConstructorParameter( field ) )
139 {
140 pushNode( field );
141
142 nl();
143 txtif( constructorParametersCount == 0, "(", "," );
144 txt( " ${name}" );
145 constructorParametersCount++;
146
147 popNode();
148 }
149 }
150
151 switch( constructorParametersCount )
152 {
153 case 0:
154 txt( "();" );
155 break;
156 case 1:
157 txt( " );" );
158 break;
159 default:
160 nl();
161 txt( ");" );
162 break;
163 }
164 nl();
165 }
166 unblock_nl();
167 }
168 }