func getBuildFile()

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")
}