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

       1                 : //==============================================================================
       2                 : // File <$/src/cpp/dev/idlc/back/lang_java/lang_java.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 <stdlib.h>
      27                 : #include <fstream>
      28                 : #include <ctype.h>
      29                 : 
      30                 : #include "src/cpp/prod/tool/DEVELOPMENT.h"
      31                 : 
      32                 : #include "src/cpp/prod/tool/Assert.h"
      33                 : 
      34                 : #include "src/cpp/dev/idlc/sym_tab.h"
      35                 : #include "src/cpp/dev/idlc/all_symbols.h"
      36                 : #include "src/cpp/dev/idlc/interface.h"
      37                 : #include "src/cpp/dev/idlc/native.h"
      38                 : #include "src/cpp/dev/idlc/attribute.h"
      39                 : #include "src/cpp/dev/idlc/struct.h"
      40                 : #include "src/cpp/dev/idlc/exception.h"
      41                 : #include "src/cpp/dev/idlc/struct_member.h"
      42                 : #include "src/cpp/dev/idlc/enum.h"
      43                 : #include "src/cpp/dev/idlc/enum_item.h"
      44                 : #include "src/cpp/dev/idlc/operation.h"
      45                 : #include "src/cpp/dev/idlc/typedef.h"
      46                 : #include "src/cpp/dev/idlc/idl_type.h"
      47                 : #include "src/cpp/dev/idlc/value.h"
      48                 : #include "src/cpp/dev/idlc/char_value.h"
      49                 : #include "src/cpp/dev/idlc/wchar_value.h"
      50                 : #include "src/cpp/dev/idlc/int_value.h"
      51                 : #include "src/cpp/dev/idlc/string_value.h"
      52                 : #include "src/cpp/dev/idlc/wstring_value.h"
      53                 : #include "src/cpp/dev/idlc/yyutils.h"
      54                 : #include "src/cpp/dev/idlc/back/CodeUtils.h"
      55                 : #include "src/cpp/dev/idlc/back/lang_java/lang_java.h"
      56                 : #include "src/cpp/dev/idlc/back/lang_java/javainfo.h"
      57                 : 
      58                 : // since ostream and endl is used **so much** ...
      59                 : // This setting is private to this file though
      60                 : using namespace std ;
      61                 : 
      62              33 : const String LangJava::_tab("   ") ;
      63                 : 
      64                 : static const char* g_header[] =
      65                 : {
      66                 : "",
      67                 : "// This file was automatically generated by YaOrb IDL->Java compiler.",
      68                 : "// DO NOT EDIT !",
      69                 : "",
      70                 : NULL
      71                 : } ;
      72                 : 
      73                 : static void
      74                 : PrintNiceChar(
      75                 :    char c,
      76               0 :    CodePrinter & str)
      77                 : {
      78               0 :    switch(c)
      79                 :    {
      80                 :       case '\n' :
      81                 :       {
      82               0 :          str.Str() << "\\n" ;
      83               0 :          break ;
      84                 :       }
      85                 :       case '\t' :
      86                 :       {
      87               0 :          str.Str() << "\\t" ;
      88               0 :          break ;
      89                 :       }
      90                 :       case '\v' :
      91                 :       {
      92               0 :          str.Str() << "\\v" ;
      93               0 :          break ;
      94                 :       }
      95                 :       case '\b' :
      96                 :       {
      97               0 :          str.Str() << "\\b" ;
      98               0 :          break ;
      99                 :       }
     100                 :       case '\r' :
     101                 :       {
     102               0 :          str.Str() << "\\r" ;
     103               0 :          break ;
     104                 :       }
     105                 :       case '\f' :
     106                 :       {
     107               0 :          str.Str() << "\\f" ;
     108               0 :          break ;
     109                 :       }
     110                 :       case '\a' :
     111                 :       {
     112               0 :          str.Str() << "\\a" ;
     113               0 :          break ;
     114                 :       }
     115                 :       case '\\' :
     116                 :       {
     117               0 :          str.Str() << "\\\\" ;
     118               0 :          break ;
     119                 :       }
     120                 :       case '\'' :
     121                 :       {
     122               0 :          str.Str() << "\\\'" ;
     123               0 :          break ;
     124                 :       }
     125                 :       case '\"' :
     126                 :       {
     127               0 :          str.Str() << "\\\"" ;
     128               0 :          break ;
     129                 :       }
     130                 :       default :
     131                 :       {
     132               0 :          if (isprint(c))
     133                 :          {
     134               0 :             str.Str() << c ;
     135                 :          }
     136                 :          else
     137                 :          {
     138                 :             char buf[5] ;
     139               0 :             sprintf (buf, "\\x%02x", c) ;
     140               0 :             str.Str() << buf ;
     141                 :          }
     142                 :       }
     143                 :    }
     144                 : }
     145                 : 
     146               2 : LangJava::LangJava()
     147                 : :
     148                 :    _strH(),
     149                 :    _strJava(),
     150                 :    _strStubH(),
     151                 :    _strStubJava(),
     152                 :    _strSkelH(),
     153                 :    _strSkelJava(),
     154                 :    _tabH(0),
     155                 :    _tabJava(0),
     156                 :    _tabStubH(0),
     157                 :    _tabStubJava(0),
     158                 :    _tabSkelH(0),
     159                 :    _tabSkelJava(0),
     160                 :    _generateModuleName(),
     161                 :    _generateModuleOption(false),
     162                 :    _outputFileName(),
     163               2 :    _outputDirName()
     164                 : {
     165               0 : }
     166                 : 
     167               2 : LangJava::~LangJava()
     168              14 : {}
     169                 : 
     170             270 : JavaInfo* LangJava::GetJavaInfo(Symbol *s)
     171                 : {
     172                 :    ASSERT(s != NULL) ;
     173             270 :    JavaInfo *result = (JavaInfo*) s->GetHook() ;
     174             270 :    if (result == NULL)
     175                 :    {
     176              65 :       result = new JavaInfo(s) ;
     177              65 :       s->SetHook(result) ;
     178                 :    }
     179                 :    return result ;
     180                 : }
     181                 : 
     182               0 : ostream& LangJava::Tabulate(ostream& str, int level)
     183                 : {
     184               0 :    while (level > 0)
     185                 :    {
     186               0 :       str << _tab ;
     187                 :       level-- ;
     188                 :    }
     189                 : 
     190                 :    return str ;
     191                 : }
     192                 : 
     193               0 : ostream& LangJava::TabulateH(void)
     194                 : {
     195               0 :    return Tabulate(_strH, _tabH) ;
     196                 : }
     197                 : 
     198               0 : ostream& LangJava::TabulateJava(void)
     199                 : {
     200               0 :    return Tabulate(_strJava, _tabJava) ;
     201                 : }
     202                 : 
     203               0 : ostream& LangJava::TabulateStubH(void)
     204                 : {
     205               0 :    return Tabulate(_strStubH, _tabStubH) ;
     206                 : }
     207                 : 
     208               0 : ostream& LangJava::TabulateStubJava(void)
     209                 : {
     210               0 :    return Tabulate(_strStubJava, _tabStubJava) ;
     211                 : }
     212                 : 
     213               0 : ostream& LangJava::TabulateSkelH(void)
     214                 : {
     215               0 :    return Tabulate(_strSkelH, _tabSkelH) ;
     216                 : }
     217                 : 
     218               0 : ostream& LangJava::TabulateSkelJava(void)
     219                 : {
     220               0 :    return Tabulate(_strSkelJava, _tabSkelJava) ;
     221                 : }
     222                 : 
     223               2 : void LangJava::SetGenerateOption(const String& module)
     224                 : {
     225               2 :    _generateModuleOption = true ;
     226               2 :    _generateModuleName = module ;
     227                 : }
     228                 : 
     229               0 : void LangJava::SetOutputFile(const String& filename)
     230                 : {
     231               0 :    _outputFileName = filename ;
     232                 : }
     233                 : 
     234               2 : void LangJava::SetOutputDir(const String& dirname)
     235                 : {
     236               2 :    _outputDirName = dirname ;
     237                 : }
     238                 : 
     239               0 : void LangJava::Headers(void)
     240                 : {
     241                 :    static const char* text[] =
     242                 :    {
     243                 : "",
     244                 : "// This file was automatically generated by YAORB IDL->C++ compiler.",
     245                 : "// DO NOT EDIT !",
     246                 : "",
     247                 : NULL
     248                 :    } ;
     249                 : 
     250                 :    const char** tmp = & text[0] ;
     251                 : 
     252               0 :    while (*tmp != NULL)
     253                 :    {
     254               0 :       _strH << *tmp << endl ;
     255               0 :       _strJava << *tmp << endl ;
     256               0 :       _strStubH << *tmp << endl ;
     257               0 :       _strStubJava << *tmp << endl ;
     258               0 :       _strSkelH << *tmp << endl ;
     259               0 :       _strSkelJava << *tmp << endl ;
     260                 : 
     261                 :       tmp ++ ;
     262                 :    }
     263                 : 
     264                 :    return ;
     265                 : }
     266                 : 
     267               0 : String LangJava::Prefix(const String& idlFullName)
     268                 : {
     269                 :    // extract A.B.C from A.B.C.Z
     270                 : 
     271               0 :    String result ;
     272                 : 
     273               0 :    char *tmp = strdup(idlFullName) ;
     274               0 :    char *end = tmp + strlen(tmp) ;
     275                 : 
     276               0 :    while ((tmp <= end) && (*end != '.')) end-- ; // Eat Z
     277                 : 
     278                 :    ASSERT(tmp <= end) ;
     279                 : 
     280               0 :    *end = '\0' ;
     281                 : 
     282               0 :    result = tmp ;
     283               0 :    free(tmp) ;
     284                 : 
     285               0 :    return result ;
     286                 : }
     287                 : 
     288               2 : void LangJava::GenerateCode(SymbolTable *symTab)
     289                 : {
     290               2 :    JavaInfo rootInfo ;
     291                 : 
     292               2 :    rootInfo._isPseudo = false ;
     293               2 :    rootInfo._hasSubPackage = false ;
     294               2 :    rootInfo._hasHelper = false ;
     295               2 :    rootInfo._hasHolder = false ;
     296               2 :    rootInfo._javaName = "" ;
     297               2 :    rootInfo._javaPackageName = "" ;
     298               2 :    rootInfo._javaHelperName = "" ;
     299               2 :    rootInfo._javaHolderName = "" ;
     300               2 :    rootInfo._javaFullName = "" ;
     301               2 :    rootInfo._javaFullHelperName = "" ;
     302               2 :    rootInfo._javaFullHolderName = "" ;
     303               2 :    rootInfo._javaSubPackageFullName = "" ;
     304               2 :    rootInfo._fileName = "" ;
     305               2 :    rootInfo._dirName = "" ;
     306               2 :    rootInfo._fileFullName = "" ;
     307                 : 
     308               2 :    BuildContextInfo(symTab, & rootInfo) ;
     309                 : 
     310               2 :    const char* tmp = _outputDirName ;
     311                 : 
     312               2 :    String anchor = "" ;
     313               2 :    if (tmp[0] == '/')
     314                 :    {
     315                 :       // Absolute path
     316               2 :       anchor = "/" ;
     317                 :    }
     318                 :    else
     319                 :    {
     320                 :       // Relative path
     321               0 :       anchor = "./" ;
     322                 :    }
     323               2 :    CodeUtils::MkFullDir(anchor, _outputDirName) ;
     324                 : 
     325               2 :    GenerateContext(symTab, false) ;
     326                 : }
     327                 : 
     328                 : void LangJava::BuildContextInfo(
     329                 :    SymbolContainer *symTab,
     330               7 :    JavaInfo *parentInfo)
     331                 : {
     332               7 :    const SymbolList& symbols = symTab->GetLocalSymbols() ;
     333                 :    Symbol *symbol = NULL ;
     334                 :    SymbolListIt it(symbols) ;
     335               7 :    String name ;
     336               7 :    int len = strlen(_generateModuleName) ;
     337                 : 
     338              79 :    while (it.GetNext())
     339                 :    {
     340                 :       symbol = it.GetItem() ;
     341                 : 
     342              65 :       if (_generateModuleOption == true)
     343                 :       {
     344              65 :          JavaInfo *info = GetJavaInfo(symbol) ;
     345              65 :          name = info->_javaFullName ;
     346                 : 
     347                 :          // If the symbol is in the module to generate ...
     348              65 :          if (strncmp(name, _generateModuleName, len) == 0)
     349                 :          {
     350              64 :             BuildOneSymbolInfo(symTab, symbol, parentInfo) ;
     351                 :          }
     352                 :       }
     353                 :       else
     354                 :       {
     355               0 :          BuildOneSymbolInfo(symTab, symbol, parentInfo) ;
     356                 :       }
     357               0 :    }
     358                 : }
     359                 : 
     360                 : void LangJava::GenerateContext(
     361                 :    SymbolContainer *symTab,
     362               7 :    bool pseudo)
     363                 : {
     364               7 :    const SymbolList& symbols = symTab->GetLocalSymbols() ;
     365                 :    Symbol *symbol = NULL ;
     366                 :    SymbolListIt it(symbols) ;
     367               7 :    String name ;
     368               7 :    int len = strlen(_generateModuleName) ;
     369                 : 
     370              79 :    while (it.GetNext())
     371                 :    {
     372                 :       symbol = it.GetItem() ;
     373                 : 
     374              65 :       if (_generateModuleOption == true)
     375                 :       {
     376              65 :          JavaInfo *info = GetJavaInfo(symbol) ;
     377              65 :          name = info->_javaFullName ;
     378                 : 
     379                 :          // If the symbol is in the module to generate ...
     380              65 :          if (strncmp(name, _generateModuleName, len) == 0)
     381                 :          {
     382              64 :             GenerateOneSymbol(symTab, symbol, pseudo) ;
     383                 :          }
     384                 :       }
     385                 :       else
     386                 :       {
     387               0 :          GenerateOneSymbol(symTab, symbol, pseudo) ;
     388                 :       }
     389               0 :    }
     390                 : }
     391                 : 
     392                 : void LangJava::BuildOneSymbolInfo(
     393                 :    SymbolContainer *symTab,
     394                 :    Symbol *symbol,
     395              64 :    JavaInfo *parentInfo)
     396                 : {
     397              64 :    switch(symbol->GetClass())
     398                 :    {
     399                 :       case moduleSymbol:
     400                 :       {
     401                 :          Module *m = (Module*) symbol ;
     402               2 :          BuildModuleInfo(symTab, m, parentInfo) ;
     403                 :          break ;
     404                 :       }
     405                 :       case interfaceSymbol :
     406                 :       {
     407                 :          Interface *i = (Interface*) symbol ;
     408              16 :          BuildInterfaceInfo(symTab, i, parentInfo) ;
     409                 :          break ;
     410                 :       }
     411                 :       case attributeSymbol :
     412                 :       {
     413                 :          Attribute *a = (Attribute*) symbol ;
     414               0 :          BuildAttributeInfo(symTab, a, parentInfo) ;
     415                 :          break ;
     416                 :       }
     417                 :       case operationSymbol :
     418                 :       {
     419                 :          Operation *o = (Operation*) symbol ;
     420               0 :          BuildOperationInfo(symTab, o, parentInfo) ;
     421                 :          break ;
     422                 :       }
     423                 :       case parameterSymbol :
     424                 :       {
     425               0 :          NON_DEV("GenerateOneSymbol") ;
     426                 :          break ;
     427                 :       }
     428                 :       case typedefSymbol :
     429                 :       {
     430                 :          Typedef *t = (Typedef*) symbol ;
     431               5 :          BuildTypedefInfo(symTab, t, parentInfo) ;
     432                 :          break ;
     433                 :       }
     434                 :       case structSymbol :
     435                 :       {
     436                 :          Struct *s = (Struct*) symbol ;
     437               2 :          BuildStructInfo(symTab, s, parentInfo) ;
     438                 :          break ;
     439                 :       }
     440                 :       case memberSymbol :
     441                 :       {
     442                 :          // Nothing ! BuildStructInfo will take care of the member
     443                 :          break ;
     444                 :       }
     445                 :       case unionSymbol :
     446                 :       {
     447               0 :          NON_DEV("BuildOneSymbolInfo") ;
     448                 :          break ;
     449                 :       }
     450                 :       case constantSymbol :
     451                 :       {
     452                 :          Constant *c = (Constant*) symbol ;
     453               7 :          BuildConstantInfo(symTab, c, parentInfo) ;
     454                 :          break ;
     455                 :       }
     456                 :       case enumSymbol :
     457                 :       {
     458                 :          Enum *e = (Enum*) symbol ;
     459               8 :          BuildEnumInfo(symTab, e, parentInfo) ;
     460                 :          break ;
     461                 :       }
     462                 :       case enumItemSymbol :
     463                 :       {
     464                 :          // Nothing ! BuildEnumInfo will take care of the enum
     465                 :          break ;
     466                 :       }
     467                 :       case exceptionSymbol :
     468                 :       {
     469                 :          Exception *e = (Exception*) symbol ;
     470               1 :          BuildExceptionInfo(symTab, e, parentInfo) ;
     471                 :          break ;
     472                 :       }
     473                 :       case nativeSymbol :
     474                 :       {
     475                 :          SymNative *native = (SymNative*) symbol ;
     476               1 :          BuildNativeInfo(native) ;
     477                 :          break ;
     478                 :       }
     479                 :    }
     480                 : }
     481                 : 
     482                 : void LangJava::GenerateOneSymbol(
     483                 :    SymbolContainer *symTab,
     484                 :    Symbol *symbol,
     485              64 :    bool pseudo)
     486                 : {
     487              64 :    switch(symbol->GetClass())
     488                 :    {
     489                 :       case moduleSymbol:
     490                 :       {
     491                 :          Module *m = (Module*) symbol ;
     492               2 :          GenerateModule(symTab, m) ;
     493                 :          break ;
     494                 :       }
     495                 :       case interfaceSymbol :
     496                 :       {
     497                 :          Interface *i = (Interface*) symbol ;
     498              16 :          GenerateInterface(symTab, i) ;
     499                 :          break ;
     500                 :       }
     501                 :       case attributeSymbol :
     502                 :       {
     503                 :          Attribute *a = (Attribute*) symbol ;
     504               0 :          GenerateAttribute(symTab, a, pseudo) ;
     505                 :          break ;
     506                 :       }
     507                 :       case operationSymbol :
     508                 :       {
     509                 :          Operation *o = (Operation*) symbol ;
     510               0 :          GenerateOperation(symTab, o, pseudo) ;
     511                 :          break ;
     512                 :       }
     513                 :       case parameterSymbol :
     514                 :       {
     515               0 :          NON_DEV("GenerateOneSymbol") ;
     516                 :          break ;
     517                 :       }
     518                 :       case typedefSymbol :
     519                 :       {
     520                 :          Typedef *t = (Typedef*) symbol ;
     521               5 :          GenerateTypedef(symTab, t) ;
     522                 :          break ;
     523                 :       }
     524                 :       case structSymbol :
     525                 :       {
     526               2 :          Struct *s = (Struct*) symbol ;
     527               2 :          GenerateStruct(symTab, s, pseudo) ;
     528               2 :          GenerateStructHelper(s) ;
     529               2 :          GenerateStructHolder(s) ;
     530                 :          break ;
     531                 :       }
     532                 :       case memberSymbol :
     533                 :       {
     534                 :          // Nothing ! GenerateStructwill take care of the member
     535                 :          break ;
     536                 :       }
     537                 :       case unionSymbol :
     538                 :       {
     539               0 :          NON_DEV("GenerateOneSymbol") ;
     540                 :          break ;
     541                 :       }
     542                 :       case constantSymbol :
     543                 :       {
     544                 :          Constant *c = (Constant*) symbol ;
     545               7 :          GenerateConstant(symTab, c) ;
     546                 :          break ;
     547                 :       }
     548                 :       case enumSymbol :
     549                 :       {
     550               8 :          Enum *e = (Enum*) symbol ;
     551               8 :          GenerateEnum(symTab, e) ;
     552               8 :          GenerateEnumHelper(e) ;
     553               8 :          GenerateEnumHolder(e) ;
     554                 :          break ;
     555                 :       }
     556                 :       case enumItemSymbol :
     557                 :       {
     558                 :          // Nothing ! GenerateEnum will take care of the enum
     559                 :          break ;
     560                 :       }
     561                 :       case exceptionSymbol :
     562                 :       {
     563               1 :          Exception *e = (Exception*) symbol ;
     564               1 :          GenerateException(symTab, e, pseudo) ;
     565               1 :          GenerateExceptionHelper(e) ;
     566               1 :          GenerateExceptionHolder(e) ;
     567                 :          break ;
     568                 :       }
     569                 :       case nativeSymbol :
     570                 :       {
     571                 :          SymNative *native = (SymNative*) symbol ;
     572               1 :          GenerateNative(native) ;
     573                 :          break ;
     574                 :       }
     575                 :    }
     576                 : }
     577                 : 
     578                 : void LangJava::BuildModuleInfo(
     579                 :    SymbolContainer *symTab,
     580                 :    Module *module,
     581               2 :    JavaInfo *parentInfo)
     582                 : {
     583               2 :    JavaInfo *info = GetJavaInfo(module) ;
     584                 : 
     585               2 :    info->_hasSubPackage = false ;
     586               2 :    info->_hasHelper = false ;
     587               2 :    info->_hasHolder = false ;
     588                 : 
     589               2 :    NON_DEV("BuildModuleInfo") ;
     590                 : 
     591                 :    //============================ CONTENT ===================================
     592                 : 
     593               2 :    const String & name = module->GetName() ;
     594               2 :    Context *c = symTab->findLocalContext(name) ;
     595               2 :    BuildContextInfo(c, info) ;
     596                 : }
     597                 : 
     598                 : void LangJava::GenerateModule(
     599                 :    SymbolContainer *symTab,
     600               2 :    Module *module)
     601                 : {
     602               2 :    JavaInfo *info = GetJavaInfo(module) ;
     603                 : 
     604               2 :    const String & name = module->GetName() ;
     605                 :    const String & path = info->_dirName ;
     606                 : 
     607                 :    //============================ Package ===================================
     608                 : 
     609               2 :    CodeUtils::MkFullDir(_outputDirName, path) ;
     610                 : 
     611                 :    //============================ CONTENT ===================================
     612                 : 
     613               2 :    Context *c = symTab->findLocalContext(name) ;
     614               2 :    GenerateContext(c, false) ;
     615                 : }
     616                 : 
     617                 : void LangJava::BuildInterfaceInfo(
     618                 :    SymbolContainer *symTab,
     619                 :    Interface *interface,
     620              16 :    JavaInfo *parentInfo)
     621                 : {
     622              16 :    JavaInfo *info = GetJavaInfo(interface) ;
     623                 : 
     624              16 :    info->_hasHelper = true ;
     625              16 :    info->_hasHolder = true ;
     626                 : 
     627              16 :    NON_DEV("Build Info") ;
     628                 : }
     629                 : 
     630                 : void LangJava::GenerateInterface(
     631                 :    SymbolContainer *symTab,
     632              16 :    Interface *interface)
     633                 : {
     634              16 :    NON_DEV("GenerateInterface") ;
     635                 :    return ;
     636                 : }
     637                 : 
     638                 : void LangJava::GenerateInterfaceTablesImpl(
     639                 :    SymbolContainer *symTab,
     640               0 :    Interface *interface)
     641                 : {
     642               0 :    NON_DEV("GenerateInterface") ;
     643                 :    return ;
     644                 : }
     645                 : 
     646                 : void LangJava::GenerateLocalOpsImpl(
     647                 :    SymbolContainer *symTab,
     648               0 :    Interface *interface)
     649                 : {
     650               0 :    NON_DEV("GenerateInterface") ;
     651                 :    return ;
     652                 : }
     653                 : 
     654                 : void LangJava::BuildAttributeInfo(
     655                 :    SymbolContainer *symTab,
     656                 :    Attribute *attribute,
     657               0 :    JavaInfo *parentInfo)
     658                 : {
     659               0 :    JavaInfo *info = GetJavaInfo(attribute) ;
     660                 : 
     661               0 :    info->_hasHelper = false ;
     662               0 :    info->_hasHolder = false ;
     663                 : 
     664               0 :    NON_DEV("Build Info") ;
     665                 : }
     666                 : 
     667                 : void LangJava::GenerateAttribute(
     668                 :    SymbolContainer *symTab,
     669                 :    Attribute *attribute,
     670               0 :    bool pseudo)
     671                 : {
     672               0 :    NON_DEV("GenerateAttribute") ;
     673                 :    return ;
     674                 : }
     675                 : 
     676                 : void LangJava::GenerateAttributeStubImpl(
     677               0 :    Attribute *attribute)
     678                 : {
     679               0 :    NON_DEV("GenerateAttribute") ;
     680                 :    return ;
     681                 : }
     682                 : 
     683                 : void LangJava::GenerateAttributeSkelImpl(
     684               0 :    Attribute *attribute)
     685                 : {
     686               0 :    NON_DEV("GenerateAttribute") ;
     687                 :    return ;
     688                 : }
     689                 : 
     690                 : void LangJava::BuildOperationInfo(
     691                 :    SymbolContainer *symTab,
     692                 :    Operation *operation,
     693               0 :    JavaInfo *parentInfo)
     694                 : {
     695               0 :    JavaInfo *info = GetJavaInfo(operation) ;
     696                 : 
     697               0 :    info->_hasHelper = false ;
     698               0 :    info->_hasHolder = false ;
     699                 : 
     700               0 :    NON_DEV("Build Info") ;
     701                 : }
     702                 : 
     703                 : void LangJava::GenerateOperation(
     704                 :    SymbolContainer *symTab,
     705                 :    Operation *operation,
     706               0 :    bool pseudo)
     707                 : {
     708               0 :    NON_DEV("GenerateOperation") ;
     709                 :    return ;
     710                 : }
     711                 : 
     712                 : void LangJava::GenerateOperationStubImpl(
     713                 :    SymbolContainer *symTab,
     714               0 :    Operation *operation)
     715                 : {
     716               0 :    NON_DEV("GenerateOperation") ;
     717                 :    return ;
     718                 : }
     719                 : 
     720                 : void LangJava::GenerateOperationSkelImpl(
     721                 :    SymbolContainer *symTab,
     722               0 :    Operation *operation)
     723                 : {
     724               0 :    NON_DEV("GenerateOperation") ;
     725                 :    return ;
     726                 : }
     727                 : 
     728                 : void LangJava::PrintParameterList(
     729                 :    const ParameterList& params,
     730                 :    ostream& str,
     731                 :    int tab,
     732               0 :    bool buildInfo)
     733                 : {
     734                 :    Parameter *param = NULL ;
     735                 : 
     736               0 :    if (params.size() == 0)
     737                 :    {
     738                 :       // No parameters at all.
     739               0 :       str << "void" ;
     740                 :    }
     741                 :    else
     742                 :    {
     743                 :       ParameterListIt it(params) ;
     744                 : 
     745                 :       str << endl ;
     746                 : 
     747               0 :       if (it.GetNext())
     748                 :       {
     749                 :          param = it.GetItem() ;
     750                 :          PrintParameter(param, str, tab, buildInfo) ;
     751                 :       }
     752                 : 
     753               0 :       while (it.GetNext())
     754                 :       {
     755               0 :          str << "," << endl ;
     756                 : 
     757                 :          param = it.GetItem() ;
     758                 :          PrintParameter(param, str, tab, buildInfo) ;
     759                 :       }
     760                 :    }
     761                 : }
     762                 : 
     763                 : void LangJava::PrintParameter(
     764                 :    Parameter *param,
     765                 :    ostream& str,
     766                 :    int tab,
     767               0 :    bool buildInfo)
     768                 : {
     769                 : }
     770                 : 
     771                 : void LangJava::PrintCallParameterList(
     772                 :    const ParameterList& params,
     773                 :    ostream& str,
     774               0 :    int tab)
     775                 : {
     776                 :    Parameter *param = NULL ;
     777                 : 
     778               0 :    if (params.size() == 0)
     779                 :    {
     780                 :       // No parameters at all.
     781                 :    }
     782                 :    else
     783                 :    {
     784                 :       ParameterListIt it(params) ;
     785                 : 
     786                 :       str << endl ;
     787                 : 
     788               0 :       if (it.GetNext())
     789                 :       {
     790                 :          param = it.GetItem() ;
     791                 :          PrintCallParameter(param, str, tab) ;
     792                 :       }
     793                 : 
     794               0 :       while (it.GetNext())
     795                 :       {
     796               0 :          str << "," << endl ;
     797                 : 
     798                 :          param = it.GetItem() ;
     799                 :          PrintCallParameter(param, str, tab) ;
     800                 :       }
     801                 :    }
     802                 : }
     803                 : 
     804                 : void LangJava::PrintCallParameter(
     805                 :    Parameter *param,
     806                 :    ostream& str,
     807               0 :    int tab)
     808                 : {
     809                 : }
     810                 : 
     811                 : void LangJava::BuildTypedefInfo(
     812                 :    SymbolContainer *symTab,
     813                 :    Typedef *type_def,
     814               5 :    JavaInfo *parentInfo)
     815                 : {
     816               5 :    JavaInfo *info = GetJavaInfo(type_def) ;
     817                 : 
     818               5 :    info->_hasHelper = false ;
     819               5 :    info->_hasHolder = false ;
     820                 : 
     821               5 :    NON_DEV("Build Info") ;
     822                 : }
     823                 : 
     824                 : void LangJava::GenerateTypedef(
     825                 :    SymbolContainer *symTab,
     826               5 :    Typedef *type_def)
     827                 : {
     828               5 :    NON_DEV("GenerateTypedef") ;
     829                 :    return ;
     830                 : }
     831                 : 
     832                 : void LangJava::BuildExceptionInfo(
     833                 :    SymbolContainer *symTab,
     834                 :    Exception *exception,
     835               1 :    JavaInfo *parentInfo)
     836                 : {
     837               1 :    JavaInfo *info = GetJavaInfo(exception) ;
     838                 : 
     839               1 :    info->_hasSubPackage = true ;
     840               1 :    info->_hasHelper = true ;
     841               1 :    info->_hasHolder = true ;
     842                 : 
     843                 :    //============================ CONTENT ===================================
     844                 : 
     845               1 :    String name = exception->GetName() ;
     846               1 :    Context *c = symTab->findLocalContext(name) ;
     847               1 :    BuildContextInfo(c, info) ;
     848                 : }
     849                 : 
     850                 : void LangJava::GenerateException(
     851                 :    SymbolContainer *symTab,
     852                 :    Exception *exception,
     853               1 :    bool pseudo)
     854                 : {
     855                 :    //-------------------------------------------------------------------------
     856                 :    // REFERENCE : OMG 02-08-05.pdf, section 1.15.1, page 1-55
     857                 :    //-------------------------------------------------------------------------
     858                 : 
     859               1 :    JavaInfo *info = GetJavaInfo(exception) ;
     860                 : 
     861               1 :    String dirName = _outputDirName ;
     862               1 :    String fileName = info->_fileFullName ;
     863                 : 
     864               1 :    CodePrinter str ;
     865                 : 
     866               1 :    str.open(dirName, fileName) ;
     867                 : 
     868               1 :    str.PrintText(g_header) ;
     869                 : 
     870               1 :    String pkgName = info->_javaPackageName ;
     871               1 :    String exName = info->_javaName ;
     872               1 :    String exHelperName = info->_javaHelperName ;
     873                 : 
     874               1 :    if (pkgName != "")
     875                 :    {
     876               1 :       str.Tab() << "package " << pkgName << " ;" << endl << endl ;
     877                 :    }
     878                 : 
     879                 :    // final public class <ex_name>
     880                 :    //    extends org.omg.CORBA.UserException
     881                 : 
     882               1 :    str.Tab() << "final public class " << exName << endl ;
     883               1 :    str.IncTab() ;
     884               1 :    str.Tab() << "extends org.omg.CORBA.UserException" << endl ;
     885               1 :    str.DecTab() ;
     886                 : 
     887               1 :    str.BeginBloc() ;
     888                 : 
     889               1 :    const MemberList& memberList = exception->GetMembers() ;
     890                 :    Member *member = NULL ;
     891                 :    IDLType *memberType = NULL ;
     892               1 :    String memberName ;
     893                 :    JavaInfo *memberInfo = NULL ;
     894                 : 
     895                 :    MemberListIt it(memberList) ;
     896               2 :    while (it.GetNext())
     897                 :    {
     898                 :       member = it.GetItem() ;
     899               1 :       memberType = member->GetType() ;
     900               1 :       memberInfo = GetJavaInfo(member) ;
     901               1 :       memberName = memberInfo->_javaName ;
     902                 : 
     903                 :       // public <type> <member> ;
     904                 : 
     905               1 :       str.Tab() << "public " ;
     906               1 :       PrintType(str, memberType, JAVA_PRINT_NORMAL) ;
     907               1 :       str.Str() << " " << memberName << " ;" << endl ;
     908                 :    }
     909                 : 
     910                 :    // public <ex_name>()
     911                 :    // {
     912                 :    //    super(<ex_name_helper>.id()) ;
     913                 :    // }
     914                 : 
     915               1 :    str.Tab() << "public " << exName << "()" << endl ;
     916               1 :    str.BeginBloc() ;
     917               1 :    str.Tab() << "super(" << exHelperName << ".id()) ;" << endl ;
     918               1 :    str.EndBloc() ;
     919                 : 
     920               1 :    if (memberList.isEmpty() == false)
     921                 :    {
     922               1 :       str.Endl() ;
     923               1 :       GenerateExceptionConstructor(str, exception, false) ;
     924                 :    }
     925                 : 
     926               1 :    str.Endl() ;
     927               1 :    GenerateExceptionConstructor(str, exception, true) ;
     928                 : 
     929               1 :    str.EndBloc() ;
     930               1 :    str.close() ;
     931                 : 
     932                 :    //============================ CONTENT ===================================
     933                 : 
     934               1 :    String name = exception->GetName() ;
     935               1 :    Context *c = symTab->findLocalContext(name) ;
     936               1 :    GenerateContext(c, pseudo) ;
     937                 : }
     938                 : 
     939                 : void LangJava::GenerateExceptionConstructor(
     940                 :    CodePrinter & str,
     941                 :    Exception *exception,
     942               2 :    bool isFull)
     943                 : {
     944               2 :    JavaInfo *info = GetJavaInfo(exception) ;
     945                 : 
     946               2 :    String exName = info->_javaName ;
     947               2 :    String exHelperName = info->_javaHelperName ;
     948                 : 
     949                 :    // public <ex_name>(
     950                 :    //    <type> <member>
     951                 : 
     952               2 :    str.Tab() << "public " << exName << "(" << endl ;
     953               2 :    str.IncTab() ;
     954                 : 
     955                 :    bool first = true ;
     956                 : 
     957               2 :    if (isFull == true)
     958                 :    {
     959               1 :       str.Tab() << "String _reason" ;
     960                 :       first = false ;
     961                 :    }
     962                 : 
     963               2 :    const MemberList& memberList = exception->GetMembers() ;
     964                 :    Member *member = NULL ;
     965                 :    IDLType *memberType = NULL ;
     966               2 :    String memberName ;
     967                 :    JavaInfo *memberInfo = NULL ;
     968                 : 
     969                 :    MemberListIt it(memberList) ;
     970               4 :    while (it.GetNext())
     971                 :    {
     972                 :       member = it.GetItem() ;
     973               2 :       memberType = member->GetType() ;
     974               2 :       memberInfo = GetJavaInfo(member) ;
     975               2 :       memberName = memberInfo->_javaName ;
     976                 : 
     977               2 :       if (first == true)
     978                 :       {
     979                 :          first = false ;
     980                 :       }
     981                 :       else
     982                 :       {
     983               1 :          str.Str() << "," << endl ;
     984               1 :          str.Tab() ;
     985                 :       }
     986                 : 
     987                 :       // <type> <member> ;
     988                 : 
     989               2 :       str.Tab() ;
     990               2 :       PrintType(str, memberType, JAVA_PRINT_NORMAL) ;
     991               2 :       str.Str() << " " << memberName ;
     992                 :    }
     993                 : 
     994               2 :    str.Str() << ")" << endl ;
     995               2 :    str.DecTab() ;
     996                 : 
     997               2 :    str.BeginBloc() ;
     998                 : 
     999                 :    // (a) super(<ex_helper_name>.id())
    1000                 :    // (b) super(<ex_helper_name>.id()+" "+_reason)
    1001                 : 
    1002               2 :    str.Tab() << "super(" << exHelperName << ".id()" ;
    1003                 : 
    1004               2 :    if (isFull == true)
    1005                 :    {
    1006               1 :       str.Str() << "+\" \"+_reason" ;
    1007                 :    }
    1008                 : 
    1009               2 :    str.Str() << ") ;" << endl ;
    1010                 : 
    1011                 :    MemberListIt it2(memberList) ;
    1012               4 :    while (it2.GetNext())
    1013                 :    {
    1014                 :       member = it2.GetItem() ;
    1015               2 :       memberInfo = GetJavaInfo(member) ;
    1016               2 :       memberName = memberInfo->_javaName ;
    1017                 : 
    1018                 :       // this.<member> = <parameter>
    1019                 : 
    1020                 :       str.Tab() << "this." << memberName
    1021               2 :          << " = " << memberName << " ;" << endl ;
    1022                 :    }
    1023                 : 
    1024               2 :    str.EndBloc() ;
    1025                 : }
    1026                 : 
    1027                 : void LangJava::GenerateExceptionHelper(
    1028               1 :    Exception *exception)
    1029                 : {
    1030                 :    //-------------------------------------------------------------------------
    1031                 :    // REFERENCE : OMG 02-08-05.pdf, section 1.15.1, page 1-55
    1032                 :    //-------------------------------------------------------------------------
    1033                 : 
    1034               1 :    JavaInfo *info = GetJavaInfo(exception) ;
    1035                 : 
    1036               1 :    String dirName = _outputDirName ;
    1037               1 :    String fileName = info->_fileFullHelperName ;
    1038                 : 
    1039               1 :    CodePrinter str ;
    1040                 : 
    1041               1 :    str.open(dirName, fileName) ;
    1042                 : 
    1043               1 :    str.PrintText(g_header) ;
    1044                 : 
    1045               1 :    String pkgName = info->_javaPackageName ;
    1046               1 :    String exName = info->_javaName ;
    1047               1 :    String exHelperName = info->_javaHelperName ;
    1048                 : 
    1049               1 :    if (pkgName != "")
    1050                 :    {
    1051               1 :       str.Tab() << "package " << pkgName << " ;" << endl << endl ;
    1052                 :    }
    1053                 : 
    1054                 :    // abstract public class <ex_helper>
    1055                 : 
    1056               1 :    str.Tab() << "abstract public class " << exHelperName << endl ;
    1057               1 :    str.BeginBloc() ;
    1058                 : 
    1059                 :    // public static void insert(
    1060                 :    //    org.omg.CORBA.Any a,
    1061                 :    //    <enum_name> t)
    1062                 :    // {
    1063                 :    //    -- Implementation is ORB Specific --
    1064                 :    // }
    1065                 : 
    1066               1 :    str.Tab() << "public static void insert(" << endl ;
    1067               1 :    str.IncTab() ;
    1068               1 :    str.Tab() << "org.omg.CORBA.Any a," << endl ;
    1069               1 :    str.Tab() << exName << " t)" << endl ;
    1070               1 :    str.DecTab() ;
    1071               1 :    str.BeginBloc() ;
    1072               1 :    str.Tab() << "// FIXME" << endl ;
    1073               1 :    str.Tab() << "throw new org.omg.CORBA.NO_IMPLEMENT() ;" << endl ;
    1074               1 :    str.EndBloc() ;
    1075               1 :    str.Endl() ;
    1076                 : 
    1077                 :    // public static <ex_name> extract(org.omg.CORBA.Any a)
    1078                 :    // {
    1079                 :    //    -- Implementation is ORB Specific --
    1080                 :    // }
    1081                 : 
    1082               1 :    str.Tab() << "public static " << exName << " extract(org.omg.CORBA.Any a)" << endl ;
    1083               1 :    str.BeginBloc() ;
    1084               1 :    str.Tab() << "// FIXME" << endl ;
    1085               1 :    str.Tab() << "throw new org.omg.CORBA.NO_IMPLEMENT() ;" << endl ;
    1086               1 :    str.EndBloc() ;
    1087               1 :    str.Endl() ;
    1088                 : 
    1089                 :    // public static org.omg.CORBA.TypeCode type()
    1090                 :    // {
    1091                 :    //    -- Implementation is ORB Specific --
    1092                 :    // }
    1093                 : 
    1094               1 :    str.Tab() << "public static org.omg.CORBA.TypeCode type()" << endl ;
    1095               1 :    str.BeginBloc() ;
    1096               1 :    str.Tab() << "// FIXME" << endl ;
    1097               1 :    str.Tab() << "throw new org.omg.CORBA.NO_IMPLEMENT() ;" << endl ;
    1098               1 :    str.EndBloc() ;
    1099               1 :    str.Endl() ;
    1100                 : 
    1101                 :    // public static String id()
    1102                 :    // {
    1103                 :    //    -- Implementation is ORB Specific --
    1104                 :    // }
    1105                 : 
    1106               1 :    str.Tab() << "public static String id()" << endl ;
    1107               1 :    str.BeginBloc() ;
    1108               1 :    str.Tab() << "// FIXME" << endl ;
    1109               1 :    str.Tab() << "throw new org.omg.CORBA.NO_IMPLEMENT() ;" << endl ;
    1110               1 :    str.EndBloc() ;
    1111               1 :    str.Endl() ;
    1112                 : 
    1113                 :    // public static <ex_name> read(
    1114                 :    //    org.omg.CORBA.portable.InputStream is)
    1115                 :    // {
    1116                 :    //    -- Implementation is ORB Specific --
    1117                 :    // }
    1118                 : 
    1119               1 :    str.Tab() << "public static " << exName << " read(" << endl ;
    1120               1 :    str.IncTab() ;
    1121               1 :    str.Tab() << "org.omg.CORBA.portable.InputStream is)" << endl ;
    1122               1 :    str.DecTab() ;
    1123               1 :    str.BeginBloc() ;
    1124               1 :    str.Tab() << "// FIXME" << endl ;
    1125               1 :    str.Tab() << "throw new org.omg.CORBA.NO_IMPLEMENT() ;" << endl ;
    1126               1 :    str.EndBloc() ;
    1127               1 :    str.Endl() ;
    1128                 : 
    1129                 :    // public static void write(
    1130                 :    //    org.omg.CORBA.portable.OutputStream os,
    1131                 :    //    <ex_name> val)
    1132                 :    // {
    1133                 :    //    -- Implementation is ORB Specific --
    1134                 :    // }
    1135                 : 
    1136               1 :    str.Tab() << "public static void write(" << endl ;
    1137               1 :    str.IncTab() ;
    1138               1 :    str.Tab() << "org.omg.CORBA.portable.OutputStream os," << endl ;
    1139               1 :    str.Tab() << exName << " val)" << endl ;
    1140               1 :    str.DecTab() ;
    1141               1 :    str.BeginBloc() ;
    1142               1 :    str.Tab() << "// FIXME" << endl ;
    1143               1 :    str.Tab() << "throw new org.omg.CORBA.NO_IMPLEMENT() ;" << endl ;
    1144               1 :    str.EndBloc() ;
    1145                 : 
    1146               1 :    str.EndBloc() ;
    1147               1 :    str.close() ;
    1148                 : }
    1149                 : 
    1150                 : void LangJava::GenerateExceptionHolder(
    1151               1 :    Exception *exception)
    1152                 : {
    1153                 :    //-------------------------------------------------------------------------
    1154                 :    // REFERENCE : OMG 02-08-05.pdf, section 1.15.1, page 1-55
    1155                 :    //-------------------------------------------------------------------------
    1156                 : 
    1157               1 :    JavaInfo *info = GetJavaInfo(exception) ;
    1158                 : 
    1159               1 :    String dirName = _outputDirName ;
    1160               1 :    String fileName = info->_fileFullHolderName ;
    1161                 : 
    1162               1 :    CodePrinter str ;
    1163                 : 
    1164               1 :    str.open(dirName, fileName) ;
    1165                 : 
    1166               1 :    str.PrintText(g_header) ;
    1167                 : 
    1168               1 :    String pkgName = info->_javaPackageName ;
    1169               1 :    String exName = info->_javaName ;
    1170               1 :    String exHolderName = info->_javaHolderName ;
    1171                 : 
    1172               1 :    if (pkgName != "")
    1173                 :    {
    1174               1 :       str.Tab() << "package " << pkgName << " ;" << endl << endl ;
    1175                 :    }
    1176                 : 
    1177                 :    // final public class <ex_holder>
    1178                 :    //    implements org.omg.CORBA.portable.Streamable
    1179                 : 
    1180               1 :    str.Tab() << "final public class " << exHolderName << endl ;
    1181               1 :    str.IncTab() ;
    1182               1 :    str.Tab() << "implements org.omg.CORBA.portable.Streamable" << endl ;
    1183               1 :    str.DecTab() ;
    1184               1 :    str.BeginBloc() ;
    1185                 : 
    1186                 :    // public <ex_name> value ;
    1187                 : 
    1188               1 :    str.Tab() << "public " << exName << " value ;" << endl ;
    1189                 : 
    1190                 :    // public <ex_holder>()
    1191                 :    // {
    1192                 :    // }
    1193                 : 
    1194               1 :    str.Tab() << "public " << exHolderName << "()" << endl ;
    1195               1 :    str.BeginBloc() ;
    1196               1 :    str.EndBloc() ;
    1197               1 :    str.Endl() ;
    1198                 : 
    1199                 :    // public <ex_holder>(<ex_name> initial)
    1200                 :    // {
    1201                 :    //    -- Implementation is ORB Specific --
    1202                 :    // }
    1203                 : 
    1204                 :    str.Tab() << "public " << exHolderName << "("
    1205               1 :       << exName << " initial)" << endl ;
    1206               1 :    str.BeginBloc() ;
    1207               1 :    str.Tab() << "// FIXME" << endl ;
    1208               1 :    str.Tab() << "throw new org.omg.CORBA.NO_IMPLEMENT() ;" << endl ;
    1209               1 :    str.EndBloc() ;
    1210               1 :    str.Endl() ;
    1211                 : 
    1212                 :    // public void _read(
    1213                 :    //    org.omg.CORBA.portable.InputStream is)
    1214                 :    // {
    1215                 :    //    -- Implementation is ORB Specific --
    1216                 :    // }
    1217                 : 
    1218               1 :    str.Tab() << "public void _read(" << endl ;
    1219               1 :    str.IncTab() ;
    1220               1 :    str.Tab() << "org.omg.CORBA.portable.InputStream is)" << endl ;
    1221               1 :    str.DecTab() ;
    1222               1 :    str.BeginBloc() ;
    1223               1 :    str.Tab() << "// FIXME" << endl ;
    1224               1 :    str.Tab() << "throw new org.omg.CORBA.NO_IMPLEMENT() ;" << endl ;
    1225               1 :    str.EndBloc() ;
    1226               1 :    str.Endl() ;
    1227                 : 
    1228                 :    // public void _write(
    1229                 :    //    org.omg.CORBA.portable.OutputStream os)
    1230                 :    // {
    1231                 :    //    -- Implementation is ORB Specific --
    1232                 :    // }
    1233                 : 
    1234               1 :    str.Tab() << "public void _write(" << endl ;
    1235               1 :    str.IncTab() ;
    1236               1 :    str.Tab() << "org.omg.CORBA.portable.OutputStream os)" << endl ;
    1237               1 :    str.DecTab() ;
    1238               1 :    str.BeginBloc() ;
    1239               1 :    str.Tab() << "// FIXME" << endl ;
    1240               1 :    str.Tab() << "throw new org.omg.CORBA.NO_IMPLEMENT() ;" << endl ;
    1241               1 :    str.EndBloc() ;
    1242               1 :    str.Endl() ;
    1243                 : 
    1244                 :    // public org.omg.CORBA.TypeCode _type()
    1245                 :    // {
    1246                 :    //    -- Implementation is ORB Specific --
    1247                 :    // }
    1248                 : 
    1249               1 :    str.Tab() << "public org.omg.CORBA.TypeCode _type()" << endl ;
    1250               1 :    str.BeginBloc() ;
    1251               1 :    str.Tab() << "// FIXME" << endl ;
    1252               1 :    str.Tab() << "throw new org.omg.CORBA.NO_IMPLEMENT() ;" << endl ;
    1253               1 :    str.EndBloc() ;
    1254                 : 
    1255               1 :    str.EndBloc() ;
    1256               1 :    str.close() ;
    1257                 : }
    1258                 : 
    1259                 : void LangJava::BuildStructInfo(
    1260                 :    SymbolContainer *symTab,
    1261                 :    Struct *structure,
    1262               2 :    JavaInfo *parentInfo)
    1263                 : {
    1264               2 :    JavaInfo *info = GetJavaInfo(structure) ;
    1265                 : 
    1266               2 :    info->_hasSubPackage = true ;
    1267               2 :    info->_hasHelper = true ;
    1268               2 :    info->_hasHolder = true ;
    1269                 : 
    1270                 :    //============================ CONTENT ===================================
    1271                 : 
    1272               2 :    String name = structure->GetName() ;
    1273               2 :    Context *c = symTab->findLocalContext(name) ;
    1274               2 :    BuildContextInfo(c, info) ;
    1275                 : }
    1276                 : 
    1277                 : void LangJava::GenerateStruct(
    1278                 :    SymbolContainer *symTab,
    1279                 :    Struct *structure,
    1280               2 :    bool pseudo)
    1281                 : {
    1282                 :    //-------------------------------------------------------------------------
    1283                 :    // REFERENCE : OMG 02-08-05.pdf, section 1.8, page 1-20
    1284                 :    //-------------------------------------------------------------------------
    1285                 : 
    1286               2 :    JavaInfo *info = GetJavaInfo(structure) ;
    1287                 : 
    1288               2 :    String dirName = _outputDirName ;
    1289               2 :    String fileName = info->_fileFullName ;
    1290                 : 
    1291               2 :    CodePrinter str ;
    1292                 : 
    1293               2 :    str.open(dirName, fileName) ;
    1294                 : 
    1295               2 :    str.PrintText(g_header) ;
    1296                 : 
    1297               2 :    String pkgName = info->_javaPackageName ;
    1298               2 :    String strName = info->_javaName ;
    1299               2 :    String strHelperName = info->_javaHelperName ;
    1300                 : 
    1301               2 :    if (pkgName != "")
    1302                 :    {
    1303               2 :       str.Tab() << "package " << pkgName << " ;" << endl << endl ;
    1304                 :    }
    1305                 : 
    1306                 :    // final public class <struct_name>
    1307                 :    //    implements org.omg.CORBA.portable.IDLEntity
    1308                 : 
    1309               2 :    str.Tab() << "final public class " << strName << endl ;
    1310               2 :    str.IncTab() ;
    1311               2 :    str.Tab() << "implements org.omg.CORBA.portable.IDLEntity" << endl ;
    1312               2 :    str.DecTab() ;
    1313                 : 
    1314               2 :    str.BeginBloc() ;
    1315                 : 
    1316               2 :    const MemberList& memberList = structure->GetMembers() ;
    1317                 :    Member *member = NULL ;
    1318                 :    IDLType *memberType = NULL ;
    1319               2 :    String memberName ;
    1320                 :    JavaInfo *memberInfo = NULL ;
    1321                 : 
    1322                 :    MemberListIt it(memberList) ;
    1323               6 :    while (it.GetNext())
    1324                 :    {
    1325                 :       member = it.GetItem() ;
    1326               4 :       memberType = member->GetType() ;
    1327               4 :       memberInfo = GetJavaInfo(member) ;
    1328               4 :       memberName = memberInfo->_javaName ;
    1329                 : 
    1330                 :       // public <type> <member> ;
    1331                 : 
    1332               4 :       str.Tab() << "public " ;
    1333               4 :       PrintType(str, memberType, JAVA_PRINT_NORMAL) ;
    1334               4 :       str.Str() << " " << memberName << " ;" << endl ;
    1335                 :    }
    1336               2 :    str.Endl() ;
    1337                 : 
    1338                 :    // public <struct_name>() {}
    1339                 : 
    1340               2 :    str.Tab() << "public " << strName << "() {}" << endl ;
    1341                 : 
    1342               2 :    if (memberList.isEmpty() == false)
    1343                 :    {
    1344                 :       // public <struct_name>(
    1345                 : 
    1346               2 :       str.Tab() << "public " << strName << "(" << endl ;
    1347               2 :       str.IncTab() ;
    1348                 : 
    1349                 :       bool first = true ;
    1350                 :       MemberListIt it2(memberList) ;
    1351               6 :       while (it2.GetNext())
    1352                 :       {
    1353                 :          member = it2.GetItem() ;
    1354               4 :          memberType = member->GetType() ;
    1355               4 :          memberInfo = GetJavaInfo(member) ;
    1356               4 :          memberName = memberInfo->_javaName ;
    1357                 : 
    1358                 :          //    <type> <param>,
    1359                 :          //    <type> <param>
    1360                 : 
    1361               4 :          if (first == true)
    1362                 :          {
    1363                 :             first = false ;
    1364                 :          }
    1365                 :          else
    1366                 :          {
    1367               2 :             str.Str() << "," << endl ;
    1368                 :          }
    1369                 : 
    1370               4 :          str.Tab() ;
    1371               4 :          PrintType(str, memberType, JAVA_PRINT_NORMAL) ;
    1372               4 :          str.Str() << " " << memberName ;
    1373                 :       }
    1374               2 :       str.Str() << ")" << endl ;
    1375               2 :       str.DecTab() ;
    1376                 : 
    1377               2 :       str.BeginBloc() ;
    1378               2 :       str.Tab() << "throw new org.omg.CORBA.NO_IMPLEMENT() ;" << endl ;
    1379               2 :       str.EndBloc() ;
    1380                 :    }
    1381                 : 
    1382               2 :    str.EndBloc() ;
    1383               2 :    str.close() ;
    1384                 : 
    1385                 :    //============================ CONTENT ===================================
    1386                 : 
    1387               2 :    String name = structure->GetName() ;
    1388               2 :    Context *c = symTab->findLocalContext(name) ;
    1389               2 :    GenerateContext(c, pseudo) ;
    1390                 : }
    1391                 : 
    1392                 : void LangJava::GenerateStructHelper(
    1393               2 :    Struct *structure)
    1394                 : {
    1395                 :    //-------------------------------------------------------------------------
    1396                 :    // REFERENCE : OMG 02-08-05.pdf, section 1.8, page 1-20
    1397                 :    //-------------------------------------------------------------------------
    1398                 : 
    1399               2 :    JavaInfo *info = GetJavaInfo(structure) ;
    1400                 : 
    1401               2 :    String dirName = _outputDirName ;
    1402               2 :    String fileName = info->_fileFullHelperName ;
    1403                 : 
    1404               2 :    CodePrinter str ;
    1405                 : 
    1406               2 :    str.open(dirName, fileName) ;
    1407                 : 
    1408               2 :    str.PrintText(g_header) ;
    1409                 : 
    1410               2 :    String pkgName = info->_javaPackageName ;
    1411               2 :    String strName = info->_javaName ;
    1412               2 :    String strHelperName = info->_javaHelperName ;
    1413                 : 
    1414               2 :    if (pkgName != "")
    1415                 :    {
    1416               2 :       str.Tab() << "package " << pkgName << " ;" << endl << endl ;
    1417                 :    }
    1418                 : 
    1419                 :    // abstract public class <str_helper>
    1420                 : 
    1421               2 :    str.Tab() << "abstract public class " << strHelperName << endl ;
    1422               2 :    str.BeginBloc() ;
    1423                 : 
    1424                 :    // public static void insert(
    1425                 :    //    org.omg.CORBA.Any a,
    1426                 :    //    <str_name> t)
    1427                 :    // {
    1428                 :    //    -- Implementation is ORB Specific --
    1429                 :    // }
    1430                 : 
    1431               2 :    str.Tab() << "public static void insert(" << endl ;
    1432               2 :    str.IncTab() ;
    1433               2 :    str.Tab() << "org.omg.CORBA.Any a," << endl ;
    1434               2 :    str.Tab() << strName << " t)" << endl ;
    1435               2 :    str.DecTab() ;
    1436               2 :    str.BeginBloc() ;
    1437               2 :    str.Tab() << "// FIXME" << endl ;
    1438               2 :    str.Tab() << "throw new org.omg.CORBA.NO_IMPLEMENT() ;" << endl ;
    1439               2 :    str.EndBloc() ;
    1440               2 :    str.Endl() ;
    1441                 : 
    1442                 :    // public static <str_name> extract(org.omg.CORBA.Any a)
    1443                 :    // {
    1444                 :    //    -- Implementation is ORB Specific --
    1445                 :    // }
    1446                 : 
    1447               2 :    str.Tab() << "public static " << strName << " extract(org.omg.CORBA.Any a)" << endl ;
    1448               2 :    str.BeginBloc() ;
    1449               2 :    str.Tab() << "// FIXME" << endl ;
    1450               2 :    str.Tab() << "throw new org.omg.CORBA.NO_IMPLEMENT() ;" << endl ;
    1451               2 :    str.EndBloc() ;
    1452               2 :    str.Endl() ;
    1453                 : 
    1454                 :    // public static org.omg.CORBA.TypeCode type()
    1455                 :    // {
    1456                 :    //    -- Implementation is ORB Specific --
    1457                 :    // }
    1458                 : 
    1459               2 :    str.Tab() << "public static org.omg.CORBA.TypeCode type()" << endl ;
    1460               2 :    str.BeginBloc() ;
    1461               2 :    str.Tab() << "// FIXME" << endl ;
    1462               2 :    str.Tab() << "throw new org.omg.CORBA.NO_IMPLEMENT() ;" << endl ;
    1463               2 :    str.EndBloc() ;
    1464               2 :    str.Endl() ;
    1465                 : 
    1466                 :    // public static String id()
    1467                 :    // {
    1468                 :    //    -- Implementation is ORB Specific --
    1469                 :    // }
    1470                 : 
    1471               2 :    str.Tab() << "public static String id()" << endl ;
    1472               2 :    str.BeginBloc() ;
    1473               2 :    str.Tab() << "// FIXME" << endl ;
    1474               2 :    str.Tab() << "throw new org.omg.CORBA.NO_IMPLEMENT() ;" << endl ;
    1475               2 :    str.EndBloc() ;
    1476               2 :    str.Endl() ;
    1477                 : 
    1478                 :    // public static <str_name> read(
    1479                 :    //    org.omg.CORBA.portable.InputStream is)
    1480                 :    // {
    1481                 :    //    -- Implementation is ORB Specific --
    1482                 :    // }
    1483                 : 
    1484               2 :    str.Tab() << "public static " << strName << " read(" << endl ;
    1485               2 :    str.IncTab() ;
    1486               2 :    str.Tab() << "org.omg.CORBA.portable.InputStream is)" << endl ;
    1487               2 :    str.DecTab() ;
    1488               2 :    str.BeginBloc() ;
    1489               2 :    str.Tab() << "// FIXME" << endl ;
    1490               2 :    str.Tab() << "throw new org.omg.CORBA.NO_IMPLEMENT() ;" << endl ;
    1491               2 :    str.EndBloc() ;
    1492               2 :    str.Endl() ;
    1493                 : 
    1494                 :    // public static void write(
    1495                 :    //    org.omg.CORBA.portable.OutputStream os,
    1496                 :    //    <str_name> val)
    1497                 :    // {
    1498                 :    //    -- Implementation is ORB Specific --
    1499                 :    // }
    1500                 : 
    1501               2 :    str.Tab() << "public static void write(" << endl ;
    1502               2 :    str.IncTab() ;
    1503               2 :    str.Tab() << "org.omg.CORBA.portable.OutputStream os," << endl ;
    1504               2 :    str.Tab() << strName << " val)" << endl ;
    1505               2 :    str.DecTab() ;
    1506               2 :    str.BeginBloc() ;
    1507               2 :    str.Tab() << "// FIXME" << endl ;
    1508               2 :    str.Tab() << "throw new org.omg.CORBA.NO_IMPLEMENT() ;" << endl ;
    1509               2 :    str.EndBloc() ;
    1510                 : 
    1511               2 :    str.EndBloc() ;
    1512               2 :    str.close() ;
    1513                 : }
    1514                 : 
    1515                 : void LangJava::GenerateStructHolder(
    1516               2 :    Struct *structure)
    1517                 : {
    1518                 :    //-------------------------------------------------------------------------
    1519                 :    // REFERENCE : OMG 02-08-05.pdf, section 1.8, page 1-20
    1520                 :    //-------------------------------------------------------------------------
    1521                 : 
    1522               2 :    JavaInfo *info = GetJavaInfo(structure) ;
    1523                 : 
    1524               2 :    String dirName = _outputDirName ;
    1525               2 :    String fileName = info->_fileFullHolderName ;
    1526                 : 
    1527               2 :    CodePrinter str ;
    1528                 : 
    1529               2 :    str.open(dirName, fileName) ;
    1530                 : 
    1531               2 :    str.PrintText(g_header) ;
    1532                 : 
    1533               2 :    String pkgName = info->_javaPackageName ;
    1534               2 :    String strName = info->_javaName ;
    1535               2 :    String strHolderName = info->_javaHolderName ;
    1536                 : 
    1537               2 :    if (pkgName != "")
    1538                 :    {
    1539               2 :       str.Tab() << "package " << pkgName << " ;" << endl << endl ;
    1540                 :    }
    1541                 : 
    1542                 :    // final public class <str_holder>
    1543                 :    //    implements org.omg.CORBA.portable.Streamable
    1544                 : 
    1545               2 :    str.Tab() << "final public class " << strHolderName << endl ;
    1546               2 :    str.IncTab() ;
    1547               2 :    str.Tab() << "implements org.omg.CORBA.portable.Streamable" << endl ;
    1548               2 :    str.DecTab() ;
    1549               2 :    str.BeginBloc() ;
    1550                 : 
    1551                 :    // public <str_name> value ;
    1552                 : 
    1553               2 :    str.Tab() << "public " << strName << " value ;" << endl ;
    1554                 : 
    1555                 :    // public <ex_holder>()
    1556                 :    // {
    1557                 :    // }
    1558                 : 
    1559               2 :    str.Tab() << "public " << strHolderName << "()" << endl ;
    1560               2 :    str.BeginBloc() ;
    1561               2 :    str.EndBloc() ;
    1562               2 :    str.Endl() ;
    1563                 : 
    1564                 :    // public <str_holder>(<str_name> initial)
    1565                 :    // {
    1566                 :    //    -- Implementation is ORB Specific --
    1567                 :    // }
    1568                 : 
    1569                 :    str.Tab() << "public " << strHolderName << "("
    1570               2 :       << strName << " initial)" << endl ;
    1571               2 :    str.BeginBloc() ;
    1572               2 :    str.Tab() << "// FIXME" << endl ;
    1573               2 :    str.Tab() << "throw new org.omg.CORBA.NO_IMPLEMENT() ;" << endl ;
    1574               2 :    str.EndBloc() ;
    1575               2 :    str.Endl() ;
    1576                 : 
    1577                 :    // public void _read(
    1578                 :    //    org.omg.CORBA.portable.InputStream is)
    1579                 :    // {
    1580                 :    //    -- Implementation is ORB Specific --
    1581                 :    // }
    1582                 : 
    1583               2 :    str.Tab() << "public void _read(" << endl ;
    1584               2 :    str.IncTab() ;
    1585               2 :    str.Tab() << "org.omg.CORBA.portable.InputStream is)" << endl ;
    1586               2 :    str.DecTab() ;
    1587               2 :    str.BeginBloc() ;
    1588               2 :    str.Tab() << "// FIXME" << endl ;
    1589               2 :    str.Tab() << "throw new org.omg.CORBA.NO_IMPLEMENT() ;" << endl ;
    1590               2 :    str.EndBloc() ;
    1591               2 :    str.Endl() ;
    1592                 : 
    1593                 :    // public void _write(
    1594                 :    //    org.omg.CORBA.portable.OutputStream os)
    1595                 :    // {
    1596                 :    //    -- Implementation is ORB Specific --
    1597                 :    // }
    1598                 : 
    1599               2 :    str.Tab() << "public void _write(" << endl ;
    1600               2 :    str.IncTab() ;
    1601               2 :    str.Tab() << "org.omg.CORBA.portable.OutputStream os)" << endl ;
    1602               2 :    str.DecTab() ;
    1603               2 :    str.BeginBloc() ;
    1604               2 :    str.Tab() << "// FIXME" << endl ;
    1605               2 :    str.Tab() << "throw new org.omg.CORBA.NO_IMPLEMENT() ;" << endl ;
    1606               2 :    str.EndBloc() ;
    1607               2 :    str.Endl() ;
    1608                 : 
    1609                 :    // public org.omg.CORBA.TypeCode _type()
    1610                 :    // {
    1611                 :    //    -- Implementation is ORB Specific --
    1612                 :    // }
    1613                 : 
    1614               2 :    str.Tab() << "public org.omg.CORBA.TypeCode _type()" << endl ;
    1615               2 :    str.BeginBloc() ;
    1616               2 :    str.Tab() << "// FIXME" << endl ;
    1617               2 :    str.Tab() << "throw new org.omg.CORBA.NO_IMPLEMENT() ;" << endl ;
    1618               2 :    str.EndBloc() ;
    1619                 : 
    1620               2 :    str.EndBloc() ;
    1621               2 :    str.close() ;
    1622                 : }
    1623                 : 
    1624                 : void LangJava::GenerateUnion(
    1625                 :    SymbolContainer *symTab,
    1626               0 :    Union *union_symbol)
    1627                 : {
    1628               0 :    NON_DEV("GenerateUnionDecl") ;
    1629                 : }
    1630                 : 
    1631                 : void LangJava::BuildConstantInfo(
    1632                 :    SymbolContainer *symTab,
    1633                 :    Constant *constant,
    1634               7 :    JavaInfo *parentInfo)
    1635                 : {
    1636               7 :    JavaInfo *info = GetJavaInfo(constant) ;
    1637                 : 
    1638               7 :    info->_hasHelper = false ;
    1639               7 :    info->_hasHolder = false ;
    1640                 : 
    1641               7 :    NON_DEV("Build Info") ;
    1642                 : }
    1643                 : 
    1644                 : void LangJava::GenerateConstant(
    1645                 :    SymbolContainer *symTab,
    1646               7 :    Constant *constant)
    1647                 : {
    1648                 :    //-------------------------------------------------------------------------
    1649                 :    // REFERENCE : OMG 02-08-05.pdf, section 1.6.2, page 1-17
    1650                 :    //-------------------------------------------------------------------------
    1651                 : 
    1652               7 :    JavaInfo *info = GetJavaInfo(constant) ;
    1653                 : 
    1654               7 :    String dirName = _outputDirName ;
    1655               7 :    String fileName = info->_fileFullName ;
    1656                 : 
    1657               7 :    CodePrinter str ;
    1658                 : 
    1659               7 :    str.open(dirName, fileName) ;
    1660                 : 
    1661               7 :    str.PrintText(g_header) ;
    1662                 : 
    1663               7 :    String pkgName = info->_javaPackageName ;
    1664               7 :    String constantName = info->_javaName ;
    1665               7 :    IDLValue *value = constant->GetValue() ;
    1666               7 :    IDLType *type = value->GetValueType() ;
    1667                 : 
    1668               7 :    if (pkgName != "")
    1669                 :    {
    1670               7 :       str.Tab() << "package " << pkgName << " ;" << endl << endl ;
    1671                 :    }
    1672                 : 
    1673                 :    // public interface <constant_name>
    1674                 : 
    1675               7 :    str.Tab() << "public interface " << constantName << endl ;
    1676               7 :    str.BeginBloc() ;
    1677                 : 
    1678                 :    // <type> value = <value> ;
    1679                 : 
    1680               7 :    str.Tab() ;
    1681               7 :    PrintType(str, type, JAVA_PRINT_NORMAL) ;
    1682               7 :    str.Str() << " value = " ;
    1683               7 :    PrintValue(str, value) ;
    1684               7 :    str.Str() << " ;" << endl ;
    1685                 : 
    1686               7 :    str.EndBloc() ;
    1687               7 :    str.close() ;
    1688                 : }
    1689                 : 
    1690                 : void LangJava::BuildEnumInfo(
    1691                 :    SymbolContainer *symTab,
    1692                 :    Enum *enum_symbol,
    1693               8 :    JavaInfo *parentInfo)
    1694                 : {
    1695               8 :    JavaInfo *info = GetJavaInfo(enum_symbol) ;
    1696                 : 
    1697               8 :    info->_hasHelper = true ;
    1698               8 :    info->_hasHolder = true ;
    1699                 : }
    1700                 : 
    1701                 : void LangJava::GenerateEnum(
    1702                 :    SymbolContainer *symTab,
    1703               8 :    Enum *enum_symbol)
    1704                 : {
    1705                 :    //-------------------------------------------------------------------------
    1706                 :    // REFERENCE : OMG 02-08-05.pdf, section 1.7, page 1-17
    1707                 :    //-------------------------------------------------------------------------
    1708                 : 
    1709               8 :    JavaInfo *info = GetJavaInfo(enum_symbol) ;
    1710                 : 
    1711               8 :    String dirName = _outputDirName ;
    1712               8 :    String fileName = info->_fileFullName ;
    1713                 : 
    1714               8 :    CodePrinter str ;
    1715                 : 
    1716               8 :    str.open(dirName, fileName) ;
    1717                 : 
    1718               8 :    str.PrintText(g_header) ;
    1719                 : 
    1720               8 :    String pkgName = info->_javaPackageName ;
    1721               8 :    String enumName = info->_javaName ;
    1722                 : 
    1723               8 :    if (pkgName != "")
    1724                 :    {
    1725               8 :       str.Tab() << "package " << pkgName << " ;" << endl << endl ;
    1726                 :    }
    1727                 : 
    1728                 :    // public class <enum_name>
    1729                 :    //    implements org.omg.CORBA.portable.IDLEntity
    1730                 : 
    1731               8 :    str.Tab() << "public class " << enumName << endl ;
    1732               8 :    str.IncTab() ;
    1733               8 :    str.Tab() << "implements org.omg.CORBA.portable.IDLEntity" << endl ;
    1734               8 :    str.DecTab() ;
    1735                 : 
    1736               8 :    str.BeginBloc() ;
    1737                 : 
    1738               8 :    const EnumItemList& itemList = enum_symbol->GetItems() ;
    1739                 :    int itemValue = 0 ;
    1740                 :    EnumItem *item ;
    1741               8 :    String itemName ;
    1742                 :    JavaInfo *itemInfo = NULL ;
    1743                 : 
    1744                 :    EnumItemListIt it(itemList) ;
    1745              25 :    while (it.GetNext())
    1746                 :    {
    1747                 :       item = it.GetItem() ;
    1748              17 :       itemInfo = GetJavaInfo(item) ;
    1749              17 :       itemName = itemInfo->_javaName ;
    1750                 : 
    1751                 :       // public static final int _<label> = <value> ;
    1752                 : 
    1753                 :       str.Tab() << "public static final int _" << itemName
    1754              34 :          << " = " << itemValue << " ; " << endl ;
    1755                 : 
    1756                 :       // public static final <enum_name> <label>
    1757                 :       // = new <enum_name>(_<label>) ;
    1758                 : 
    1759                 :       str.Tab() << "public static final "
    1760              17 :          << enumName << " " << itemName << endl ;
    1761                 : 
    1762                 :       str.Tab() << "= new " << enumName
    1763              17 :          << "(_" << itemName << ") ;" << endl << endl ;
    1764                 : 
    1765              17 :       itemValue ++ ;
    1766                 :    }
    1767                 : 
    1768                 :    // -- Implementation is ORB Specific --
    1769                 :    // private int _value ;
    1770                 : 
    1771               8 :    str.Tab() << "private int _value ; " << endl << endl ;
    1772                 : 
    1773                 :    // public int value ()
    1774                 :    // {
    1775                 :    //    -- Implementation is ORB Specific --
    1776                 :    //    return _value ;
    1777                 :    // }
    1778                 : 
    1779               8 :    str.Tab() << "public int value()" << endl ;
    1780               8 :    str.BeginBloc() ;
    1781               8 :    str.Tab() << "return _value ;" << endl ;
    1782               8 :    str.EndBloc() ;
    1783               8 :    str.Endl() ;
    1784                 : 
    1785                 :    // public static <enum_name> from_int(int value)
    1786                 :    // {
    1787                 :    //    -- Implementation is ORB Specific --
    1788                 :    //    switch(value)
    1789                 :    //    {
    1790                 :    //       case _<label> :
    1791                 :    //       {
    1792                 :    //          return <enum_item> ;
    1793                 :    //       }
    1794                 :    //       default :
    1795                 :    //       {
    1796                 :    //          throw new org.omg.CORBA.BAD_PARAM();
    1797                 :    //       }
    1798                 :    //    }
    1799                 :    // }
    1800                 : 
    1801                 :    str.Tab() << "public static " << enumName
    1802               8 :       << " from_int(int value)" << endl ;
    1803               8 :    str.BeginBloc() ;
    1804               8 :    str.Tab() << "switch(value)" << endl ;
    1805               8 :    str.BeginBloc() ;
    1806                 : 
    1807                 :    EnumItemListIt it2(itemList) ;
    1808              25 :    while (it2.GetNext())
    1809                 :    {
    1810                 :       item = it2.GetItem() ;
    1811              17 :       itemInfo = GetJavaInfo(item) ;
    1812              17 :       itemName = itemInfo->_javaName ;
    1813                 : 
    1814              17 :       str.Tab() << "case _" << itemName << " :" << endl ;
    1815              17 :       str.BeginBloc() ;
    1816              17 :       str.Tab() << "return " << itemName << " ;" << endl ;
    1817              17 :       str.EndBloc() ;
    1818                 :    }
    1819                 : 
    1820               8 :    str.Tab() << "default :" << endl ;
    1821               8 :    str.BeginBloc() ;
    1822               8 :    str.Tab() << "throw new org.omg.CORBA.BAD_PARAM() ;" << endl ;
    1823               8 :    str.EndBloc() ;
    1824                 : 
    1825               8 :    str.EndBloc() ;
    1826               8 :    str.EndBloc() ;
    1827               8 :    str.Endl() ;
    1828                 : 
    1829                 :    // protected <enum_name>(int)
    1830                 :    // {
    1831                 :    //    -- Implementation is ORB Specific --
    1832                 :    //    _value = value ;
    1833                 :    // }
    1834                 : 
    1835               8 :    str.Tab() << "protected " << enumName << "(int value)" << endl ;
    1836               8 :    str.BeginBloc() ;
    1837               8 :    str.Tab() << "_value = value ;" << endl ;
    1838               8 :    str.EndBloc() ;
    1839               8 :    str.Endl() ;
    1840                 : 
    1841                 :    // public java.lang.Object readResolve()
    1842                 :    //    throws java.io.ObjectStreamException
    1843                 :    // {
    1844                 :    //    -- Implementation is ORB Specific --
    1845                 :    //    return from_int( value() ) ;
    1846                 :    // }
    1847                 : 
    1848               8 :    str.Tab() << "public java.lang.Object readResolve()" << endl ;
    1849               8 :    str.IncTab() ;
    1850               8 :    str.Tab() << "throws java.io.ObjectStreamException" << endl ;
    1851               8 :    str.DecTab() ;
    1852               8 :    str.BeginBloc() ;
    1853               8 :    str.Tab() << "return from_int( value() ) ;" << endl ;
    1854               8 :    str.EndBloc() ;
    1855                 : 
    1856               8 :    str.EndBloc() ;
    1857               8 :    str.close() ;
    1858                 : }
    1859                 : 
    1860                 : void LangJava::GenerateEnumHelper(
    1861               8 :    Enum *enum_symbol)
    1862                 : {
    1863                 :    //-------------------------------------------------------------------------
    1864                 :    // REFERENCE : OMG 02-08-05.pdf, section 1.7, page 1-17
    1865                 :    //-------------------------------------------------------------------------
    1866                 : 
    1867               8 :    JavaInfo *info = GetJavaInfo(enum_symbol) ;
    1868                 : 
    1869               8 :    String dirName = _outputDirName ;
    1870               8 :    String fileName = info->_fileFullHelperName ;
    1871                 : 
    1872               8 :    CodePrinter str ;
    1873                 : 
    1874               8 :    str.open(dirName, fileName) ;
    1875                 : 
    1876               8 :    str.PrintText(g_header) ;
    1877                 : 
    1878               8 :    String pkgName = info->_javaPackageName ;
    1879               8 :    String enumName = info->_javaName ;
    1880               8 :    String enumHelperName = info->_javaHelperName ;
    1881                 : 
    1882               8 :    if (pkgName != "")
    1883                 :    {
    1884               8 :       str.Tab() << "package " << pkgName << " ;" << endl << endl ;
    1885                 :    }
    1886                 : 
    1887                 :    // abstract public class <enum_helper>
    1888                 : 
    1889               8 :    str.Tab() << "abstract public class " << enumHelperName << endl ;
    1890               8 :    str.BeginBloc() ;
    1891                 : 
    1892                 :    // public static void insert(
    1893                 :    //    org.omg.CORBA.Any a,
    1894                 :    //    <enum_name> t)
    1895                 :    // {
    1896                 :    //    -- Implementation is ORB Specific --
    1897                 :    // }
    1898                 : 
    1899               8 :    str.Tab() << "public static void insert(" << endl ;
    1900               8 :    str.IncTab() ;
    1901               8 :    str.Tab() << "org.omg.CORBA.Any a," << endl ;
    1902               8 :    str.Tab() << enumName << " t)" << endl ;
    1903               8 :    str.DecTab() ;
    1904               8 :    str.BeginBloc() ;
    1905               8 :    str.Tab() << "// FIXME" << endl ;
    1906               8 :    str.Tab() << "throw new org.omg.CORBA.NO_IMPLEMENT() ;" << endl ;
    1907               8 :    str.EndBloc() ;
    1908               8 :    str.Endl() ;
    1909                 : 
    1910                 :    // public static <enum_name> extract(org.omg.CORBA.Any a)
    1911                 :    // {
    1912                 :    //    -- Implementation is ORB Specific --
    1913                 :    // }
    1914                 : 
    1915               8 :    str.Tab() << "public static " << enumName << " extract(org.omg.CORBA.Any a)" << endl ;
    1916               8 :    str.BeginBloc() ;
    1917               8 :    str.Tab() << "// FIXME" << endl ;
    1918               8 :    str.Tab() << "throw new org.omg.CORBA.NO_IMPLEMENT() ;" << endl ;
    1919               8 :    str.EndBloc() ;
    1920               8 :    str.Endl() ;
    1921                 : 
    1922                 :    // public static org.omg.CORBA.TypeCode type()
    1923                 :    // {
    1924                 :    //    -- Implementation is ORB Specific --
    1925                 :    // }
    1926                 : 
    1927               8 :    str.Tab() << "public static org.omg.CORBA.TypeCode type()" << endl ;
    1928               8 :    str.BeginBloc() ;
    1929               8 :    str.Tab() << "// FIXME" << endl ;
    1930               8 :    str.Tab() << "throw new org.omg.CORBA.NO_IMPLEMENT() ;" << endl ;
    1931               8 :    str.EndBloc() ;
    1932               8 :    str.Endl() ;
    1933                 : 
    1934                 :    // public static String id()
    1935                 :    // {
    1936                 :    //    -- Implementation is ORB Specific --
    1937                 :    // }
    1938                 : 
    1939               8 :    str.Tab() << "public static String id()" << endl ;
    1940               8 :    str.BeginBloc() ;
    1941               8 :    str.Tab() << "// FIXME" << endl ;
    1942               8 :    str.Tab() << "throw new org.omg.CORBA.NO_IMPLEMENT() ;" << endl ;
    1943               8 :    str.EndBloc() ;
    1944               8 :    str.Endl() ;
    1945                 : 
    1946                 :    // public static <enum_name> read(
    1947                 :    //    org.omg.CORBA.portable.InputStream is)
    1948                 :    // {
    1949                 :    //    -- Implementation is ORB Specific --
    1950                 :    // }
    1951                 : 
    1952               8 :    str.Tab() << "public static " << enumName << " read(" << endl ;
    1953               8 :    str.IncTab() ;
    1954               8 :    str.Tab() << "org.omg.CORBA.portable.InputStream is)" << endl ;
    1955               8 :    str.DecTab() ;
    1956               8 :    str.BeginBloc() ;
    1957               8 :    str.Tab() << "// FIXME" << endl ;
    1958               8 :    str.Tab() << "throw new org.omg.CORBA.NO_IMPLEMENT() ;" << endl ;
    1959               8 :    str.EndBloc() ;
    1960               8 :    str.Endl() ;
    1961                 : 
    1962                 :    // public static void write(
    1963                 :    //    org.omg.CORBA.portable.OutputStream os,
    1964                 :    //    <enum_name> val)
    1965                 :    // {
    1966                 :    //    -- Implementation is ORB Specific --
    1967                 :    // }
    1968                 : 
    1969               8 :    str.Tab() << "public static void write(" << endl ;
    1970               8 :    str.IncTab() ;
    1971               8 :    str.Tab() << "org.omg.CORBA.portable.OutputStream os," << endl ;
    1972               8 :    str.Tab() << enumName << " val)" << endl ;
    1973               8 :    str.DecTab() ;
    1974               8 :    str.BeginBloc() ;
    1975               8 :    str.Tab() << "// FIXME" << endl ;
    1976               8 :    str.Tab() << "throw new org.omg.CORBA.NO_IMPLEMENT() ;" << endl ;
    1977               8 :    str.EndBloc() ;
    1978                 : 
    1979               8 :    str.EndBloc() ;
    1980               8 :    str.close() ;
    1981                 : }
    1982                 : 
    1983                 : void LangJava::GenerateEnumHolder(
    1984               8 :    Enum *enum_symbol)
    1985                 : {
    1986                 :    //-------------------------------------------------------------------------
    1987                 :    // REFERENCE : OMG 02-08-05.pdf, section 1.7, page 1-17
    1988                 :    //-------------------------------------------------------------------------
    1989                 : 
    1990               8 :    JavaInfo *info = GetJavaInfo(enum_symbol) ;
    1991                 : 
    1992               8 :    String dirName = _outputDirName ;
    1993               8 :    String fileName = info->_fileFullHolderName ;
    1994                 : 
    1995               8 :    CodePrinter str ;
    1996                 : 
    1997               8 :    str.open(dirName, fileName) ;
    1998                 : 
    1999               8 :    str.PrintText(g_header) ;
    2000                 : 
    2001               8 :    String pkgName = info->_javaPackageName ;
    2002               8 :    String enumName = info->_javaName ;
    2003               8 :    String enumHolderName = info->_javaHolderName ;
    2004                 : 
    2005               8 :    if (pkgName != "")
    2006                 :    {
    2007               8 :       str.Tab() << "package " << pkgName << " ;" << endl << endl ;
    2008                 :    }
    2009                 : 
    2010                 :    // final public class <enum_holder>
    2011                 :    //    implements org.omg.CORBA.portable.Streamable
    2012                 : 
    2013               8 :    str.Tab() << "final public class " << enumHolderName << endl ;
    2014               8 :    str.IncTab() ;
    2015               8 :    str.Tab() << "implements org.omg.CORBA.portable.Streamable" << endl ;
    2016               8 :    str.DecTab() ;
    2017               8 :    str.BeginBloc() ;
    2018                 : 
    2019                 :    // public <enum_name> value ;
    2020                 : 
    2021               8 :    str.Tab() << "public " << enumName << " value ;" << endl ;
    2022                 : 
    2023                 :    // public <enum_holder>()
    2024                 :    // {
    2025                 :    // }
    2026                 : 
    2027               8 :    str.Tab() << "public " << enumHolderName << "()" << endl ;
    2028               8 :    str.BeginBloc() ;
    2029               8 :    str.EndBloc() ;
    2030               8 :    str.Endl() ;
    2031                 : 
    2032                 :    // public <enum_holder>(<enum_name> initial)
    2033                 :    // {
    2034                 :    //    -- Implementation is ORB Specific --
    2035                 :    // }
    2036                 : 
    2037                 :    str.Tab() << "public " << enumHolderName << "("
    2038               8 :       << enumName << " initial)" << endl ;
    2039               8 :    str.BeginBloc() ;
    2040               8 :    str.Tab() << "// FIXME" << endl ;
    2041               8 :    str.Tab() << "throw new org.omg.CORBA.NO_IMPLEMENT() ;" << endl ;
    2042               8 :    str.EndBloc() ;
    2043               8 :    str.Endl() ;
    2044                 : 
    2045                 :    // public void _read(
    2046                 :    //    org.omg.CORBA.portable.InputStream is)
    2047                 :    // {
    2048                 :    //    -- Implementation is ORB Specific --
    2049                 :    // }
    2050                 : 
    2051               8 :    str.Tab() << "public void _read(" << endl ;
    2052               8 :    str.IncTab() ;
    2053               8 :    str.Tab() << "org.omg.CORBA.portable.InputStream is)" << endl ;
    2054               8 :    str.DecTab() ;
    2055               8 :    str.BeginBloc() ;
    2056               8 :    str.Tab() << "// FIXME" << endl ;
    2057               8 :    str.Tab() << "throw new org.omg.CORBA.NO_IMPLEMENT() ;" << endl ;
    2058               8 :    str.EndBloc() ;
    2059               8 :    str.Endl() ;
    2060                 : 
    2061                 :    // public void _write(
    2062                 :    //    org.omg.CORBA.portable.OutputStream os)
    2063                 :    // {
    2064                 :    //    -- Implementation is ORB Specific --
    2065                 :    // }
    2066                 : 
    2067               8 :    str.Tab() << "public void _write(" << endl ;
    2068               8 :    str.IncTab() ;
    2069               8 :    str.Tab() << "org.omg.CORBA.portable.OutputStream os)" << endl ;
    2070               8 :    str.DecTab() ;
    2071               8 :    str.BeginBloc() ;
    2072               8 :    str.Tab() << "// FIXME" << endl ;
    2073               8 :    str.Tab() << "throw new org.omg.CORBA.NO_IMPLEMENT() ;" << endl ;
    2074               8 :    str.EndBloc() ;
    2075               8 :    str.Endl() ;
    2076                 : 
    2077                 :    // public org.omg.CORBA.TypeCode _type()
    2078                 :    // {
    2079                 :    //    -- Implementation is ORB Specific --
    2080                 :    // }
    2081                 : 
    2082               8 :    str.Tab() << "public org.omg.CORBA.TypeCode _type()" << endl ;
    2083               8 :    str.BeginBloc() ;
    2084               8 :    str.Tab() << "// FIXME" << endl ;
    2085               8 :    str.Tab() << "throw new org.omg.CORBA.NO_IMPLEMENT() ;" << endl ;
    2086               8 :    str.EndBloc() ;
    2087                 : 
    2088               8 :    str.EndBloc() ;
    2089               8 :    str.close() ;
    2090                 : }
    2091                 : 
    2092                 : void LangJava::PrintType(
    2093                 :    CodePrinter & str,
    2094                 :    IDLType *type,
    2095              22 :    javaPrintMode mode)
    2096                 : {
    2097              22 :    switch (type->isA())
    2098                 :    {
    2099                 :       case idl_errorType :
    2100                 :       {
    2101               0 :          str.Endl() ;
    2102               0 :          str.Str() << "#error IDL->Java generation failed due to previous errors." ;
    2103               0 :          str.Endl() ;
    2104                 :          break ;
    2105                 :       }
    2106                 :       case idl_intType :
    2107                 :       {
    2108                 :          IDLIntType *t = (IDLIntType*) type ;
    2109               7 :          PrintIntType(str, t, mode) ;
    2110                 :          break ;
    2111                 :       }
    2112                 :       case idl_floatType :
    2113                 :       {
    2114                 :          IDLFloatType *t = (IDLFloatType*) type ;
    2115               0 :          PrintFloatType(str, t, mode) ;
    2116                 :          break ;
    2117                 :       }
    2118                 :       case idl_charType :
    2119                 :       {
    2120               0 :          PrintCharType(str, mode) ;
    2121                 :          break ;
    2122                 :       }
    2123                 :       case idl_wcharType :
    2124                 :       {
    2125               0 :          PrintWCharType(str, mode) ;
    2126                 :          break ;
    2127                 :       }
    2128                 :       case idl_boolType :
    2129                 :       {
    2130               0 :          PrintBoolType(str, mode) ;
    2131                 :          break ;
    2132                 :       }
    2133                 :       case idl_struct :
    2134                 :       {
    2135                 :          IDLStructType *t = (IDLStructType*) type ;
    2136               0 :          PrintStructType(str, t, mode) ;
    2137                 :          break ;
    2138                 :       }
    2139                 :       case idl_enum :
    2140                 :       {
    2141                 :          IDLEnumType *t = (IDLEnumType*) type ;
    2142               2 :          PrintEnumType(str, t, mode) ;
    2143                 :          break ;
    2144                 :       }
    2145                 :       case idl_typedef :
    2146                 :       {
    2147                 :          IDLTypedefType *t = (IDLTypedefType*) type ;
    2148               6 :          PrintTypedefType(str, t, mode) ;
    2149                 :          break ;
    2150                 :       }
    2151                 :       case idl_array :
    2152                 :       {
    2153               0 :          str.Str() << "FIXME idl_array" ;
    2154                 :          break ;
    2155                 :       }
    2156                 :       case idl_sequence :
    2157                 :       {
    2158                 :          IDLSequenceType *t = (IDLSequenceType*) type ;
    2159               0 :          PrintSequenceType(str, t, mode) ;
    2160                 :          break ;
    2161                 :       }
    2162                 :       case idl_string :
    2163                 :       {
    2164               4 :          PrintStringType(str, mode) ;
    2165                 :          break ;
    2166                 :       }
    2167                 :       case idl_wstring :
    2168                 :       {
    2169               0 :          PrintWStringType(str, mode) ;
    2170                 :          break ;
    2171                 :       }
    2172                 :       case idl_any :
    2173                 :       {
    2174               0 :          PrintAnyType(str, mode) ;
    2175                 :          break ;
    2176                 :       }
    2177                 :       case idl_object :
    2178                 :       {
    2179               3 :          PrintObjectType(str, mode) ;
    2180                 :          break ;
    2181                 :       }
    2182                 :       case idl_octet :
    2183                 :       {
    2184               0 :          PrintOctetType(str, mode) ;
    2185                 :          break ;
    2186                 :       }
    2187                 :       case idl_interface :
    2188                 :       {
    2189                 :          IDLInterfaceType *i = (IDLInterfaceType*) type ;
    2190               0 :          PrintInterfaceType(str, i, mode) ;
    2191                 :          break ;
    2192                 :       }
    2193                 :       case idl_void :
    2194                 :       {
    2195                 :          ASSERT(mode == JAVA_PRINT_RETURN) ;
    2196               0 :          str.Str() << "void" ;
    2197                 :          break ;
    2198                 :       }
    2199                 :       case idl_native :
    2200                 :       {
    2201                 :          IDLNativeType *t = (IDLNativeType*) type ;
    2202               0 :          PrintNativeType(str, t, mode) ;
    2203                 :          break ;
    2204                 :       }
    2205                 :    }
    2206                 : }
    2207                 : 
    2208                 : void LangJava::PrintCDR(
    2209                 :    const String& dataName,
    2210                 :    IDLType *type,
    2211                 :    const String& cdrName,
    2212                 :    bool isConst,
    2213                 :    bool isPointer,
    2214               0 :    ostream& str)
    2215                 : {
    2216               0 :    switch (type->isA())
    2217                 :    {
    2218                 :       case idl_errorType :
    2219                 :       {
    2220                 :          str << endl ;
    2221               0 :          str << "#error IDL->C++ generation failed due to previous errors." ;
    2222                 :          str << endl ;
    2223                 :          break ;
    2224                 :       }
    2225                 :       case idl_intType :
    2226                 :       {
    2227                 :          IDLIntType *t = (IDLIntType*) type ;
    2228                 :          PrintCDRInt(
    2229                 :             dataName,
    2230                 :             t,
    2231                 :             cdrName,
    2232                 :             isConst,
    2233                 :             isPointer,
    2234               0 :             str) ;
    2235                 :          break ;
    2236                 :       }
    2237                 :       case idl_floatType :
    2238                 :       {
    2239               0 :          str << "FIXME idl_floatType" ;
    2240                 :          break ;
    2241                 :       }
    2242                 :       case idl_charType :
    2243                 :       {
    2244                 :          PrintCDRChar(
    2245                 :             dataName,
    2246                 :             cdrName,
    2247                 :             isConst,
    2248                 :             isPointer,
    2249               0 :             str) ;
    2250                 :          break ;
    2251                 :       }
    2252                 :       case idl_wcharType :
    2253                 :       {
    2254                 :          PrintCDRWChar(
    2255                 :             dataName,
    2256                 :             cdrName,
    2257                 :             isConst,
    2258                 :             isPointer,
    2259               0 :             str) ;
    2260                 :          break ;
    2261                 :       }
    2262                 :       case idl_boolType :
    2263                 :       {
    2264                 :          PrintCDRBool(
    2265                 :             dataName,
    2266                 :             cdrName,
    2267                 :             isConst,
    2268                 :             isPointer,
    2269               0 :             str) ;
    2270                 :          break ;
    2271                 :       }
    2272                 :       case idl_struct :
    2273                 :       {
    2274                 :          IDLStructType *t = (IDLStructType*) type ;
    2275                 :          PrintCDRStruct(
    2276                 :             dataName,
    2277                 :             t,
    2278                 :             cdrName,
    2279                 :             isConst,
    2280                 :             isPointer,
    2281               0 :             str) ;
    2282                 :          break ;
    2283                 :       }
    2284                 :       case idl_enum :
    2285                 :       {
    2286                 :          IDLEnumType *t = (IDLEnumType*) type ;
    2287                 :          PrintCDREnum(
    2288                 :             dataName,
    2289                 :             t,
    2290                 :             cdrName,
    2291                 :             isConst,
    2292                 :             isPointer,
    2293               0 :             str) ;
    2294                 :          break ;
    2295                 :       }
    2296                 :       case idl_typedef :
    2297                 :       {
    2298                 :          IDLTypedefType *t = (IDLTypedefType*) type ;
    2299                 :          PrintCDRTypedef(
    2300                 :             dataName,
    2301                 :             t,
    2302                 :             cdrName,
    2303                 :             isConst,
    2304                 :             isPointer,
    2305               0 :             str) ;
    2306                 :          break ;
    2307                 :       }
    2308                 :       case idl_array :
    2309                 :       {
    2310               0 :          str << "FIXME idl_array" ;
    2311                 :          break ;
    2312                 :       }
    2313                 :       case idl_sequence :
    2314                 :       {
    2315                 :          IDLSequenceType *t = (IDLSequenceType*) type ;
    2316                 :          PrintCDRSequence(
    2317                 :             dataName,
    2318                 :             t,
    2319                 :             cdrName,
    2320                 :             isConst,
    2321                 :             isPointer,
    2322               0 :             str) ;
    2323                 :          break ;
    2324                 :       }
    2325                 :       case idl_string :
    2326                 :       {
    2327                 :          PrintCDRString(
    2328                 :             dataName,
    2329                 :             cdrName,
    2330                 :             isConst,
    2331                 :             isPointer,
    2332               0 :             str) ;
    2333                 :          break ;
    2334                 :       }
    2335                 :       case idl_wstring :
    2336                 :       {
    2337                 :          PrintCDRWString(
    2338                 :             dataName,
    2339                 :             cdrName,
    2340                 :             isConst,
    2341                 :             isPointer,
    2342               0 :             str) ;
    2343                 :          break ;
    2344                 :       }
    2345                 :       case idl_any :
    2346                 :       {
    2347                 :          PrintCDRAny(
    2348                 :             dataName,
    2349                 :             cdrName,
    2350                 :             isConst,
    2351                 :             isPointer,
    2352               0 :             str) ;
    2353                 :          break ;
    2354                 :       }
    2355                 :       case idl_octet :
    2356                 :       {
    2357                 :          PrintCDROctet(
    2358                 :             dataName,
    2359                 :             cdrName,
    2360                 :             isConst,
    2361                 :             isPointer,
    2362               0 :             str) ;
    2363                 :          break ;
    2364                 :       }
    2365                 :       case idl_interface :
    2366                 :       {
    2367                 :          IDLInterfaceType *t = (IDLInterfaceType*) type ;
    2368                 :          PrintCDRInterface(
    2369                 :             dataName,
    2370                 :             t,
    2371                 :             cdrName,
    2372                 :             isConst,
    2373                 :             isPointer,
    2374               0 :             str) ;
    2375                 :          break ;
    2376                 :       }
    2377                 :       case idl_object :
    2378                 :       {
    2379                 :          PrintCDRObject(
    2380                 :             dataName,
    2381                 :             cdrName,
    2382                 :             isConst,
    2383                 :             isPointer,
    2384               0 :             str) ;
    2385                 :          break ;
    2386                 :       }
    2387                 :       case idl_void :
    2388                 :       {
    2389               0 :          str << "FIXME idl_void" ;
    2390                 :          break ;
    2391                 :       }
    2392                 :       case idl_native :
    2393                 :       {
    2394               0 :          str << "FIXME idl_native" ;
    2395                 :          break ;
    2396                 :       }
    2397                 :    }
    2398                 : }
    2399                 : 
    2400                 : void LangJava::PrintCDRInt(
    2401                 :    const String& dataName,
    2402                 :    IDLIntType *type,
    2403                 :    const String& cdrName,
    2404                 :    bool isConst,
    2405                 :    bool isPointer,
    2406               0 :    ostream& str)
    2407                 : {
    2408               0 :    str << cdrName << "->" ;
    2409                 : 
    2410               0 :    switch(type->GetType())
    2411                 :    {
    2412                 :       case idl_signed_short :
    2413                 :       {
    2414               0 :          str << "cdr_Short" ;
    2415               0 :          break ;
    2416                 :       }
    2417                 :       case idl_signed_long :
    2418                 :       {
    2419               0 :          str << "cdr_Long" ;
    2420               0 :          break ;
    2421                 :       }
    2422                 :       case idl_signed_long_long :
    2423                 :       {
    2424               0 :          str << "cdr_LongLong" ;
    2425               0 :          break ;
    2426                 :       }
    2427                 :       case idl_unsigned_short :
    2428                 :       {
    2429               0 :          str << "cdr_UShort" ;
    2430               0 :          break ;
    2431                 :       }
    2432                 :       case idl_unsigned_long :
    2433                 :       {
    2434               0 :          str << "cdr_ULong" ;
    2435               0 :          break ;
    2436                 :       }
    2437                 :       case idl_unsigned_long_long :
    2438                 :       {
    2439               0 :          str << "cdr_ULongLong" ;
    2440                 :          break ;
    2441                 :       }
    2442                 :    }
    2443                 : 
    2444                 :    ASSERT(isConst == false) ;
    2445                 :    ASSERT(isPointer == false) ;
    2446               0 :    str << "(& " << dataName << ") ;" << endl ;
    2447                 : }
    2448                 : 
    2449                 : void LangJava::PrintCDRBool(
    2450                 :    const String& dataName,
    2451                 :    const String& cdrName,
    2452                 :    bool isConst,
    2453                 :    bool isPointer,
    2454               0 :    ostream& str)
    2455                 : {
    2456               0 :    str << cdrName << "->cdr_Boolean(" ;
    2457                 : 
    2458               0 :    if (isConst)
    2459                 :    {
    2460               0 :       str << "(CORBA::Boolean*)" ;
    2461                 :    }
    2462                 : 
    2463               0 :    if ( ! isPointer)
    2464                 :    {
    2465               0 :       str << " & " ;
    2466                 :    }
    2467                 : 
    2468               0 :    str << dataName << ") ;" << endl ;
    2469                 : }
    2470                 : 
    2471                 : void LangJava::PrintCDRChar(
    2472                 :    const String& dataName,
    2473                 :    const String& cdrName,
    2474                 :    bool isConst,
    2475                 :    bool isPointer,
    2476               0 :    ostream& str)
    2477                 : {
    2478               0 :    str << cdrName << "->cdr_Char(" ;
    2479                 : 
    2480               0 :    if (isConst)
    2481                 :    {
    2482               0 :       str << "(CORBA::Char*)" ;
    2483                 :    }
    2484                 : 
    2485               0 :    if ( ! isPointer)
    2486                 :    {
    2487               0 :       str << " & " ;
    2488                 :    }
    2489                 : 
    2490               0 :    str << dataName << ") ;" << endl ;
    2491                 : }
    2492                 : 
    2493                 : void LangJava::PrintCDRWChar(
    2494                 :    const String& dataName,
    2495                 :    const String& cdrName,
    2496                 :    bool isConst,
    2497                 :    bool isPointer,
    2498               0 :    ostream& str)
    2499                 : {
    2500               0 :    str << cdrName << "->cdr_WChar(" ;
    2501                 : 
    2502               0 :    if (isConst)
    2503                 :    {
    2504               0 :       str << "(CORBA::WChar*)" ;
    2505                 :    }
    2506                 : 
    2507               0 :    if ( ! isPointer)
    2508                 :    {
    2509               0 :       str << " & " ;
    2510                 :    }
    2511                 : 
    2512               0 :    str << dataName << ") ;" << endl ;
    2513                 : }
    2514                 : 
    2515                 : void LangJava::PrintCDRStruct(
    2516                 :    const String& dataName,
    2517                 :    IDLStructType *type,
    2518                 :    const String& cdrName,
    2519                 :    bool isConst,
    2520                 :    bool isPointer,
    2521               0 :    ostream& str)
    2522                 : {
    2523               0 :    Struct *s = type->GetSymbol() ;
    2524               0 :    JavaInfo *info = GetJavaInfo(s) ;
    2525                 : 
    2526               0 :    if (isConst == true)
    2527                 :    {
    2528               0 :       str << "((" << info->_javaFullName ;
    2529                 : 
    2530               0 :       if (isPointer == true)
    2531                 :       {
    2532               0 :          str << "*" ;
    2533                 :       }
    2534                 : 
    2535               0 :       str << ")" << dataName << ")" ;
    2536                 :    }
    2537                 :    else
    2538                 :    {
    2539               0 :       str << dataName ;
    2540                 :    }
    2541                 : 
    2542                 : 
    2543               0 :    if (isPointer == true)
    2544                 :    {
    2545               0 :       str << "->cdr(" << cdrName << ") ;" << endl ;
    2546                 :    }
    2547                 :    else
    2548                 :    {
    2549               0 :       str << ".cdr(" << cdrName << ") ;" << endl ;
    2550                 :    }
    2551                 : 
    2552                 :    return ;
    2553                 : }
    2554                 : 
    2555                 : void LangJava::PrintCDREnum(
    2556                 :    const String& dataName,
    2557                 :    IDLEnumType *type,
    2558                 :    const String& cdrName,
    2559                 :    bool isConst,
    2560                 :    bool isPointer,
    2561               0 :    ostream& str)
    2562                 : {
    2563               0 :    Enum *e = type->GetSymbol() ;
    2564               0 :    JavaInfo *info = GetJavaInfo(e) ;
    2565               0 :    const String& prefix = Prefix(info->_javaFullName) ;
    2566                 : 
    2567               0 :    str << prefix << "::CDR_" << info->_javaName ;
    2568               0 :    str << "(" << cdrName << ", & " << dataName << ") ;" << endl ;
    2569                 : 
    2570               0 :    return ;
    2571                 : }
    2572                 : 
    2573                 : void LangJava::PrintCDRTypedef(
    2574                 :    const String& dataName,
    2575                 :    IDLTypedefType *type,
    2576                 :    const String& cdrName,
    2577                 :    bool isConst,
    2578                 :    bool isPointer,
    2579               0 :    ostream& str)
    2580                 : {
    2581               0 :    Typedef *symbol = type->GetSymbol() ;
    2582               0 :    IDLType* t = symbol->GetType() ;
    2583                 : 
    2584               0 :    PrintCDR(dataName, t, cdrName, isConst, isPointer, str) ;
    2585                 : }
    2586                 : 
    2587                 : void LangJava::PrintCDRSequence(
    2588                 :    const String& dataName,
    2589                 :    IDLSequenceType *type,
    2590                 :    const String& cdrName,
    2591                 :    bool isConst,
    2592                 :    bool isPointer,
    2593               0 :    ostream& str)
    2594                 : {
    2595                 :    char *call ;
    2596                 : 
    2597               0 :    if (isPointer)
    2598                 :    {
    2599                 :       call = "->" ;
    2600                 :    }
    2601                 :    else
    2602                 :    {
    2603                 :       call = "." ;
    2604                 :    }
    2605                 : 
    2606               0 :    str << dataName << call << "cdr(" << cdrName << ") ;" << endl ;
    2607                 : }
    2608                 : 
    2609                 : void LangJava::PrintCDRString(
    2610                 :    const String& dataName,
    2611                 :    const String& cdrName,
    2612                 :    bool isConst,
    2613                 :    bool isPointer,
    2614               0 :    ostream& str)
    2615                 : {
    2616                 :    char *call ;
    2617                 : 
    2618               0 :    if (isPointer)
    2619                 :    {
    2620                 :       call = "->" ;
    2621                 :    }
    2622                 :    else
    2623                 :    {
    2624                 :       call = "." ;
    2625                 :    }
    2626                 : 
    2627               0 :    str << dataName << call << "cdr(" << cdrName << ") ;" << endl ;
    2628                 : }
    2629                 : 
    2630                 : void LangJava::PrintCDRWString(
    2631                 :    const String& dataName,
    2632                 :    const String& cdrName,
    2633                 :    bool isConst,
    2634                 :    bool isPointer,
    2635               0 :    ostream& str)
    2636                 : {
    2637                 :    char *call ;
    2638                 : 
    2639               0 :    if (isPointer)
    2640                 :    {
    2641                 :       call = "->" ;
    2642                 :    }
    2643                 :    else
    2644                 :    {
    2645                 :       call = "." ;
    2646                 :    }
    2647                 : 
    2648               0 :    str << dataName << call << "cdr(" << cdrName << ") ;" << endl ;
    2649                 : }
    2650                 : 
    2651                 : void LangJava::PrintCDRAny(
    2652                 :    const String& dataName,
    2653                 :    const String& cdrName,
    2654                 :    bool isConst,
    2655                 :    bool isPointer,
    2656               0 :    ostream& str)
    2657                 : {
    2658               0 :    str << "// FIXME CDR" << endl ;
    2659                 : }
    2660                 : 
    2661                 : void LangJava::PrintCDROctet(
    2662                 :    const String& dataName,
    2663                 :    const String& cdrName,
    2664                 :    bool isConst,
    2665                 :    bool isPointer,
    2666               0 :    ostream& str)
    2667                 : {
    2668               0 :    str << cdrName << "->cdr_Octet(" ;
    2669                 : 
    2670               0 :    if (isConst)
    2671                 :    {
    2672               0 :       str << "(CORBA::Octet*) " ;
    2673                 :    }
    2674                 : 
    2675               0 :    if ( ! isPointer)
    2676                 :    {
    2677               0 :       str << "& " ;
    2678                 :    }
    2679                 : 
    2680               0 :    str << dataName << ") ;" << endl ;
    2681                 : }
    2682                 : 
    2683                 : void LangJava::PrintCDRInterface(
    2684                 :    const String& dataName,
    2685                 :    IDLInterfaceType *type,
    2686                 :    const String& cdrName,
    2687                 :    bool isConst,
    2688                 :    bool isPointer,
    2689               0 :    ostream& str)
    2690                 : {
    2691               0 :    str << "NON_DEV(\"LangJava::PrintCDRInterface\") ;" << endl ;
    2692                 : 
    2693               0 :    Interface *i = type->GetSymbol() ;
    2694               0 :    JavaInfo *info = GetJavaInfo(i) ;
    2695                 : 
    2696               0 :    str << dataName << " = " << info->_javaFullName << "::_nil() ;" << endl ;
    2697                 : 
    2698                 : #ifdef LATER
    2699                 : // Brain damaged : get rid of "encode"
    2700                 :    if (encode)
    2701                 :    {
    2702                 :       str << dataName << "->cdr(" << cdrName << ") ;"
    2703                 :         << endl ;
    2704                 :    }
    2705                 :    else
    2706                 :    {
    2707                 :       Interface *i = type->GetSymbol() ;
    2708                 :       JavaInfo *info = GetJavaInfo(i) ;
    2709                 : 
    2710                 :       str << dataName << " = " << info->_javaFullName ;
    2711                 :       str << "::_bind(" << cdrName << ") ;" << endl ;
    2712                 :    }
    2713                 : #endif
    2714                 : }
    2715                 : 
    2716                 : void LangJava::PrintCDRObject(
    2717                 :    const String& dataName,
    2718                 :    const String& cdrName,
    2719                 :    bool isConst,
    2720                 :    bool isPointer,
    2721               0 :    ostream& str)
    2722                 : {
    2723               0 :    str << "NON_DEV(\"LangJava::PrintCDRObject\") ;" << endl ;
    2724                 : 
    2725               0 :    if (isConst == false)
    2726                 :    {
    2727               0 :       str << dataName << " = CORBA::Object::_nil() ;" << endl ;
    2728                 :    }
    2729                 : 
    2730                 : #ifdef LATER
    2731                 : // Brain damaged :
    2732                 :    if (encode)
    2733                 :    {
    2734                 :       str << dataName << "->cdr(" << cdrName << ") ;" << endl ;
    2735                 :    }
    2736                 :    else
    2737                 :    {
    2738                 :       str << dataName << " = CORBA::Object::_bind(" << cdrName << ") ;" << endl ;
    2739                 :    }
    2740                 : #endif
    2741                 : }
    2742                 : 
    2743                 : void LangJava::PrintNativeType(
    2744                 :    CodePrinter & str,
    2745                 :    IDLNativeType *type,
    2746               0 :    javaPrintMode mode)
    2747                 : {
    2748               0 :    SymNative *symbol = type->GetSymbol() ;
    2749               0 :    const String& name = symbol->GetFullyQualifiedName() ;
    2750                 : 
    2751               0 :    if (name == "PortableServer::ServantLocator::Cookie")
    2752                 :    {
    2753               0 :       switch(mode)
    2754                 :       {
    2755                 :          case JAVA_PRINT_NORMAL :
    2756                 :          case JAVA_PRINT_IN :
    2757                 :          case JAVA_PRINT_RETURN :
    2758                 :          {
    2759               0 :             str.Str() << "void*" ;
    2760                 :             break ;
    2761                 :          }
    2762                 :          case JAVA_PRINT_OUT :
    2763                 :          case JAVA_PRINT_INOUT :
    2764                 :          {
    2765               0 :             str.Str() << "void*&" ;
    2766                 :             break ;
    2767                 :          }
    2768                 :          case JAVA_PRINT_PTR :
    2769                 :          case JAVA_PRINT_VAR :
    2770                 :          {
    2771               0 :             str.Str() << endl ;
    2772               0 :             str.Str() << "#error Unsupported native Cookie usage." << endl ;
    2773                 :             break ;
    2774                 :          }
    2775                 :       }
    2776                 :       return ;
    2777                 :    }
    2778                 : 
    2779                 :    // Default Native mapping, also used for "PortableServer::Servant"
    2780                 : 
    2781               0 :    switch(mode)
    2782                 :    {
    2783                 :       case JAVA_PRINT_NORMAL :
    2784                 :       case JAVA_PRINT_RETURN :
    2785                 :       {
    2786               0 :          str.Str() << name;
    2787                 :          break ;
    2788                 :       }
    2789                 :       case JAVA_PRINT_IN :
    2790                 :       {
    2791               0 :          str.Str() << "const " << name << "&" ;
    2792                 :          break ;
    2793                 :       }
    2794                 :       case JAVA_PRINT_OUT :
    2795                 :       {
    2796               0 :          str.Str() << name << "&" ;
    2797                 :          break ;
    2798                 :       }
    2799                 :       case JAVA_PRINT_INOUT :
    2800                 :       {
    2801               0 :          str.Str() << name << "*&" ;
    2802                 :          break ;
    2803                 :       }
    2804                 :       case JAVA_PRINT_PTR :
    2805                 :       {
    2806               0 :          str.Str() << name << "_ptr" ;
    2807                 :          break ;
    2808                 :       }
    2809                 :       case JAVA_PRINT_VAR :
    2810                 :       {
    2811               0 :          str.Str() << name << "_var" ;
    2812                 :          break ;
    2813                 :       }
    2814                 :    }
    2815                 : }
    2816                 : 
    2817                 : void LangJava::PrintIntType(
    2818                 :    CodePrinter & str,
    2819                 :    IDLIntType *type,
    2820               7 :    javaPrintMode mode)
    2821                 : {
    2822                 :    const char* name = NULL ;
    2823                 :    const char* holderName = NULL ;
    2824                 : 
    2825               7 :    switch(type->GetType())
    2826                 :    {
    2827                 :       case idl_signed_short :
    2828                 :       case idl_unsigned_short :
    2829                 :       {
    2830                 :          name = "short" ;
    2831                 :          holderName = "org.omg.CORBA.ShortHolder" ;
    2832               0 :          break ;
    2833                 :       }
    2834                 :       case idl_signed_long :
    2835                 :       case idl_unsigned_long :
    2836                 :       {
    2837                 :          name = "int" ;
    2838                 :          holderName = "org.omg.CORBA.IntHolder" ;
    2839                 :          break ;
    2840                 :       }
    2841                 :       case idl_signed_long_long :
    2842                 :       case idl_unsigned_long_long :
    2843                 :       {
    2844                 :          name = "long" ;
    2845                 :          holderName = "org.omg.CORBA.LongHolder" ;
    2846                 :          break ;
    2847                 :       }
    2848                 :    }
    2849                 : 
    2850               7 :    switch (mode)
    2851                 :    {
    2852                 :       case JAVA_PRINT_VAR:
    2853                 :       case JAVA_PRINT_NORMAL:
    2854                 :       case JAVA_PRINT_IN:
    2855                 :       case JAVA_PRINT_RETURN:
    2856                 :       {
    2857               7 :          str.Str() << name ;
    2858                 :          break ;
    2859                 :       }
    2860                 :       case JAVA_PRINT_OUT:
    2861                 :       case JAVA_PRINT_INOUT:
    2862                 :       {
    2863               0 :          str.Str() << holderName ;
    2864                 :          break ;
    2865                 :       }
    2866                 :       case JAVA_PRINT_PTR:
    2867                 :       {
    2868                 :          ASSERT(false) ;
    2869                 :       }
    2870                 :    }
    2871                 : }
    2872                 : 
    2873                 : void LangJava::PrintFloatType(
    2874                 :    CodePrinter & str,
    2875                 :    IDLFloatType *type,
    2876               0 :    javaPrintMode mode)
    2877                 : {
    2878                 :    const char* name = NULL ;
    2879                 :    const char* holderName = NULL ;
    2880                 : 
    2881               0 :    switch(type->GetType())
    2882                 :    {
    2883                 :       case idl_float :
    2884                 :       {
    2885                 :          name = "float" ;
    2886                 :          holderName = "org.omg.CORBA.FloatHolder" ;
    2887               0 :          break ;
    2888                 :       }
    2889                 :       case idl_double :
    2890                 :       {
    2891                 :          name = "double" ;
    2892                 :          holderName = "org.omg.CORBA.DoubleHolder" ;
    2893                 :          break ;
    2894                 :       }
    2895                 :       case idl_long_double :
    2896                 :       {
    2897               0 :          str.Endl() ;
    2898               0 :          str.Str() << "#error IDL long double not supported in Java" << endl ;
    2899                 :          name = "double" ;
    2900                 :          holderName = "org.omg.CORBA.DoubleHolder" ;
    2901                 :          break ;
    2902                 :       }
    2903                 :    }
    2904                 : 
    2905               0 :    switch (mode)
    2906                 :    {
    2907                 :       case JAVA_PRINT_VAR:
    2908                 :       case JAVA_PRINT_NORMAL:
    2909                 :       case JAVA_PRINT_IN:
    2910                 :       case JAVA_PRINT_RETURN:
    2911                 :       {
    2912               0 :          str.Str() << name ;
    2913                 :          break ;
    2914                 :       }
    2915                 :       case JAVA_PRINT_OUT:
    2916                 :       case JAVA_PRINT_INOUT:
    2917                 :       {
    2918               0 :          str.Str() << holderName ;
    2919                 :          break ;
    2920                 :       }
    2921                 :       case JAVA_PRINT_PTR:
    2922                 :       {
    2923                 :          ASSERT(false) ;
    2924                 :       }
    2925                 :    }
    2926                 : }
    2927                 : 
    2928                 : void LangJava::PrintStringType(
    2929                 :    CodePrinter & str,
    2930               4 :    javaPrintMode mode)
    2931                 : {
    2932               4 :    switch (mode)
    2933                 :    {
    2934                 :       case JAVA_PRINT_NORMAL :
    2935                 :       case JAVA_PRINT_RETURN :
    2936                 :       case JAVA_PRINT_IN :
    2937                 :       {
    2938               4 :          str.Str() << "java.lang.String" ;
    2939                 :          break ;
    2940                 :       }
    2941                 :       case JAVA_PRINT_OUT :
    2942                 :       case JAVA_PRINT_INOUT :
    2943                 :       {
    2944               0 :          str.Str() << "org.omg.CORBA.StringHolder" ;
    2945                 :          break ;
    2946                 :       }
    2947                 :       case JAVA_PRINT_VAR :
    2948                 :       {
    2949               0 :          str.Str() << "CORBA::String_var" ;
    2950                 :          break ;
    2951                 :       }
    2952                 :       case JAVA_PRINT_PTR :
    2953                 :       {
    2954               0 :          str.Str() << "CORBA::String_ptr" ;
    2955                 :          break ;
    2956                 :       }
    2957                 :    }
    2958                 : }
    2959                 : 
    2960                 : void LangJava::PrintWStringType(
    2961                 :    CodePrinter & str,
    2962               0 :    javaPrintMode mode)
    2963                 : {
    2964               0 :    PrintStringType(str, mode) ;
    2965                 : }
    2966                 : 
    2967                 : void LangJava::PrintEnumType(
    2968                 :    CodePrinter & str,
    2969                 :    IDLEnumType* type,
    2970               2 :    javaPrintMode mode)
    2971                 : {
    2972               2 :    Enum* e = type->GetSymbol() ;
    2973               2 :    JavaInfo *info = GetJavaInfo(e) ;
    2974                 : 
    2975               2 :    str.Str() << info->_javaFullName ;
    2976                 : 
    2977               2 :    if (  (mode == JAVA_PRINT_OUT)
    2978                 :       || (mode == JAVA_PRINT_INOUT))
    2979                 :    {
    2980               0 :       str.Str() << "&" ;
    2981                 :    }
    2982                 : }
    2983                 : 
    2984                 : void LangJava::PrintTypedefType(
    2985                 :    CodePrinter & str,
    2986                 :    IDLTypedefType* type,
    2987               6 :    javaPrintMode mode)
    2988                 : {
    2989               6 :    Typedef *symbol = type->GetSymbol() ;
    2990               6 :    JavaInfo *info = GetJavaInfo(symbol) ;
    2991                 : 
    2992               6 :    IDLType* t = symbol->GetType() ;
    2993                 : 
    2994               6 :    if (t->isA() == idl_sequence)
    2995                 :    {
    2996                 :       // For IDL sequence, the typedef name is the C++ type.
    2997               2 :       switch (mode)
    2998                 :       {
    2999                 :          case JAVA_PRINT_NORMAL :
    3000                 :          {
    3001               2 :             str.Str() << info->_javaFullName ;
    3002                 :             break ;
    3003                 :          }
    3004                 :          case JAVA_PRINT_IN :
    3005                 :          {
    3006               0 :             str.Str() << "const " << info->_javaFullName << "&" ;
    3007                 :             break ;
    3008                 :          }
    3009                 :          case JAVA_PRINT_OUT :
    3010                 :          {
    3011               0 :             str.Str() << info->_javaFullName << "*&" ;
    3012                 :             break ;
    3013                 :          }
    3014                 :          case JAVA_PRINT_INOUT :
    3015                 :          {
    3016               0 :             str.Str() << info->_javaFullName << "&" ;
    3017                 :             break ;
    3018                 :          }
    3019                 :          case JAVA_PRINT_RETURN :
    3020                 :          {
    3021               0 :             str.Str() << info->_javaFullName << "*" ;
    3022                 :             break ;
    3023                 :          }
    3024                 :          case JAVA_PRINT_PTR :
    3025                 :          {
    3026               0 :             str.Str() << info->_javaFullName << "_ptr" ;
    3027                 :             break ;
    3028                 :          }
    3029                 :          case JAVA_PRINT_VAR :
    3030                 :          {
    3031               0 :             str.Str() << info->_javaFullName << "_var" ;
    3032                 :             break ;
    3033                 :          }
    3034                 :       }
    3035                 :    }
    3036                 :    else
    3037                 :    {
    3038                 :       // For other IDL types, the C++ type resolves to the aliased type.
    3039               4 :       PrintType(str, t, mode) ;
    3040                 :    }
    3041                 : }
    3042                 : 
    3043                 : void LangJava::PrintSequenceType(
    3044                 :    CodePrinter & str,
    3045                 :    IDLSequenceType* type,
    3046               0 :    javaPrintMode mode)
    3047                 : {
    3048               0 :    IDLType *elem = type->GetType() ;
    3049               0 :    bool bounded = type->IsBounded() ;
    3050                 : 
    3051                 :    const char* name = NULL ;
    3052                 :    const char* bname = NULL ;
    3053                 : 
    3054                 :    // Primitive types have dedicated sequences.
    3055                 : 
    3056               0 :    switch (elem->isA())
    3057                 :    {
    3058                 :       case idl_boolType:
    3059                 :       {
    3060                 :          name = "CORBABooleanSeq" ;
    3061                 :          bname = "CORBABooleanBSeq" ;
    3062               0 :          break ;
    3063                 :       }
    3064                 :       case idl_charType:
    3065                 :       {
    3066                 :          name = "CORBACharSeq" ;
    3067                 :          bname = "CORBACharBSeq" ;
    3068               0 :          break ;
    3069                 :       }
    3070                 :       case idl_wcharType:
    3071                 :       {
    3072                 :          name = "CORBAWCharSeq" ;
    3073                 :          bname = "CORBAWCharBSeq" ;
    3074               0 :          break ;
    3075                 :       }
    3076                 :       case idl_intType:
    3077                 :       {
    3078                 :          IDLIntType *elem2 = (IDLIntType*) elem ;
    3079                 : 
    3080               0 :          switch(elem2->GetType())
    3081                 :          {
    3082                 :             case idl_signed_short:
    3083                 :             {
    3084                 :                name = "CORBAShortSeq" ;
    3085                 :                bname = "CORBAShortBSeq" ;
    3086               0 :                break ;
    3087                 :             }
    3088                 :             case idl_signed_long:
    3089                 :             {
    3090                 :                name = "CORBALongSeq" ;
    3091                 :                bname = "CORBALongBSeq" ;
    3092               0 :                break ;
    3093                 :             }
    3094                 :             case idl_signed_long_long:
    3095                 :             {
    3096                 :                name = "CORBALongLongSeq" ;
    3097                 :                bname = "CORBALongLongBSeq" ;
    3098               0 :                break ;
    3099                 :             }
    3100                 :             case idl_unsigned_short:
    3101                 :             {
    3102                 :                name = "CORBAUShortSeq" ;
    3103                 :                bname = "CORBAUShortBSeq" ;
    3104               0 :                break ;
    3105                 :             }
    3106                 :             case idl_unsigned_long:
    3107                 :             {
    3108                 :                name = "CORBAULongSeq" ;
    3109                 :                bname = "CORBAULongBSeq" ;
    3110               0 :                break ;
    3111                 :             }
    3112                 :             case idl_unsigned_long_long:
    3113                 :             {
    3114                 :                name = "CORBAULongLongSeq" ;
    3115                 :                bname = "CORBAULongLongBSeq" ;
    3116                 :                break ;
    3117                 :             }
    3118                 :          }
    3119                 :          break ;
    3120                 :       }
    3121                 :       case idl_floatType:
    3122                 :       {
    3123                 :          IDLFloatType *elem2 = (IDLFloatType*) elem ;
    3124                 : 
    3125               0 :          switch(elem2->GetType())
    3126                 :          {
    3127                 :             case idl_float:
    3128                 :             {
    3129                 :                name = "CORBAFloatSeq" ;
    3130                 :                bname = "CORBAFloatBSeq" ;
    3131               0 :                break ;
    3132                 :             }
    3133                 :             case idl_double:
    3134                 :             {
    3135                 :                name = "CORBADoubleSeq" ;
    3136                 :                bname = "CORBADoubleBSeq" ;
    3137               0 :                break ;
    3138                 :             }
    3139                 :             case idl_long_double:
    3140                 :             {
    3141                 :                name = "CORBALongDoubleSeq" ;
    3142                 :                bname = "CORBALongDoubleBSeq" ;
    3143                 :                break ;
    3144                 :             }
    3145                 :          }
    3146                 :          break ;
    3147                 :       }
    3148                 :       case idl_octet:
    3149                 :       {
    3150                 :          name = "CORBAOctetSeq" ;
    3151                 :          bname = "CORBAOctetBSeq" ;
    3152                 :          break ;
    3153                 :       }
    3154                 :       default:
    3155                 :       {
    3156                 :          break ;
    3157                 :       }
    3158                 :    }
    3159                 : 
    3160               0 :    if (bounded)
    3161                 :    {
    3162               0 :       if (bname)
    3163                 :       {
    3164               0 :          NON_DEV("bounded sequences for raw types") ;
    3165                 :       }
    3166                 :       else
    3167                 :       {
    3168               0 :          str.Str() << "CORBABSequence<" ;
    3169               0 :          PrintType(str, elem, JAVA_PRINT_VAR) ;
    3170               0 :          str.Str() << ", " << type->GetMaxSize() << ">" ;
    3171                 :       }
    3172                 :    }
    3173                 :    else
    3174                 :    {
    3175               0 :       if (name != NULL)
    3176                 :       {
    3177               0 :          str.Str() << name ;
    3178                 :       }
    3179                 :       else
    3180                 :       {
    3181               0 :          str.Str() << "CORBASequence<" ;
    3182               0 :          PrintType(str, elem, JAVA_PRINT_VAR) ;
    3183               0 :          str.Str() << ">" ;
    3184                 :       }
    3185                 :    }
    3186                 : }
    3187                 : 
    3188                 : void LangJava::PrintAnyType(
    3189                 :    CodePrinter & str,
    3190               0 :    javaPrintMode mode)
    3191                 : {
    3192               0 :    switch(mode)
    3193                 :    {
    3194                 :       case JAVA_PRINT_NORMAL:
    3195                 :       {
    3196               0 :          str.Str() << "CORBA::Any" ;
    3197                 :          break ;
    3198                 :       }
    3199                 :       case JAVA_PRINT_IN:
    3200                 :       {
    3201               0 :          str.Str() << "const CORBA::Any&" ;
    3202                 :          break ;
    3203                 :       }
    3204                 :       case JAVA_PRINT_OUT:
    3205                 :       {
    3206               0 :          str.Str() << "CORBA::Any*&" ;
    3207                 :          break ;
    3208                 :       }
    3209                 :       case JAVA_PRINT_INOUT:
    3210                 :       {
    3211               0 :          str.Str() << "CORBA::Any&";
    3212                 :          break ;
    3213                 :       }
    3214                 :       case JAVA_PRINT_RETURN:
    3215                 :       {
    3216               0 :          str.Str() << "CORBA::Any*" ;
    3217                 :          break ;
    3218                 :       }
    3219                 :       case JAVA_PRINT_VAR:
    3220                 :       {
    3221               0 :          str.Str() << "CORBA::Any_var" ;
    3222                 :          break ;
    3223                 :       }
    3224                 :       case JAVA_PRINT_PTR:
    3225                 :       {
    3226               0 :          str.Str() << "CORBA::Any_ptr" ;
    3227                 :          break ;
    3228                 :       }
    3229                 :    }
    3230                 : }
    3231                 : 
    3232                 : void LangJava::PrintObjectType(
    3233                 :    CodePrinter & str,
    3234               3 :    javaPrintMode mode)
    3235                 : {
    3236               3 :    switch(mode)
    3237                 :    {
    3238                 :       case JAVA_PRINT_NORMAL:
    3239                 :       case JAVA_PRINT_IN:
    3240                 :       case JAVA_PRINT_RETURN:
    3241                 :       {
    3242               3 :          str.Str() << "org.omg.CORBA.Object" ;
    3243                 :          break ;
    3244                 :       }
    3245                 :       case JAVA_PRINT_OUT:
    3246                 :       case JAVA_PRINT_INOUT:
    3247                 :       {
    3248               0 :          str.Str() << "org.omg.CORBA.ObjectHolder" ;
    3249                 :          break ;
    3250                 :       }
    3251                 :       case JAVA_PRINT_VAR:
    3252                 :       {
    3253               0 :          str.Str() << "CORBA::Object_var" ;
    3254                 :          break ;
    3255                 :       }
    3256                 :       case JAVA_PRINT_PTR:
    3257                 :       {
    3258               0 :          str.Str() << "CORBA::Object_ptr" ;
    3259                 :          break ;
    3260                 :       }
    3261                 :    }
    3262                 : }
    3263                 : 
    3264                 : void LangJava::PrintOctetType(
    3265                 :    CodePrinter & str,
    3266               0 :    javaPrintMode mode)
    3267                 : {
    3268               0 :    if (   (mode == JAVA_PRINT_OUT)
    3269                 :        || (mode == JAVA_PRINT_INOUT))
    3270                 :    {
    3271               0 :       str.Str() << "org.omg.CORBA.ByteHolder" ;
    3272                 :    }
    3273                 :    else
    3274                 :    {
    3275               0 :       str.Str() << "byte" ;
    3276                 :    }
    3277                 : }
    3278                 : 
    3279                 : void LangJava::PrintBoolType(
    3280                 :    CodePrinter & str,
    3281               0 :    javaPrintMode mode)
    3282                 : {
    3283               0 :    if (   (mode == JAVA_PRINT_OUT)
    3284                 :        || (mode == JAVA_PRINT_INOUT))
    3285                 :    {
    3286               0 :       str.Str() << "org.omg.CORBA.BooleanHolder" ;
    3287                 :    }
    3288                 :    else
    3289                 :    {
    3290               0 :       str.Str() << "boolean" ;
    3291                 :    }
    3292                 : }
    3293                 : 
    3294                 : void LangJava::PrintCharType(
    3295                 :    CodePrinter & str,
    3296               0 :    javaPrintMode mode)
    3297                 : {
    3298               0 :    if (   (mode == JAVA_PRINT_OUT)
    3299                 :        || (mode == JAVA_PRINT_INOUT))
    3300                 :    {
    3301               0 :       str.Str() << "org.omg.CORBA.CharHolder" ;
    3302                 :    }
    3303                 :    else
    3304                 :    {
    3305               0 :       str.Str() << "char" ;
    3306                 :    }
    3307                 : }
    3308                 : 
    3309                 : void LangJava::PrintWCharType(
    3310                 :    CodePrinter & str,
    3311               0 :    javaPrintMode mode)
    3312                 : {
    3313               0 :    PrintCharType(str, mode) ;
    3314                 : }
    3315                 : 
    3316                 : void LangJava::PrintInterfaceType(
    3317                 :    CodePrinter & str,
    3318                 :    IDLInterfaceType* type,
    3319               0 :    javaPrintMode mode)
    3320                 : {
    3321               0 :    Symbol *symbol = type->GetSymbol() ;
    3322               0 :    JavaInfo *info = GetJavaInfo(symbol) ;
    3323                 : 
    3324               0 :    str.Str() << info->_javaFullName ;
    3325                 : 
    3326               0 :    switch(mode)
    3327                 :    {
    3328                 :       case JAVA_PRINT_NORMAL:
    3329                 :       case JAVA_PRINT_IN:
    3330                 :       case JAVA_PRINT_PTR:
    3331                 :       case JAVA_PRINT_RETURN:
    3332                 :       {
    3333               0 :          str.Str() << "_ptr" ;
    3334                 :          break ;
    3335                 :       }
    3336                 :       case JAVA_PRINT_OUT:
    3337                 :       case JAVA_PRINT_INOUT:
    3338                 :       {
    3339               0 :          str.Str() << "_ptr&" ;
    3340                 :          break ;
    3341                 :       }
    3342                 :       case JAVA_PRINT_VAR:
    3343                 :       {
    3344               0 :          str.Str() << "_var" ;
    3345                 :          break ;
    3346                 :       }
    3347                 :    }
    3348                 : }
    3349                 : 
    3350                 : void LangJava::PrintStructType(
    3351                 :    CodePrinter & str,
    3352                 :    IDLStructType *type,
    3353               0 :    javaPrintMode mode)
    3354                 : {
    3355               0 :    NON_DEV("PrintStructType") ;
    3356                 :    return ;
    3357                 : }
    3358                 : 
    3359                 : void LangJava::PrintValue(
    3360                 :    CodePrinter & str,
    3361               7 :    IDLValue *value)
    3362                 : {
    3363               7 :    switch(value->isA())
    3364                 :    {
    3365                 :       case idl_errorType:
    3366                 :       {
    3367               0 :          str.Str() << "FIXME idl_errorType" ;
    3368                 :          break ;
    3369                 :       }
    3370                 :       case idl_intType:
    3371                 :       {
    3372                 :          IDLIntValue *v = (IDLIntValue*) value ;
    3373               7 :          PrintIntValue(str, v) ;
    3374                 :          break ;
    3375                 :       }
    3376                 :       case idl_floatType:
    3377                 :       {
    3378               0 :          str.Str() << "FIXME idl_floatType" ;
    3379                 :          break ;
    3380                 :       }
    3381                 :       case idl_charType:
    3382                 :       {
    3383                 :          IDLCharValue *v = (IDLCharValue*) value ;
    3384               0 :          PrintCharValue(str, v) ;
    3385                 :          break ;
    3386                 :       }
    3387                 :       case idl_wcharType:
    3388                 :       {
    3389                 :          IDLWCharValue *v = (IDLWCharValue*) value ;
    3390               0 :          PrintWCharValue(str, v) ;
    3391                 :          break ;
    3392                 :       }
    3393                 :       case idl_boolType:
    3394                 :       {
    3395               0 :          str.Str() << "FIXME idl_boolType" ;
    3396                 :          break ;
    3397                 :       }
    3398                 :       case idl_struct:
    3399                 :       {
    3400               0 :          str.Str() << "FIXME idl_struct" ;
    3401                 :          break ;
    3402                 :       }
    3403                 :       case idl_enum:
    3404                 :       {
    3405               0 :          str.Str() << "FIXME idl_enum" ;
    3406                 :          break ;
    3407                 :       }
    3408                 :       case idl_typedef:
    3409                 :       {
    3410               0 :          str.Str() << "FIXME idl_typedef" ;
    3411                 :          break ;
    3412                 :       }
    3413                 :       case idl_array:
    3414                 :       {
    3415               0 :          str.Str() << "FIXME idl_array" ;
    3416                 :          break ;
    3417                 :       }
    3418                 :       case idl_sequence:
    3419                 :       {
    3420               0 :          str.Str() << "FIXME idl_sequence" ;
    3421                 :          break ;
    3422                 :       }
    3423                 :       case idl_string:
    3424                 :       {
    3425                 :          IDLStringValue *v = (IDLStringValue*) value ;
    3426               0 :          PrintStringValue(str, v) ;
    3427                 :          break ;
    3428                 :       }
    3429                 :       case idl_wstring:
    3430                 :       {
    3431                 :          IDLWStringValue *v = (IDLWStringValue*) value ;
    3432               0 :          PrintWStringValue(str, v) ;
    3433                 :          break ;
    3434                 :       }
    3435                 :       case idl_any:
    3436                 :       {
    3437               0 :          str.Str() << "FIXME idl_any" ;
    3438                 :          break ;
    3439                 :       }
    3440                 :       case idl_octet:
    3441                 :       {
    3442               0 :          str.Str() << "FIXME idl_octet" ;
    3443                 :          break ;
    3444                 :       }
    3445                 :       case idl_interface:
    3446                 :       {
    3447               0 :          str.Str() << "FIXME idl_interface" ;
    3448                 :          break ;
    3449                 :       }
    3450                 :       case idl_object:
    3451                 :       {
    3452               0 :          str.Str() << "FIXME idl_object" ;
    3453                 :          break ;
    3454                 :       }
    3455                 :       case idl_void:
    3456                 :       {
    3457               0 :          str.Str() << "FIXME idl_void" ;
    3458                 :          break ;
    3459                 :       }
    3460                 :       case idl_native:
    3461                 :       {
    3462               0 :          str.Str() << "FIXME idl_native" ;
    3463                 :          break ;
    3464                 :       }
    3465                 :    }
    3466                 : }
    3467                 : 
    3468                 : void LangJava::PrintCharValue(
    3469                 :    CodePrinter & str,
    3470               0 :    IDLCharValue *value)
    3471                 : {
    3472               0 :    char c = value->GetChar() ;
    3473                 : 
    3474               0 :    str.Str() << '\'' ;
    3475               0 :    PrintNiceChar(c, str) ;
    3476               0 :    str.Str() << '\'' ;
    3477                 : }
    3478                 : 
    3479                 : void LangJava::PrintWCharValue(
    3480                 :    CodePrinter & str,
    3481               0 :    IDLWCharValue *value)
    3482                 : {
    3483               0 :    wchar_t wc = value->GetWChar() ;
    3484                 :    char buf[10] ;
    3485               0 :    sprintf (buf, "L'\\x%x'", wc) ;
    3486               0 :    str.Str() << buf ;
    3487                 : }
    3488                 : 
    3489                 : void LangJava::PrintStringValue(
    3490                 :    CodePrinter & str,
    3491               0 :    IDLStringValue *value)
    3492                 : {
    3493               0 :    const String& str1 = value->GetString() ;
    3494               0 :    const char*   str2 = str1 ;
    3495                 : 
    3496               0 :    str.Str() << '\"' ;
    3497               0 :    while (*str2 != '\0')
    3498                 :    {
    3499               0 :       PrintNiceChar(*str2, str) ;
    3500                 :       str2 ++ ;
    3501                 :    }
    3502               0 :    str.Str() << '\"' ;
    3503                 : }
    3504                 : 
    3505                 : void LangJava::PrintWStringValue(
    3506                 :    CodePrinter & str,
    3507               0 :    IDLWStringValue *value)
    3508                 : {
    3509               0 :    str.Str() << "L\"" << value->GetWString() << "\"" ;
    3510                 : }
    3511                 : 
    3512                 : void LangJava::PrintIntValue(
    3513                 :    CodePrinter & str,
    3514               7 :    IDLIntValue *value)
    3515                 : {
    3516               7 :    switch(value->GetType())
    3517                 :    {
    3518                 :       case idl_signed_short:
    3519                 :       {
    3520               0 :          str.Str() << value->GetS16() ;
    3521                 :          break ;
    3522                 :       }
    3523                 :       case idl_signed_long:
    3524                 :       {
    3525               0 :          str.Str() << "(int) (" << value->GetS32() << "L)" ;
    3526                 :          break ;
    3527                 :       }
    3528                 :       case idl_signed_long_long:
    3529                 :       {
    3530               0 :          str.Str() << value->GetS64() << "L" ;
    3531                 :          break ;
    3532                 :       }
    3533                 :       case idl_unsigned_short:
    3534                 :       {
    3535               0 :          str.Str() << "(short) (" << value->GetU16() << ")" ;
    3536                 :          break ;
    3537                 :       }
    3538                 :       case idl_unsigned_long:
    3539                 :       {
    3540              14 :          str.Str() << "(int) (" << value->GetU32() << "L)" ;
    3541                 :          break ;
    3542                 :       }
    3543                 :       case idl_unsigned_long_long:
    3544                 :       {
    3545               0 :          str.Str() << "(long) (" << value->GetU64() << "L)" ;
    3546                 :          break ;
    3547                 :       }
    3548                 :    }
    3549                 : }
    3550                 : 
    3551               0 : bool LangJava::IsTypeFixedLength(IDLType* type)
    3552                 : {
    3553               0 :    NON_DEV("IsTypeFixedLength") ;
    3554                 :    return true ;
    3555                 : }
    3556                 : 
    3557               1 : void LangJava::BuildNativeInfo(SymNative *native)
    3558                 : {
    3559               1 :    NON_DEV("BuildNativeInfo") ;
    3560                 :    return ;
    3561                 : }
    3562                 : 
    3563               1 : void LangJava::GenerateNative(SymNative *native)
    3564                 : {
    3565               1 :    NON_DEV("GenerateNative") ;
    3566                 :    return ;
    3567              33 : }
    3568              33 : 

Generated by: LTP GCOV extension version 1.4