View Javadoc

1   /*
2    * Copyright (c) 2001-2005,
3    * RedVerst Group, ISP RAS http://www.ispras.ru
4    * All rights reserved.
5    *
6    * Redistribution and use in source and binary forms, with or without
7    * modification, are permitted provided that the following conditions are met:
8    *
9    * 1. Redistributions of source code must retain the above copyright notice, this
10   *    list of conditions and the following disclaimer.
11   *
12   * 2. Redistributions in binary form must reproduce the above copyright notice,
13   *    this list of conditions and the following disclaimer in the documentation
14   *    and/or other materials provided with the distribution.
15   *
16   * 3. The names "ATP", "TreeDL", "RedVerst", "ISP RAS"
17   *    may not be used to endorse or promote products derived from this software
18   *    without specific prior written permission.
19   *
20   * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
21   * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
22   * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
23   * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
24   * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
25   * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
26   * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
27   * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
28   * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
29   * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
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: Java5NullFactoryGenerator.java,v 1.4 2005/11/20 20:20:13 all-x Exp $
40   */
41  public class Java5NullFactoryGenerator
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          if( node.getOptHeader() != null )
65          {
66              txt( "//-----------------------------------------------------------------------------" ); nl();
67              txt( "// tree header" ); nl();
68              txt( "${optHeader}" ); nl();
69              txt( "//-----------------------------------------------------------------------------" ); nl();
70              nl();
71          }
72          txt( "import ${name}.*;" ); nl();
73          nl();
74  
75          String outShortClassName = getOutClassName().substring( indexOfLastDot + 1 );
76  
77          txt( "public class " + outShortClassName + " implements " );
78          String[] implementedInterfaceList = getImplementedInterfaceList();
79          Object oldImplementedInterfaceList
80              = setVariable( "implementedInterfaceList", implementedInterfaceList );
81          list( "i", 0, implementedInterfaceList.length, "${.implementedInterfaceList[i]}", ", " ); nl();
82          setVariable( "implementedInterfaceList", oldImplementedInterfaceList );
83          block();
84          list( "i", 0, node.sizeOptMemberList(), "${optMemberList[i]}", null ); nl();
85          unblock_nl();
86      }
87  
88      public void visitNodeTypeDecl( NodeTypeDecl node )
89      {
90          if( node.isAbstract() ) return;
91              
92          nl();
93          txt( "public ${name} create${name}" );
94          int constructorParametersCount = 0;
95          for( int i = 0; i < node.sizeFullFieldList(); i++ )
96          {
97              Field field = node.getFullFieldList( i );
98  
99              if( TDL_Module.isConstructorParameter( field ) )
100             {
101                 pushNode( field );
102 
103                 nl();
104                 txtif( constructorParametersCount == 0, "(", "," );
105                 txt( " ${type} ${name}" );
106                 constructorParametersCount++;
107 
108                 popNode();
109             }
110         }
111 
112         switch( constructorParametersCount )
113         {
114         case 0:
115             txt( "()" );
116             break;
117         case 1:
118             txt( " )" );
119             break;
120         default:
121             nl();
122             txt( ")" );
123             break;
124         }
125         nl();
126         block_nl();
127         txt( "return null;"); nl();
128         unblock_nl();
129     }
130 }