Turn GlobFiles into a Glob for files, use it
am: 540a78c1ce

Change-Id: Ia5811eb2fe2db20d4ab8e554341b875392cc345a
diff --git a/android/module.go b/android/module.go
index 07c4e8f..4a8e8ac 100644
--- a/android/module.go
+++ b/android/module.go
@@ -1220,7 +1220,7 @@
 				ctx.ModuleErrorf("srcs dependency %q is not a source file producing module", m)
 			}
 		} else if pathtools.IsGlob(s) {
-			globbedSrcFiles := ctx.Glob(filepath.Join(prefix, s), expandedExcludes)
+			globbedSrcFiles := ctx.GlobFiles(filepath.Join(prefix, s), expandedExcludes)
 			for i, s := range globbedSrcFiles {
 				globbedSrcFiles[i] = s.(ModuleSrcPath).WithSubDir(ctx, subDir)
 			}
@@ -1246,25 +1246,15 @@
 	if err != nil {
 		ctx.ModuleErrorf("glob: %s", err.Error())
 	}
-	return pathsForModuleSrcFromFullPath(ctx, ret)
+	return pathsForModuleSrcFromFullPath(ctx, ret, true)
 }
 
-// glob only "files" under the directory relative to top of the source tree.
 func (ctx *androidModuleContext) GlobFiles(globPattern string, excludes []string) Paths {
-	paths, err := ctx.GlobWithDeps(globPattern, excludes)
+	ret, err := ctx.GlobWithDeps(globPattern, excludes)
 	if err != nil {
 		ctx.ModuleErrorf("glob: %s", err.Error())
 	}
-	var ret []Path
-	for _, p := range paths {
-		if isDir, err := ctx.Fs().IsDir(p); err != nil {
-			ctx.ModuleErrorf("error in IsDir(%s): %s", p, err.Error())
-			return nil
-		} else if !isDir {
-			ret = append(ret, PathForSource(ctx, p))
-		}
-	}
-	return ret
+	return pathsForModuleSrcFromFullPath(ctx, ret, false)
 }
 
 func init() {
diff --git a/android/paths.go b/android/paths.go
index 3b1cea6..ffdb393 100644
--- a/android/paths.go
+++ b/android/paths.go
@@ -228,14 +228,17 @@
 
 // pathsForModuleSrcFromFullPath returns Paths rooted from the module's local
 // source directory, but strip the local source directory from the beginning of
-// each string.
-func pathsForModuleSrcFromFullPath(ctx ModuleContext, paths []string) Paths {
+// each string. If incDirs is false, strip paths with a trailing '/' from the list.
+func pathsForModuleSrcFromFullPath(ctx ModuleContext, paths []string, incDirs bool) Paths {
 	prefix := filepath.Join(ctx.Config().srcDir, ctx.ModuleDir()) + "/"
 	if prefix == "./" {
 		prefix = ""
 	}
 	ret := make(Paths, 0, len(paths))
 	for _, p := range paths {
+		if !incDirs && strings.HasSuffix(p, "/") {
+			continue
+		}
 		path := filepath.Clean(p)
 		if !strings.HasPrefix(path, prefix) {
 			reportPathErrorf(ctx, "Path '%s' is not in module source directory '%s'", p, prefix)
diff --git a/cc/llndk_library.go b/cc/llndk_library.go
index e824d0f..b573c2e 100644
--- a/cc/llndk_library.go
+++ b/cc/llndk_library.go
@@ -100,7 +100,7 @@
 
 func (stub *llndkStubDecorator) processHeaders(ctx ModuleContext, srcHeaderDir string, outDir android.ModuleGenPath) android.Path {
 	srcDir := android.PathForModuleSrc(ctx, srcHeaderDir)
-	srcFiles := ctx.Glob(filepath.Join(srcDir.String(), "**/*.h"), nil)
+	srcFiles := ctx.GlobFiles(filepath.Join(srcDir.String(), "**/*.h"), nil)
 
 	var installPaths []android.WritablePath
 	for _, header := range srcFiles {
diff --git a/cc/ndk_headers.go b/cc/ndk_headers.go
index d7c2a06..9fabc97 100644
--- a/cc/ndk_headers.go
+++ b/cc/ndk_headers.go
@@ -202,7 +202,7 @@
 
 	fromSrcPath := android.PathForModuleSrc(ctx, String(m.properties.From))
 	toOutputPath := getCurrentIncludePath(ctx).Join(ctx, String(m.properties.To))
-	srcFiles := ctx.Glob(filepath.Join(fromSrcPath.String(), "**/*.h"), nil)
+	srcFiles := ctx.GlobFiles(filepath.Join(fromSrcPath.String(), "**/*.h"), nil)
 	var installPaths []android.WritablePath
 	for _, header := range srcFiles {
 		installDir := getHeaderInstallDir(ctx, header, String(m.properties.From), String(m.properties.To))
diff --git a/java/app.go b/java/app.go
index 34f05b7..ac88df7 100644
--- a/java/app.go
+++ b/java/app.go
@@ -342,17 +342,7 @@
 }
 
 func resourceGlob(ctx android.ModuleContext, dir android.Path) android.Paths {
-	var ret android.Paths
-	files := ctx.Glob(filepath.Join(dir.String(), "**/*"), aaptIgnoreFilenames)
-	for _, f := range files {
-		if isDir, err := ctx.Fs().IsDir(f.String()); err != nil {
-			ctx.ModuleErrorf("error in IsDir(%s): %s", f.String(), err.Error())
-			return nil
-		} else if !isDir {
-			ret = append(ret, f)
-		}
-	}
-	return ret
+	return ctx.GlobFiles(filepath.Join(dir.String(), "**/*"), aaptIgnoreFilenames)
 }
 
 type overlayGlobResult struct {
@@ -440,10 +430,7 @@
 		}
 		var paths android.Paths
 		for _, f := range files {
-			if isDir, err := ctx.Fs().IsDir(f); err != nil {
-				ctx.Errorf("error in IsDir(%s): %s", f, err.Error())
-				return
-			} else if !isDir {
+			if !strings.HasSuffix(f, "/") {
 				paths = append(paths, android.PathForSource(ctx, f))
 			}
 		}