code: public ParseTree getStatementAtLine( int iLineNum, Class clsSkip )
    {
      if( _pe instanceof NewExpression )
      {
        NewExpression newExpression = (NewExpression)_pe;
        IType type = newExpression.getType();
        if( type instanceof IGosuClassInternal && newExpression.isAnonymousClass() )
        {
          return (ParseTree)((IGosuClassInternal)type).getClassStatement().getLocation().getStatementAtLine( iLineNum, clsSkip );
        }
      }
  
      if( (_pe instanceof Statement) && // Note we must analyze expressions e.g., block expressions can have statements
          !(_pe instanceof FunctionStatement && ((FunctionStatement)_pe).getDynamicFunctionSymbol() instanceof ProgramClassFunctionSymbol) &&
          (getLineNum() == iLineNum) &&
          (clsSkip == null || !clsSkip.isAssignableFrom( _pe.getClass() )) )
      {
        return this;
      }
  
      ParseTree deepest = null;
      for(int i = 0; i < _children.size; i++)
      {
        ParseTree child = (ParseTree) _children.data[i];
        ParseTree l = child.getStatementAtLine( iLineNum, clsSkip );
        if( Search.isDeeper( deepest, l ) )
        {
          deepest = l;
        }
      }
  
      return deepest;
    }
docs: @param iLineNum The one based line number to check.
  @param clsSkip  A statement sublcass to ignore. Optional.
  
  @return The first statement beginning at the specified line number, or null
  if no statements start at the line number.