code: synchronized void insureNodesParsed()
      {
          if ( paramsNode != null ) // there is always a paramsNode
              return;
  
          Object firstNode = jjtGetChild(0);
          firstThrowsClause = 1;
          if ( firstNode instanceof BSHReturnType )
          {
              returnTypeNode = (BSHReturnType)firstNode;
              paramsNode = (BSHFormalParameters)jjtGetChild(1);
              if ( jjtGetNumChildren() > 2+numThrows )
                  blockNode = (BSHBlock)jjtGetChild(2+numThrows); // skip throws
              ++firstThrowsClause;
          }
          else
          {
              paramsNode = (BSHFormalParameters)jjtGetChild(0);
              blockNode = (BSHBlock)jjtGetChild(1+numThrows); // skip throws
          }
          paramsNode.insureParsed();
          isVarArgs = paramsNode.isVarArgs;
      }
docs: Set the returnTypeNode, paramsNode, and blockNode based on child
  node structure.  No evaluation is done here.