code: protected CommandLine getOrCreateCommandLine() {
          try {
              CommandLine commandLine = (CommandLine) getProperty(COMMAND_LINE);
              if (commandLine == null) {
                  commandLine = createCommandLine();
                  // The script has a real property (a field or getter) but if we let Script.setProperty handle
                  // this then it just gets stuffed into a binding that shadows the property.
                  // This is somewhat related to other bugged behavior in Script wrt properties and bindings.
                  // See http://jira.codehaus.org/browse/GROOVY-6582 for example.
                  // The correct behavior for Script.setProperty would be to check whether
                  // the property has a setter before creating a new script binding.
                  this.getMetaClass().setProperty(this, COMMAND_LINE, commandLine);
              }
              return commandLine;
          } catch (MissingPropertyException mpe) {
              CommandLine commandLine = createCommandLine();
              // Since no property or binding already exists, we can use plain old setProperty here.
              setProperty(COMMAND_LINE, commandLine);
              return commandLine;
          }
      }
docs: Return the CommandLine for this script.
  If there isn't one already, then create it using {@link #createCommandLine()}.
  
  @return the CommandLine for this script.