LTP GCOV extension - code coverage report
Current view: directory - src/cpp/dev/idlc/back/lang_java - javainfo.cpp
Test: YAORB-0.2.info
Date: 2006-02-27 Instrumented lines: 109
Code covered: 89.0 % Executed lines: 97

       1                 : //==============================================================================
       2                 : // File <$/src/cpp/dev/idlc/back/lang_java/javainfo.cpp>
       3                 : // This file is part of YaOrb : Yet Another Object Request Broker,
       4                 : // Copyright (c) 2000-2003, 2006, Marc Alff.
       5                 : //
       6                 : // This program is free software; you can redistribute it and/or
       7                 : // modify it under the terms of the GNU General Public License
       8                 : // as published by the Free Software Foundation; either version 2
       9                 : // of the License, or (at your option) any later version.
      10                 : //
      11                 : // This program is distributed in the hope that it will be useful,
      12                 : // but WITHOUT ANY WARRANTY; without even the implied warranty of
      13                 : // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
      14                 : // GNU General Public License for more details.
      15                 : //
      16                 : // You should have received a copy of the GNU General Public License
      17                 : // along with this program; if not, write to the Free Software
      18                 : // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
      19                 : //
      20                 : //==============================================================================
      21                 : 
      22                 : // Portability
      23                 : #include "yaorb/config.h"
      24                 : #include "src/cpp/prod/port/port_stdc.h"
      25                 : 
      26                 : #include <stdio.h>
      27                 : #include <stdlib.h>
      28                 : 
      29                 : #include "src/cpp/dev/idlc/back/lang_java/javainfo.h"
      30                 : #include "src/cpp/dev/idlc/symbol.h"
      31                 : #include "src/cpp/prod/tool/Assert.h"
      32                 : #include "src/cpp/prod/tool/StringTokenizer.h"
      33                 : 
      34                 : #include "src/cpp/prod/tool/DEVELOPMENT.h"
      35                 : 
      36                 : struct JavaKeyWords
      37               0 : {
      38                 :    const char* keyword ;
      39                 :    String escape ;
      40                 : } ;
      41                 : 
      42              33 : static const JavaKeyWords KeyWordTab[] =
      43                 : {
      44                 :    { "abstract"        , "_abstract"            },
      45                 :    { "boolean"         , "_boolean"             },
      46                 :    { "break"           , "_break"               },
      47                 :    { "byte"            , "_byte"                },
      48                 :    { "case"            , "_case"                },
      49                 :    { "catch"           , "_catch"               },
      50                 :    { "char"            , "_char"                },
      51                 :    { "class"           , "_class"               },
      52                 :    { "clone"           , "_clone"               },
      53                 :    { "const"           , "_const"               },
      54                 :    { "continue"        , "_continue"            },
      55                 :    { "default"         , "_default"             },
      56                 :    { "do"              , "_do"                  },
      57                 :    { "double"          , "_double"              },
      58                 :    { "else"            , "_else"                },
      59                 :    { "equals"          , "_equals"              },
      60                 :    { "extends"         , "_extends"             },
      61                 :    { "false"           , "_false"               },
      62                 :    { "final"           , "_final"               },
      63                 :    { "finalize"        , "_finalize"            },
      64                 :    { "finally"         , "_finally"             },
      65                 :    { "float"           , "_float"               },
      66                 :    { "for"             , "_for"                 },
      67                 :    { "getClass"        , "_getClass"            },
      68                 :    { "goto"            , "_goto"                },
      69                 :    { "hashCode"        , "_hashCode"            },
      70                 :    { "if"              , "_if"                  },
      71                 :    { "implements"      , "_implements"          },
      72                 :    { "import"          , "_import"              },
      73                 :    { "instanceof"      , "_instanceof"          },
      74                 :    { "int"             , "_int"                 },
      75                 :    { "interface"       , "_interface"           },
      76                 :    { "long"            , "_long"                },
      77                 :    { "native"          , "_native"              },
      78                 :    { "new"             , "_new"                 },
      79                 :    { "notify"          , "_notify"              },
      80                 :    { "notifyAll"       , "_notifyAll"           },
      81                 :    { "null"            , "_null"                },
      82                 :    { "package"         , "_package"             },
      83                 :    { "private"         , "_private"             },
      84                 :    { "protected"       , "_protected"           },
      85                 :    { "public"          , "_public"              },
      86                 :    { "return"          , "_return"              },
      87                 :    { "short"           , "_short"               },
      88                 :    { "static"          , "_static"              },
      89                 :    { "super"           , "_super"               },
      90                 :    { "switch"          , "_switch"              },
      91                 :    { "synchronized"    , "_synchronized"        },
      92                 :    { "this"            , "_this"                },
      93                 :    { "throw"           , "_throw"               },
      94                 :    { "throws"          , "_throws"              },
      95                 :    { "toString"        , "_toString"            },
      96                 :    { "transient"       , "_transient"           },
      97                 :    { "true"            , "_true"                },
      98                 :    { "try"             , "_try"                 },
      99                 :    { "void"            , "_void"                },
     100                 :    { "volatile"        , "_volatile"            },
     101                 :    { "wait"            , "_wait"                },
     102                 :    { "while"           , "_while"               },
     103                 :    { NULL              , ""                     }
     104              33 : } ;
     105                 : 
     106                 : static const char * const SuffixTab[] =
     107                 : {
     108                 :    "Helper",
     109                 :    "Holder",
     110                 :    NULL
     111                 : } ;
     112                 : 
     113                 : static const char* const PseudoTab[] =
     114                 : {
     115                 :    "PortableServer::POAManager",
     116                 :    "PortableServer::AdapterActivator",
     117                 :    "PortableServer::ServantManager",
     118                 :    "PortableServer::ServantActivator",
     119                 :    "PortableServer::ServantLocator",
     120                 :    "PortableServer::POA",
     121                 :    "PortableServer::Current",
     122                 :    "CORBA::TypeCode",
     123                 :    "CORBA::Environment",
     124                 :    "CORBA::ORB",
     125                 :    NULL
     126                 : } ;
     127                 : 
     128             197 : static String JavaName(const String& idlName)
     129                 : {
     130                 :    const JavaKeyWords *entry ;
     131                 : 
     132                 :    entry = & KeyWordTab[0] ;
     133                 : 
     134           11820 :    while (entry->keyword != NULL)
     135                 :    {
     136           11623 :       if (idlName == entry->keyword)
     137                 :       {
     138               0 :          return entry->escape ;
     139                 :       }
     140                 : 
     141           11623 :       entry ++ ;
     142                 :    }
     143                 : 
     144                 :    const char * const * suffixEntry = & SuffixTab[0] ;
     145                 :    const char * suffix = NULL ;
     146             197 :    int idlLen = idlName.length() ;
     147                 :    const char * hackPtr = NULL ;
     148                 :    int suffixLen = 0 ;
     149                 : 
     150             591 :    while (* suffixEntry != NULL)
     151                 :    {
     152                 :       suffix = * suffixEntry ;
     153             394 :       suffixLen = strlen(suffix) ;
     154                 : 
     155                 :       // Does idl name **ends** with suffix ?
     156                 : 
     157             394 :       if (suffixLen <= idlLen)
     158                 :       {
     159             374 :          hackPtr = idlName ;
     160                 :          hackPtr = hackPtr + idlLen - suffixLen ;
     161             374 :          if (strcmp(hackPtr, suffix) == 0)
     162                 :          {
     163                 :             // Yes, escape the idl name
     164               0 :             String escape = "_" ;
     165               0 :             escape += idlName ;
     166               0 :             return escape ;
     167                 :          }
     168                 :       }
     169                 : 
     170                 :       suffixEntry ++ ;
     171                 :    }
     172                 : 
     173             197 :    return idlName ;
     174                 : }
     175                 : 
     176              65 : static bool IsPseudo(const String& name)
     177                 : {
     178                 :    const char * const *entry ;
     179                 : 
     180                 :    entry = & PseudoTab[0] ;
     181                 : 
     182             666 :    while (*entry != NULL)
     183                 :    {
     184             608 :       if (name == *entry)
     185                 :       {
     186                 :          return true ;
     187                 :       }
     188                 : 
     189                 :       entry ++ ;
     190                 :    }
     191                 : 
     192                 :    return false ;
     193                 : }
     194                 : 
     195              65 : static String PackageName(const String& javaFullName)
     196                 : {
     197                 :    // Extract a.b.c from a.b.c.z ;
     198                 : 
     199              65 :    char *tmp = strdup(javaFullName) ;
     200              65 :    char *dot = strrchr(tmp, '.') ;
     201                 : 
     202              65 :    if (dot != NULL)
     203                 :    {
     204              64 :       *dot = '\0' ;
     205                 :    }
     206                 : 
     207              65 :    String package = tmp ;
     208              65 :    free(tmp) ;
     209                 : 
     210                 :    return package ;
     211                 : }
     212                 : 
     213             130 : static String HelperName(const String& javaFullName)
     214                 : {
     215                 :    // Convert a.b.c to a.b.cHelper ;
     216                 : 
     217             130 :    String helper = javaFullName ;
     218             130 :    helper += "Helper" ;
     219               0 :    return helper ;
     220                 : }
     221                 : 
     222             130 : static String HolderName(const String& javaFullName)
     223                 : {
     224                 :    // Convert a.b.c to a.b.cHolder ;
     225                 : 
     226             130 :    String holder = javaFullName ;
     227             130 :    holder += "Holder" ;
     228               0 :    return holder ;
     229                 : }
     230                 : 
     231              65 : static String JavaFullName(const String& idlFullName)
     232                 : {
     233                 :    // Convert try::this::stuff into _try._this.stuff
     234                 : 
     235              65 :    String result ;
     236              65 :    String token ;
     237              65 :    StringTokenizer parser(idlFullName, "::") ;
     238                 :    bool first = true ;
     239                 : 
     240             197 :    while (parser.hasMoreTokens() == true)
     241                 :    {
     242             132 :       if (first == false)
     243                 :       {
     244              67 :          result += "." ;
     245                 :       }
     246                 : 
     247             132 :       token = parser.nextToken() ;
     248             132 :       result += JavaName(token) ;
     249                 :       first = false ;
     250                 :    }
     251                 : 
     252               0 :    return result ;
     253                 : }
     254                 : 
     255             325 : static String FileFullName(const String& javaFullName)
     256                 : {
     257                 :    // Convert _try._this.stuff into _try/_this/stuff
     258                 : 
     259             325 :    String result ;
     260             325 :    String token ;
     261             325 :    StringTokenizer parser(javaFullName, ".") ;
     262                 :    bool first = true ;
     263                 : 
     264            1493 :    while (parser.hasMoreTokens() == true)
     265                 :    {
     266            1168 :       if (first == false)
     267                 :       {
     268             844 :          result += "/" ;
     269                 :       }
     270                 : 
     271            1168 :       token = parser.nextToken() ;
     272            1168 :       result += token ;
     273                 :       first = false ;
     274                 :    }
     275                 : 
     276               0 :    return result ;
     277                 : }
     278                 : 
     279              65 : String ReversePrefix(const String & prefix)
     280                 : {
     281              65 :    String result ;
     282              65 :    String token ;
     283              65 :    String tmp ;
     284              65 :    StringTokenizer parser(prefix, ".") ;
     285                 :    bool first = true ;
     286                 : 
     287             193 :    while (parser.hasMoreTokens() == true)
     288                 :    {
     289             128 :       token = parser.nextToken() ;
     290                 : 
     291             128 :       if (first == true)
     292                 :       {
     293              64 :          result = token ;
     294                 :          first = false ;
     295                 :       }
     296                 :       else
     297                 :       {
     298              64 :          tmp = token ;
     299              64 :          tmp += "." ;
     300              64 :          tmp += result ;
     301              64 :          result = tmp ;
     302                 :       }
     303                 :    }
     304                 : 
     305               0 :    return result ;
     306                 : }
     307                 : 
     308                 : void PrePend(
     309                 :    const String & pre,
     310                 :    const String & sep,
     311              65 :    String & str)
     312                 : {
     313              65 :    String result ;
     314                 : 
     315              65 :    if (pre != "")
     316                 :    {
     317              64 :       result += pre ;
     318              64 :       result += sep ;
     319                 :    }
     320                 : 
     321              65 :    result += str ;
     322              65 :    str = result ;
     323                 : }
     324                 : 
     325               2 : JavaInfo::JavaInfo()
     326                 : {
     327               2 :    _isPseudo = false ;
     328               2 : }
     329                 : 
     330              65 : JavaInfo::JavaInfo(Symbol *sym)
     331                 : {
     332              65 :    const String& name = sym->GetName() ;
     333                 : 
     334              65 :    _javaName = JavaName(name) ;
     335              65 :    _javaHelperName = HelperName(_javaName) ;
     336              65 :    _javaHolderName = HolderName(_javaName) ;
     337                 : 
     338              65 :    const String& fullName = sym->GetFullyQualifiedName() ;
     339              65 :    const String& prefix = sym->GetPrefix() ;
     340              65 :    String rPrefix = ReversePrefix(prefix) ;
     341              65 :    String fPrefix = FileFullName(rPrefix) ;
     342                 : 
     343              65 :    if (IsPseudo(fullName))
     344                 :    {
     345               7 :       _isPseudo = true ;
     346                 :    }
     347                 : 
     348              65 :    _javaFullName = JavaFullName(fullName) ;
     349              65 :    PrePend(rPrefix, ".", _javaFullName) ;
     350              65 :    _javaFullHelperName = HelperName(_javaFullName) ;
     351              65 :    _javaFullHolderName = HolderName(_javaFullName) ;
     352                 : 
     353              65 :    _javaPackageName = PackageName(_javaFullName) ;
     354                 : 
     355              65 :    _dirName = FileFullName(_javaFullName) ;
     356              65 :    _dirName += "/" ;
     357                 : 
     358              65 :    _fileFullName = FileFullName(_javaFullName) ;
     359              65 :    _fileFullName += ".java" ;
     360                 : 
     361              65 :    _fileFullHelperName = FileFullName(_javaFullHelperName) ;
     362              65 :    _fileFullHelperName += ".java" ;
     363                 : 
     364              65 :    _fileFullHolderName = FileFullName(_javaFullHolderName) ;
     365              65 :    _fileFullHolderName += ".java" ;
     366               0 : }
     367                 : 
     368               2 : JavaInfo::~JavaInfo()
     369              35 : {}
     370              33 : 

Generated by: LTP GCOV extension version 1.4