in src/rider/main/kotlin/com/jetbrains/rider/plugins/efcore/features/shared/ValidationUtils.kt [21:62]
fun validateRelativeFolderPath(inputString: String, parentPath: String) : ValidationResult {
if (inputString.isEmpty())
return ValidationResult.VALID
if (inputString.startsWith("\\") || inputString.startsWith("/"))
return ValidationResult(false, EfCoreUiBundle.message(
"relative.folder.path.validation.error.name.starts.with.0", inputString.first()))
if (SystemInfo.isWindows) {
val invalidCharacters = Regex("[<>\"*?|]")
.findAll(inputString)
.map { it.value }
.map { XmlStringUtil.escapeString(it) }
.distinct()
if (invalidCharacters.any())
return ValidationResult.invalid(EfCoreUiBundle.message(
"relative.folder.path.validation.error.name.contains.invalid.characters.0",
invalidCharacters.joinToString(" ")))
}
val tokenizer = StringTokenizer(inputString, "\\/")
var vFile: VirtualFile? = VfsUtil.findFile(Path.of(parentPath), true)
while (tokenizer.hasMoreTokens()) {
val token = tokenizer.nextToken()
if (vFile != null) {
if (".." == token) {
vFile = vFile.parent
if (vFile == null)
return ValidationResult.invalid(EfCoreUiBundle.message(
"relative.folder.path.validation.error.not.a.valid.directory"))
} else if ("." != token) {
val child = vFile.findChild(token)
if (child != null && !child.isDirectory)
return ValidationResult.invalid(EfCoreUiBundle.message(
"relative.folder.path.validation.error.contains.invalid.directory", token))
vFile = child
}
}
}
return ValidationResult.VALID
}