src/share/classes/com/sun/tools/corba/se/idl/toJavaPortable/Skeleton.java

Sun, 05 Dec 2010 22:22:54 -0800

author
skoppar
date
Sun, 05 Dec 2010 22:22:54 -0800
changeset 236
33ca1bceec2d
parent 158
91006f157c46
child 748
6845b95cba6b
permissions
-rw-r--r--

7004713: regression: cannot find symbol: variable delegate failed compile _Stub
Summary: Also reviewed by ken.cavanaugh@oracle.com
Reviewed-by: asaha

duke@1 1 /*
ohair@158 2 * Copyright (c) 1999, 2001, Oracle and/or its affiliates. All rights reserved.
duke@1 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
duke@1 4 *
duke@1 5 * This code is free software; you can redistribute it and/or modify it
duke@1 6 * under the terms of the GNU General Public License version 2 only, as
ohair@158 7 * published by the Free Software Foundation. Oracle designates this
duke@1 8 * particular file as subject to the "Classpath" exception as provided
ohair@158 9 * by Oracle in the LICENSE file that accompanied this code.
duke@1 10 *
duke@1 11 * This code is distributed in the hope that it will be useful, but WITHOUT
duke@1 12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
duke@1 13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
duke@1 14 * version 2 for more details (a copy is included in the LICENSE file that
duke@1 15 * accompanied this code).
duke@1 16 *
duke@1 17 * You should have received a copy of the GNU General Public License version
duke@1 18 * 2 along with this work; if not, write to the Free Software Foundation,
duke@1 19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
duke@1 20 *
ohair@158 21 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
ohair@158 22 * or visit www.oracle.com if you need additional information or have any
ohair@158 23 * questions.
duke@1 24 */
duke@1 25 /*
duke@1 26 * COMPONENT_NAME: idl.toJava
duke@1 27 *
duke@1 28 * ORIGINS: 27
duke@1 29 *
duke@1 30 * Licensed Materials - Property of IBM
duke@1 31 * 5639-D57 (C) COPYRIGHT International Business Machines Corp. 1997, 1999
duke@1 32 * RMI-IIOP v1.0
duke@1 33 *
duke@1 34 */
duke@1 35
duke@1 36 package com.sun.tools.corba.se.idl.toJavaPortable;
duke@1 37
duke@1 38 // NOTES:
duke@1 39 // -F46082.51<daz> Remove -stateful feature; javaStatefulName() obsolete.
duke@1 40 // -D57147 <klr> Make _Tie implement org.omg.CORBA.portable.InvokeHandler
duke@1 41 // -D58037 <klr> Make _Tie delegate to Operations interface
duke@1 42 // -D62739 <klr> no TIE for values that support abstract interfaces, etc.
duke@1 43
duke@1 44 import java.io.File;
duke@1 45 import java.io.PrintWriter;
duke@1 46
duke@1 47 import java.util.Enumeration;
duke@1 48 import java.util.Hashtable;
duke@1 49 import java.util.Vector;
duke@1 50
duke@1 51 import com.sun.tools.corba.se.idl.AttributeEntry;
duke@1 52 import com.sun.tools.corba.se.idl.GenFileStream;
duke@1 53
duke@1 54 import com.sun.tools.corba.se.idl.InterfaceEntry;
duke@1 55 import com.sun.tools.corba.se.idl.InterfaceState;
duke@1 56 import com.sun.tools.corba.se.idl.MethodEntry;
duke@1 57 import com.sun.tools.corba.se.idl.SymtabEntry;
duke@1 58 import com.sun.tools.corba.se.idl.TypedefEntry;
duke@1 59 import com.sun.tools.corba.se.idl.ValueEntry;
duke@1 60
duke@1 61 /**
duke@1 62 *
duke@1 63 **/
duke@1 64 public class Skeleton implements AuxGen
duke@1 65 {
duke@1 66 private NameModifier skeletonNameModifier ;
duke@1 67 private NameModifier tieNameModifier ;
duke@1 68
duke@1 69 public Skeleton ()
duke@1 70 {
duke@1 71 }
duke@1 72
duke@1 73 public void generate (Hashtable symbolTable, SymtabEntry entry)
duke@1 74 {
duke@1 75 // <d62739-begin>
duke@1 76 // Per Simon, 5-12-99, don't generate TIE or Skeleton for
duke@1 77 //
duke@1 78 // 1) valuetypes supporting abstract interfaces
duke@1 79 // 2) valuetypes with no supports.
duke@1 80 // 3) abstract interfaces
duke@1 81 //
duke@1 82 if (entry instanceof ValueEntry)
duke@1 83 {
duke@1 84 ValueEntry v = (ValueEntry) entry;
duke@1 85 if ((v.supports ().size () == 0) ||
duke@1 86 ((InterfaceEntry) v.supports ().elementAt (0)).isAbstract ()) {
duke@1 87 return;
duke@1 88 }
duke@1 89 }
duke@1 90 if (((InterfaceEntry) entry).isAbstract ()) {
duke@1 91 return;
duke@1 92 }
duke@1 93 // <d62739-end>
duke@1 94
duke@1 95 this.symbolTable = symbolTable;
duke@1 96
duke@1 97 this.i = (InterfaceEntry)entry;
duke@1 98 init ();
duke@1 99 openStream ();
duke@1 100 if (stream == null)
duke@1 101 return;
duke@1 102 writeHeading ();
duke@1 103 writeBody ();
duke@1 104 writeClosing ();
duke@1 105 closeStream ();
duke@1 106 } // generate
duke@1 107
duke@1 108 /**
duke@1 109 * Initialize members unique to this generator.
duke@1 110 **/
duke@1 111 protected void init ()
duke@1 112 {
duke@1 113 tie = ((Arguments)Compile.compiler.arguments).TIEServer ;
duke@1 114 poa = ((Arguments)Compile.compiler.arguments).POAServer ;
duke@1 115
duke@1 116 skeletonNameModifier =
duke@1 117 ((Arguments)Compile.compiler.arguments).skeletonNameModifier ;
duke@1 118 tieNameModifier =
duke@1 119 ((Arguments)Compile.compiler.arguments).tieNameModifier ;
duke@1 120
duke@1 121 tieClassName = tieNameModifier.makeName( i.name() ) ;
duke@1 122 skeletonClassName = skeletonNameModifier.makeName( i.name() ) ;
duke@1 123
duke@1 124 intfName = Util.javaName (i);
duke@1 125 // for valuetype, get the name of the interface the valuetype supports
duke@1 126 if (i instanceof ValueEntry)
duke@1 127 {
duke@1 128 ValueEntry v = (ValueEntry) i;
duke@1 129 InterfaceEntry intf = (InterfaceEntry) v.supports ().elementAt (0);
duke@1 130 intfName = Util.javaName (intf);
duke@1 131 }
duke@1 132 } // init
duke@1 133
duke@1 134 protected void openStream ()
duke@1 135 {
duke@1 136 if (tie)
duke@1 137 stream = Util.stream( i, tieNameModifier, ".java" ) ;
duke@1 138 else
duke@1 139 stream = Util.stream( i, skeletonNameModifier, ".java" ) ;
duke@1 140 } // openStream
duke@1 141
duke@1 142 protected void writeHeading ()
duke@1 143 {
duke@1 144 Util.writePackage (stream, i, Util.StubFile);
duke@1 145 Util.writeProlog (stream, ((GenFileStream)stream).name ());
duke@1 146 if (i.comment () != null)
duke@1 147 i.comment ().generate ("", stream);
duke@1 148 writeClassDeclaration ();
duke@1 149 stream.println ('{');
duke@1 150 stream.println ();
duke@1 151 } // writeHeading
duke@1 152
duke@1 153 protected void writeClassDeclaration ()
duke@1 154 {
duke@1 155 if (tie){
duke@1 156 stream.println ("public class " + tieClassName +
duke@1 157 " extends " + skeletonClassName ) ;
duke@1 158 } else {
duke@1 159 if (poa) {
duke@1 160 stream.println ("public abstract class " + skeletonClassName +
duke@1 161 " extends org.omg.PortableServer.Servant");
duke@1 162 stream.print (" implements " + intfName + "Operations, ");
duke@1 163 stream.println ("org.omg.CORBA.portable.InvokeHandler");
duke@1 164 } else {
duke@1 165 stream.println ("public abstract class " + skeletonClassName +
duke@1 166 " extends org.omg.CORBA.portable.ObjectImpl");
duke@1 167 stream.print (" implements " + intfName + ", ");
duke@1 168 stream.println ("org.omg.CORBA.portable.InvokeHandler");
duke@1 169 }
duke@1 170 }
duke@1 171 } // writeClassDeclaration
duke@1 172
duke@1 173 /**
duke@1 174 *
duke@1 175 **/
duke@1 176 protected void writeBody ()
duke@1 177 {
duke@1 178 // <f46082.51> Remove -stateful feature. ?????
duke@1 179 //if (i.state () != null)
duke@1 180 // writeState ();
duke@1 181 writeCtors ();
duke@1 182 if (i instanceof ValueEntry)
duke@1 183 {
duke@1 184 // use the interface the valuetype supports to generate the
duke@1 185 // tie class instead of using the valuetype itself
duke@1 186 ValueEntry v = (ValueEntry) i;
duke@1 187 this.i = (InterfaceEntry) v.supports ().elementAt (0);
duke@1 188 }
duke@1 189 buildMethodList ();
duke@1 190 //DispatchMethod and MethodTable
duke@1 191 if (tie){ //Concrete class implementing the remote interface
duke@1 192 //The logic is here for future use
duke@1 193 if (poa) {
duke@1 194 writeMethods ();
duke@1 195 stream.println (" private " + intfName + "Operations _impl;");
duke@1 196 stream.println (" private org.omg.PortableServer.POA _poa;");
duke@1 197 } else {
duke@1 198 writeMethods ();
duke@1 199 stream.println (" private " + intfName + "Operations _impl;");
duke@1 200 }
duke@1 201 } else { //Both POA and ImplBase are abstract InvokeHandler
duke@1 202 //The logic is here for future use
duke@1 203 if (poa) {
duke@1 204 writeMethodTable ();
duke@1 205 writeDispatchMethod ();
duke@1 206 writeCORBAOperations ();
duke@1 207 } else {
duke@1 208 writeMethodTable ();
duke@1 209 writeDispatchMethod ();
duke@1 210 writeCORBAOperations ();
duke@1 211 }
duke@1 212 }
duke@1 213 //legacy !!
duke@1 214 writeOperations ();
duke@1 215 } // writeBody
duke@1 216
duke@1 217 /**
duke@1 218 * Close the skeleton class. The singleton ORB member is
duke@1 219 * necessary only for portable skeletons.
duke@1 220 **/
duke@1 221 protected void writeClosing ()
duke@1 222 {
duke@1 223 stream.println ();
duke@1 224 if (tie){
duke@1 225 stream.println ("} // class " + tieClassName);
duke@1 226 } else {
duke@1 227 stream.println ("} // class " + skeletonClassName);
duke@1 228 }
duke@1 229 } // writeClosing
duke@1 230
duke@1 231 /**
duke@1 232 * Close the print stream, which flushes the stream to file.
duke@1 233 **/
duke@1 234 protected void closeStream ()
duke@1 235 {
duke@1 236 stream.close ();
duke@1 237 } // closeStream
duke@1 238
duke@1 239 protected void writeCtors ()
duke@1 240 {
duke@1 241 stream.println (" // Constructors");
duke@1 242 // Empty argument constructors
duke@1 243 if (!poa) {
duke@1 244 if (tie){
duke@1 245 stream.println (" public " + tieClassName + " ()");
duke@1 246 stream.println (" {");
duke@1 247 stream.println (" }");
duke@1 248 } else {
duke@1 249 stream.println (" public " + skeletonClassName + " ()");
duke@1 250 stream.println (" {");
duke@1 251 stream.println (" }");
duke@1 252 }
duke@1 253 }
duke@1 254 stream.println ();
duke@1 255 // Argumented constructors
duke@1 256 if (tie){
duke@1 257 if (poa) {
duke@1 258 //Write constructors
duke@1 259 writePOATieCtors();
duke@1 260 //Write state setters and getters
duke@1 261 writePOATieFieldAccessMethods();
duke@1 262 } else {
duke@1 263 stream.println (" public " + tieClassName +
duke@1 264 " (" + intfName + "Operations impl)");
duke@1 265 stream.println (" {");
duke@1 266 // Does it derive from a interface having state, e.g., valuetype?
duke@1 267 if (((InterfaceEntry)i.derivedFrom ().firstElement ()).state () != null)
duke@1 268 stream.println (" super (impl);");
duke@1 269 else
duke@1 270 stream.println (" super ();");
duke@1 271 stream.println (" _impl = impl;");
duke@1 272 stream.println (" }");
duke@1 273 stream.println ();
duke@1 274 }
duke@1 275 } else { //Skeleton is not Tie so it has no constructors.
duke@1 276 if (poa) {
duke@1 277 } else {
duke@1 278 }
duke@1 279 }
duke@1 280
duke@1 281 } // writeCtors
duke@1 282
duke@1 283
duke@1 284 private void writePOATieCtors(){
duke@1 285 //First constructor
duke@1 286 stream.println (" public " + tieClassName + " ( " + intfName + "Operations delegate ) {");
duke@1 287 stream.println (" this._impl = delegate;");
duke@1 288 stream.println (" }");
duke@1 289 //Second constructor specifying default poa.
duke@1 290 stream.println (" public " + tieClassName + " ( " + intfName +
duke@1 291 "Operations delegate , org.omg.PortableServer.POA poa ) {");
duke@1 292 stream.println (" this._impl = delegate;");
duke@1 293 stream.println (" this._poa = poa;");
duke@1 294 stream.println (" }");
duke@1 295 }
duke@1 296
duke@1 297 private void writePOATieFieldAccessMethods(){
duke@1 298 //Getting delegate
duke@1 299 stream.println (" public " + intfName+ "Operations _delegate() {");
duke@1 300 stream.println (" return this._impl;");
duke@1 301 stream.println (" }");
duke@1 302 //Setting delegate
duke@1 303 stream.println (" public void _delegate (" + intfName + "Operations delegate ) {");
duke@1 304 stream.println (" this._impl = delegate;");
duke@1 305 stream.println (" }");
duke@1 306 //Overriding default poa
duke@1 307 stream.println (" public org.omg.PortableServer.POA _default_POA() {");
duke@1 308 stream.println (" if(_poa != null) {");
duke@1 309 stream.println (" return _poa;");
duke@1 310 stream.println (" }");
duke@1 311 stream.println (" else {");
duke@1 312 stream.println (" return super._default_POA();");
duke@1 313 stream.println (" }");
duke@1 314 stream.println (" }");
duke@1 315 }
duke@1 316
duke@1 317 /**
duke@1 318 * Build a list of all of the methods, keeping out duplicates.
duke@1 319 **/
duke@1 320 protected void buildMethodList ()
duke@1 321 {
duke@1 322 // Start from scratch
duke@1 323 methodList = new Vector ();
duke@1 324
duke@1 325 buildMethodList (i);
duke@1 326 } // buildMethodList
duke@1 327
duke@1 328 /**
duke@1 329 *
duke@1 330 **/
duke@1 331 private void buildMethodList (InterfaceEntry entry)
duke@1 332 {
duke@1 333 // Add the local methods
duke@1 334 Enumeration locals = entry.methods ().elements ();
duke@1 335 while (locals.hasMoreElements ())
duke@1 336 addMethod ((MethodEntry)locals.nextElement ());
duke@1 337
duke@1 338 // Add the inherited methods
duke@1 339 Enumeration parents = entry.derivedFrom ().elements ();
duke@1 340 while (parents.hasMoreElements ())
duke@1 341 {
duke@1 342 InterfaceEntry parent = (InterfaceEntry)parents.nextElement ();
duke@1 343 if (!parent.name ().equals ("Object"))
duke@1 344 buildMethodList (parent);
duke@1 345 }
duke@1 346 } // buildMethodList
duke@1 347
duke@1 348 /**
duke@1 349 *
duke@1 350 **/
duke@1 351 private void addMethod (MethodEntry method)
duke@1 352 {
duke@1 353 if (!methodList.contains (method))
duke@1 354 methodList.addElement (method);
duke@1 355 } // addMethod
duke@1 356
duke@1 357 /**
duke@1 358 *
duke@1 359 **/
duke@1 360 protected void writeDispatchMethod ()
duke@1 361 {
duke@1 362 String indent = " ";
duke@1 363 stream.println (" public org.omg.CORBA.portable.OutputStream _invoke (String $method,");
duke@1 364 stream.println (indent + "org.omg.CORBA.portable.InputStream in,");
duke@1 365 stream.println (indent + "org.omg.CORBA.portable.ResponseHandler $rh)");
duke@1 366 stream.println (" {");
duke@1 367
duke@1 368 // this is a special case code generation for cases servantLocator and
duke@1 369 // servantActivator, where OMG is taking too long to define them
duke@1 370 // as local objects
duke@1 371
duke@1 372 boolean isLocalInterface = false;
duke@1 373 if (i instanceof InterfaceEntry) {
duke@1 374 isLocalInterface = i.isLocalServant();
duke@1 375 }
duke@1 376
duke@1 377 if (!isLocalInterface) {
duke@1 378 // Per Simon 8/26/98, create and return reply stream for all methods - KLR
duke@1 379 stream.println (" org.omg.CORBA.portable.OutputStream out = null;");
duke@1 380 stream.println (" java.lang.Integer __method = (java.lang.Integer)_methods.get ($method);");
duke@1 381 stream.println (" if (__method == null)");
duke@1 382 stream.println (" throw new org.omg.CORBA.BAD_OPERATION (0, org.omg.CORBA.CompletionStatus.COMPLETED_MAYBE);");
duke@1 383 stream.println ();
duke@1 384 if (methodList.size () > 0)
duke@1 385 {
duke@1 386 stream.println (" switch (__method.intValue ())");
duke@1 387 stream.println (" {");
duke@1 388
duke@1 389 // Write the method case statements
duke@1 390 int realI = 0;
duke@1 391 for (int i = 0; i < methodList.size (); ++i)
duke@1 392 {
duke@1 393 MethodEntry method = (MethodEntry)methodList.elementAt (i);
duke@1 394 ((MethodGen)method.generator ()).dispatchSkeleton (symbolTable, method, stream, realI);
duke@1 395 if (method instanceof AttributeEntry && !((AttributeEntry)method).readOnly ())
duke@1 396 realI += 2;
duke@1 397 else
duke@1 398 ++realI;
duke@1 399 }
duke@1 400
duke@1 401 indent = " ";
duke@1 402 stream.println (indent + "default:");
duke@1 403 stream.println (indent + " throw new org.omg.CORBA.BAD_OPERATION (0, org.omg.CORBA.CompletionStatus.COMPLETED_MAYBE);");
duke@1 404 stream.println (" }");
duke@1 405 stream.println ();
duke@1 406 }
duke@1 407 stream.println (" return out;");
duke@1 408 } else {
duke@1 409 stream.println(" throw new org.omg.CORBA.BAD_OPERATION();");
duke@1 410 }
duke@1 411 stream.println (" } // _invoke");
duke@1 412 stream.println ();
duke@1 413 } // writeDispatchMethod
duke@1 414
duke@1 415 /**
duke@1 416 *
duke@1 417 **/
duke@1 418 protected void writeMethodTable ()
duke@1 419 {
duke@1 420 // Write the methods hashtable
duke@1 421 stream.println (" private static java.util.Hashtable _methods = new java.util.Hashtable ();");
duke@1 422 stream.println (" static");
duke@1 423 stream.println (" {");
duke@1 424
duke@1 425 int count = -1;
duke@1 426 Enumeration e = methodList.elements ();
duke@1 427 while (e.hasMoreElements ())
duke@1 428 {
duke@1 429 MethodEntry method = (MethodEntry)e.nextElement ();
duke@1 430 if (method instanceof AttributeEntry)
duke@1 431 {
duke@1 432 stream.println (" _methods.put (\"_get_" + Util.stripLeadingUnderscores (method.name ()) + "\", new java.lang.Integer (" + (++count) + "));");
duke@1 433 if (!((AttributeEntry)method).readOnly ())
duke@1 434 stream.println (" _methods.put (\"_set_" + Util.stripLeadingUnderscores (method.name ()) + "\", new java.lang.Integer (" + (++count) + "));");
duke@1 435 }
duke@1 436 else
duke@1 437 stream.println (" _methods.put (\"" + Util.stripLeadingUnderscores (method.name ()) + "\", new java.lang.Integer (" + (++count) + "));");
duke@1 438 }
duke@1 439 stream.println (" }");
duke@1 440 stream.println ();
duke@1 441 } // writeMethodTable
duke@1 442
duke@1 443 /**
duke@1 444 *
duke@1 445 **/
duke@1 446 protected void writeMethods ()
duke@1 447 {
duke@1 448 int realI = 0;
duke@1 449 for (int i = 0; i < methodList.size (); ++i)
duke@1 450 {
duke@1 451 MethodEntry method = (MethodEntry)methodList.elementAt (i);
duke@1 452 ((MethodGen)method.generator ()).skeleton
duke@1 453 (symbolTable, method, stream, realI);
duke@1 454 if (method instanceof AttributeEntry &&
duke@1 455 !((AttributeEntry)method).readOnly ())
duke@1 456 realI += 2;
duke@1 457 else
duke@1 458 ++realI;
duke@1 459 stream.println ();
duke@1 460 }
duke@1 461 } // writeMethods
duke@1 462
duke@1 463 /**
duke@1 464 *
duke@1 465 **/
duke@1 466 private void writeIDs ()
duke@1 467 {
duke@1 468 Vector list = new Vector ();
duke@1 469 buildIDList (i, list);
duke@1 470 Enumeration e = list.elements ();
duke@1 471 boolean first = true;
duke@1 472 while (e.hasMoreElements ())
duke@1 473 {
duke@1 474 if (first)
duke@1 475 first = false;
duke@1 476 else
duke@1 477 stream.println (", ");
duke@1 478 stream.print (" \"" + (String)e.nextElement () + '"');
duke@1 479 }
duke@1 480 } // writeIDs
duke@1 481
duke@1 482 /**
duke@1 483 *
duke@1 484 **/
duke@1 485 private void buildIDList (InterfaceEntry entry, Vector list)
duke@1 486 {
duke@1 487 if (!entry.fullName ().equals ("org/omg/CORBA/Object"))
duke@1 488 {
duke@1 489 String id = Util.stripLeadingUnderscoresFromID (entry.repositoryID ().ID ());
duke@1 490 if (!list.contains (id))
duke@1 491 list.addElement (id);
duke@1 492 Enumeration e = entry.derivedFrom ().elements ();
duke@1 493 while (e.hasMoreElements ())
duke@1 494 buildIDList ((InterfaceEntry)e.nextElement (), list);
duke@1 495 }
duke@1 496 } // buildIDList
duke@1 497
duke@1 498 /**
duke@1 499 *
duke@1 500 **/
duke@1 501 protected void writeCORBAOperations ()
duke@1 502 {
duke@1 503 stream.println (" // Type-specific CORBA::Object operations");
duke@1 504
duke@1 505 stream.println (" private static String[] __ids = {");
duke@1 506 writeIDs ();
duke@1 507 stream.println ("};");
duke@1 508 stream.println ();
duke@1 509 if (poa)
duke@1 510 writePOACORBAOperations();
duke@1 511 else
duke@1 512 writeNonPOACORBAOperations();
duke@1 513
duke@1 514 } // writeCORBAOperations
duke@1 515
duke@1 516 protected void writePOACORBAOperations(){
duke@1 517 stream.println (" public String[] _all_interfaces (org.omg.PortableServer.POA poa, byte[] objectId)");
duke@1 518 //Right now, with our POA implementation, the same
duke@1 519 //implementation of _ids() type methods seem to work for both non-POA
duke@1 520 //as well as POA servers. We need to REVISIT since the equivalent
duke@1 521 //POA interface, i.e. _all_interfaces, has parameters which are not being
duke@1 522 //used in the _ids() implementation.
duke@1 523 stream.println (" {");
duke@1 524 stream.println (" return (String[])__ids.clone ();");
duke@1 525 stream.println (" }");
duke@1 526 stream.println ();
duke@1 527 //_this()
duke@1 528 stream.println (" public "+ i.name() +" _this() ");
duke@1 529 stream.println (" {");
duke@1 530 stream.println (" return "+ i.name() +"Helper.narrow(" );
duke@1 531 stream.println (" super._this_object());");
duke@1 532 stream.println (" }");
duke@1 533 stream.println ();
duke@1 534 //_this(org.omg.CORBA.ORB orb)
duke@1 535 stream.println (" public "+ i.name() +" _this(org.omg.CORBA.ORB orb) ");
duke@1 536 stream.println (" {");
duke@1 537 stream.println (" return "+ i.name() +"Helper.narrow(" );
duke@1 538 stream.println (" super._this_object(orb));");
duke@1 539 stream.println (" }");
duke@1 540 stream.println ();
duke@1 541 }
duke@1 542 protected void writeNonPOACORBAOperations(){
duke@1 543 stream.println (" public String[] _ids ()");
duke@1 544 stream.println (" {");
duke@1 545 stream.println (" return (String[])__ids.clone ();");
duke@1 546 stream.println (" }");
duke@1 547 stream.println ();
duke@1 548 }
duke@1 549 /**
duke@1 550 *
duke@1 551 **/
duke@1 552 protected void writeOperations ()
duke@1 553 {
duke@1 554 // _get_ids removed at Simon's request 8/26/98 - KLR
duke@1 555 } // writeOperations
duke@1 556
duke@1 557 protected Hashtable symbolTable = null;
duke@1 558 protected InterfaceEntry i = null;
duke@1 559 protected PrintWriter stream = null;
duke@1 560
duke@1 561 // Unique to this generator
duke@1 562 protected String tieClassName = null;
duke@1 563 protected String skeletonClassName = null;
duke@1 564 protected boolean tie = false;
duke@1 565 protected boolean poa = false;
duke@1 566 protected Vector methodList = null;
duke@1 567 protected String intfName = "";
duke@1 568 } // class Skeleton

mercurial