summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorandroid-build-team Robot <android-build-team-robot@google.com>2020-07-14 23:08:56 +0000
committerandroid-build-team Robot <android-build-team-robot@google.com>2020-07-14 23:08:56 +0000
commitfe39b985d7f112f5f86ee5217eae4c3556799f79 (patch)
treeead3be829be27bbc66ea0cc718f3d44d08afce70
parent86d810e78b3b365aa059cd3db7659a4feb033d50 (diff)
parentcfe2c88eb403ceeac3fd2557a3b9414234d235ab (diff)
Snap for 6680110 from cfe2c88eb403ceeac3fd2557a3b9414234d235ab to rvc-qpr1-release
Change-Id: Ifa6b8923b1cb80f9f910446a8f3f47c85a8be840
-rw-r--r--src/main/java/com/android/tools/metalava/Driver.kt6
-rw-r--r--src/main/java/com/android/tools/metalava/FileReadSandbox.kt18
-rw-r--r--src/main/java/com/android/tools/metalava/Options.kt14
-rw-r--r--src/test/java/com/android/tools/metalava/OptionsTest.kt5
4 files changed, 35 insertions, 8 deletions
diff --git a/src/main/java/com/android/tools/metalava/Driver.kt b/src/main/java/com/android/tools/metalava/Driver.kt
index 1241a16..2089215 100644
--- a/src/main/java/com/android/tools/metalava/Driver.kt
+++ b/src/main/java/com/android/tools/metalava/Driver.kt
@@ -1163,7 +1163,7 @@ private fun addHiddenPackages(
file: File,
pkg: String
) {
- if (file.isDirectory) {
+ if (FileReadSandbox.isDirectory(file)) {
if (skippableDirectory(file)) {
return
}
@@ -1179,7 +1179,7 @@ private fun addHiddenPackages(
if (files != null) {
for (child in files) {
var subPkg =
- if (child.isDirectory)
+ if (FileReadSandbox.isDirectory(child))
if (pkg.isEmpty())
child.name
else pkg + "." + child.name
@@ -1194,7 +1194,7 @@ private fun addHiddenPackages(
addHiddenPackages(packageToDoc, packageToOverview, hiddenPackages, child, subPkg)
}
}
- } else if (file.isFile) {
+ } else if (FileReadSandbox.isFile(file)) {
var javadoc = false
val map = when {
file.name == "package.html" -> {
diff --git a/src/main/java/com/android/tools/metalava/FileReadSandbox.kt b/src/main/java/com/android/tools/metalava/FileReadSandbox.kt
index a4ebb98..2c2443b 100644
--- a/src/main/java/com/android/tools/metalava/FileReadSandbox.kt
+++ b/src/main/java/com/android/tools/metalava/FileReadSandbox.kt
@@ -188,6 +188,24 @@ internal object FileReadSandbox {
return false
}
+ fun isDirectory(file: File): Boolean {
+ try {
+ temporaryExempt.set(true)
+ return file.isDirectory()
+ } finally {
+ temporaryExempt.set(false)
+ }
+ }
+
+ fun isFile(file: File): Boolean {
+ try {
+ temporaryExempt.set(true)
+ return file.isFile()
+ } finally {
+ temporaryExempt.set(false)
+ }
+ }
+
/** Used to skip all checks on any filesystem access made within the [check] method. */
private val temporaryExempt = ThreadLocal<Boolean>()
diff --git a/src/main/java/com/android/tools/metalava/Options.kt b/src/main/java/com/android/tools/metalava/Options.kt
index 1636985..16917e3 100644
--- a/src/main/java/com/android/tools/metalava/Options.kt
+++ b/src/main/java/com/android/tools/metalava/Options.kt
@@ -787,7 +787,7 @@ class Options(
"$arg should point to a source root directory, not a source file ($path)"
)
}
- mutableSourcePath.addAll(stringToExistingDirsOrJars(path))
+ mutableSourcePath.addAll(stringToExistingDirsOrJars(path, false))
}
}
@@ -1944,7 +1944,7 @@ class Options(
return FileReadSandbox.allowAccess(files)
}
- private fun stringToExistingDirsOrJars(value: String): List<File> {
+ private fun stringToExistingDirsOrJars(value: String, exempt: Boolean = true): List<File> {
val files = mutableListOf<File>()
for (path in value.split(File.pathSeparatorChar)) {
val file = fileForPathInner(path)
@@ -1953,7 +1953,10 @@ class Options(
}
files.add(file)
}
- return FileReadSandbox.allowAccess(files)
+ if (exempt) {
+ return FileReadSandbox.allowAccess(files)
+ }
+ return files
}
private fun stringToExistingDirsOrFiles(value: String): List<File> {
@@ -2156,7 +2159,10 @@ class Options(
"@ followed by a path to a text file containing paths to the full set of files to parse.",
"$ARG_SOURCE_PATH <paths>", "One or more directories (separated by `${File.pathSeparator}`) " +
- "containing source files (within a package hierarchy)",
+ "containing source files (within a package hierarchy). If $ARG_STRICT_INPUT_FILES, " +
+ "$ARG_STRICT_INPUT_FILES_WARN, or $ARG_STRICT_INPUT_FILES_STACK are used, files accessed under " +
+ "$ARG_SOURCE_PATH that are not explicitly specified in $ARG_SOURCE_FILES are reported as " +
+ "violations.",
"$ARG_CLASS_PATH <paths>", "One or more directories or jars (separated by " +
"`${File.pathSeparator}`) containing classes that should be on the classpath when parsing the " +
diff --git a/src/test/java/com/android/tools/metalava/OptionsTest.kt b/src/test/java/com/android/tools/metalava/OptionsTest.kt
index 33cfc7f..371106e 100644
--- a/src/test/java/com/android/tools/metalava/OptionsTest.kt
+++ b/src/test/java/com/android/tools/metalava/OptionsTest.kt
@@ -70,7 +70,10 @@ API sources:
parse.
--source-path <paths>
One or more directories (separated by `:`) containing source files (within
- a package hierarchy)
+ a package hierarchy). If --strict-input-files, --strict-input-files:warn,
+ or --strict-input-files:stack are used, files accessed under --source-path
+ that are not explicitly specified in --source-files are reported as
+ violations.
--classpath <paths>
One or more directories or jars (separated by `:`) containing classes that
should be on the classpath when parsing the source files