code: protected int complete(CommandContext ctx, ParsedCommandLine parsedCmd, OperationCandidatesProvider candidatesProvider, final String buffer, int cursor, List<String> candidates) {
  
          if(parsedCmd.isRequestComplete()) {
              return -1;
          }
  
          // Headers completion
          if(parsedCmd.endsOnHeaderListStart() || parsedCmd.hasHeaders()) {
              return completeHeaders(ctx, parsedCmd, candidatesProvider, buffer, cursor, candidates);
          }
  
          // Completed.
          if(parsedCmd.endsOnPropertyListEnd()) {
              return buffer.length();
          }
  
          // Complete properties
          if (parsedCmd.hasProperties() || parsedCmd.endsOnPropertyListStart()
                  || parsedCmd.endsOnNotOperator()) {
              return completeProperties(ctx, parsedCmd, candidatesProvider, buffer, candidates);
          }
  
          // Complete Operation name
          if (parsedCmd.hasOperationName() || parsedCmd.endsOnAddressOperationNameSeparator()) {
              return completeOperationName(ctx, parsedCmd, candidatesProvider, buffer, candidates);
          }
  
          // Finally Complete address
          return completeAddress(ctx, parsedCmd, candidatesProvider, buffer, candidates);
      }
docs: Complete both operations and commands.