in src/ulsp/internal/java-utils/utils.go [26:64]
func getBuildFile(fs fs.UlspFS, workspaceRoot string, uri protocol.DocumentURI, includeBuildFile bool) (string, error) {
filename := uri.Filename()
if !strings.HasPrefix(filename, workspaceRoot) {
return "", fmt.Errorf("uri %s is not a child of the workspace %s", filename, workspaceRoot)
}
isDir, err := fs.DirExists(filename)
if err != nil {
return "", err
}
currentDir := filename
if !isDir {
currentDir = filepath.Dir(currentDir)
}
for currentDir != workspaceRoot {
children, err := fs.ReadDir(currentDir)
if err != nil {
return "", err
}
for _, child := range children {
childName := child.Name()
if isBuildFile(childName) {
if includeBuildFile {
return currentDir + string(filepath.Separator) + childName, nil
} else {
return currentDir, nil
}
}
}
currentDir = filepath.Dir(currentDir)
}
return "", fmt.Errorf("no child directory contained a BUILD file")
}