code: @Override
  	public List<ParsingError> doValidate() {
  
  		String fileName = this.commandName + Constants.FILE_EXT_COMMANDS;
  		File commandsDirectory = new File( this.context.getApp().getDirectory(), Constants.PROJECT_DIR_COMMANDS );
  		File commandFileToExecute;
  
  		List<ParsingError> result = new ArrayList<> ();
  		if( Utils.isEmptyOrWhitespaces( this.commandName )) {
  			result.add( error( ErrorCode.CMD_MISSING_COMMAND_NAME ));
  		}
  
  		// Prevent a commands file from invoking itself recursively
  		// If the command was loaded from a file...
  		else if( this.context.getCommandFile() != null
  				&& fileName.equals( this.context.getCommandFile().getName())) {
  
  			result.add( error( ErrorCode.CMD_LOOPING_COMMAND, name( this.commandName )));
  		}
  
  		// The commands file to execute must exist.
  		else if( ! ( commandFileToExecute = new File( commandsDirectory, fileName )).exists()) {
  			result.add( error( ErrorCode.CMD_INEXISTING_COMMAND, name( this.commandName )));
  		}
  
  		// If it exists, we do not want it to contain the same instruction.
  		// Can happen if we execute a commands (not loaded from a file) that executes
  		// a commands file with the same instruction...
  		else {
  			try {
  				String content = Utils.readFileContent( commandFileToExecute );
  				Pattern p = Pattern.compile( PREFIX + "\\s+" + Pattern.quote( this.commandName ), Pattern.CASE_INSENSITIVE );
  				if( p.matcher( content ).find())
  					result.add( error( ErrorCode.CMD_NASTY_LOOPING_COMMAND, name( this.commandName )));
  
  			} catch( IOException e ) {
  				// If we cannot load the file's content, do not push the validation further...
  				Utils.logException( Logger.getLogger( getClass().getName()), e );
  			}
  		}
  
  		return result;
  	}
docs: /*
  (non-Javadoc)
  @see net.roboconf.core.commands.AbstractCommandInstruction#doValidate()