Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 51211535 authored by Sam Delmerico's avatar Sam Delmerico
Browse files

improve error handling for SourceRootDirs

Previously, warnings about missing modules were printed directly to
stderr. Instead we can pass these messages along as errors using the
existing pathways.

Bug: 269457150
Test: m nothing
Test: add -external to PRODUCT_SOURCE_ROOT_DIRS and observe missing
  module errors
Change-Id: I7273c427f38024e3c288f1ecb31175ed04ac44a6
parent 7c907b84
Loading
Loading
Loading
Loading
+12 −0
Original line number Diff line number Diff line
@@ -245,6 +245,10 @@ func (r *NameResolver) AllModules() []blueprint.ModuleGroup {
	return allModules
}

func (r *NameResolver) SkippedModuleFromName(moduleName string, namespace blueprint.Namespace) (skipInfos []blueprint.SkippedModuleInfo, skipped bool) {
	return r.rootNamespace.moduleContainer.SkippedModuleFromName(moduleName, namespace)
}

// parses a fully-qualified path (like "//namespace_path:module_name") into a namespace name and a
// module name
func (r *NameResolver) parseFullyQualifiedName(name string) (namespaceName string, moduleName string, ok bool) {
@@ -333,11 +337,16 @@ func (r *NameResolver) MissingDependencyError(depender string, dependerNamespace

	// determine which namespaces the module can be found in
	foundInNamespaces := []string{}
	skippedDepErrors := []error{}
	for _, namespace := range r.sortedNamespaces.sortedItems() {
		_, found := namespace.moduleContainer.ModuleFromName(depName, nil)
		if found {
			foundInNamespaces = append(foundInNamespaces, namespace.Path)
		}
		_, skipped := namespace.moduleContainer.SkippedModuleFromName(depName, nil)
		if skipped {
			skippedDepErrors = append(skippedDepErrors, namespace.moduleContainer.MissingDependencyError(depender, dependerNamespace, depName))
		}
	}
	if len(foundInNamespaces) > 0 {
		// determine which namespaces are visible to dependerNamespace
@@ -350,6 +359,9 @@ func (r *NameResolver) MissingDependencyError(depender string, dependerNamespace
		text += fmt.Sprintf("\nModule %q is defined in namespace %q which can read these %v namespaces: %q", depender, dependerNs.Path, len(importedNames), importedNames)
		text += fmt.Sprintf("\nModule %q can be found in these namespaces: %q", depName, foundInNamespaces)
	}
	for _, err := range skippedDepErrors {
		text += fmt.Sprintf("\n%s", err.Error())
	}

	return fmt.Errorf(text)
}