code: private void traverse(final Path path, final boolean watch, final boolean remove) {
  		log.debug("traverse start. path : {}, watch : {}, remove : {}", path, watch, remove);
  		if (Files.notExists(path)) {
  			return;
  		}
  		if (Files.isDirectory(path)) {
  			if (validPath(path)) {
  				try (DirectoryStream<Path> ds = Files.newDirectoryStream(path)) {
  					if (watch) {
  						WatchKey key = path.register(watcher, ENTRY_CREATE, ENTRY_DELETE, ENTRY_MODIFY);
  						watchDirs.put(key, path);
  					}
  					for (Path child : ds) {
  						traverse(child, watch, remove);
  					}
  				} catch (IOException ex) {
  					throw new UroborosqlRuntimeException("I/O error occured.", ex);
  				}
  			}
  		} else if (path.toString().endsWith(fileExtension)) {
  			String sqlName = getSqlName(path);
  			this.sqlInfos.compute(sqlName,
  					(k, v) -> v == null ? new SqlInfo(sqlName, path, dialect, charset) : v.computePath(path, remove));
  		}
  	}
docs: 指定されたPath配下のファイルを順次追跡し、sqlInfosに格納、または削除を行う。<br>
  また、監視対象指定があり、Pathがディレクトリの場合は、監視サービスに登録する。
  
  @param path 追跡を行うディレクトリ、またはファイルのPath
  @param watch 監視対象指定。<code>true</code>の場合監視対象
  @param remove 削除指定。<code>true</code>の場合、指定のPathを除外する。<code>false</code>の場合は格納する