-
Notifications
You must be signed in to change notification settings - Fork 6
Expand file tree
/
Copy pathAndroidLintAction.kt
More file actions
74 lines (69 loc) · 2.14 KB
/
AndroidLintAction.kt
File metadata and controls
74 lines (69 loc) · 2.14 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
package com.rules.android.lint.cli
import com.rules.android.lint.worker.Worker
import io.bazel.worker.PersistentWorker
import io.bazel.worker.Status
import io.bazel.worker.Work
import io.bazel.worker.WorkerContext
import java.io.PrintStream
import java.nio.file.Files
import javax.inject.Inject
import kotlin.system.exitProcess
object AndroidLintAction {
@JvmStatic
fun main(args: Array<String>) {
if ("--persistent_worker" in args) {
val worker = PersistentWorker()
worker.start(AndroidLintPersistentWorker()).run(::exitProcess)
return
}
val worker = Worker.fromArgs(args, AndroidLintExecutor())
val exitCode = worker.processRequests()
exitProcess(exitCode)
}
private class AndroidLintPersistentWorker
@Inject
constructor() : Work {
override fun invoke(
ctx: WorkerContext.TaskContext,
args: Iterable<String>,
): Status {
val workingDirectory = Files.createTempDirectory("rules")
try {
val parsedArgs = AndroidLintActionArgs.parseArgs(args.toList())
val result = AndroidLintRunner().runAndroidLint(parsedArgs, workingDirectory)
return if (result != 0) Status.ERROR else Status.SUCCESS
} catch (exception: Exception) {
return Status.ERROR
} finally {
try {
workingDirectory.toFile().deleteRecursively()
} catch (e: Exception) {
e.printStackTrace()
}
}
}
}
private class AndroidLintExecutor : Worker.WorkRequestCallback {
override fun processWorkRequest(
args: List<String>,
printStream: PrintStream,
): Int {
val workingDirectory = Files.createTempDirectory("rules")
try {
val runner = AndroidLintRunner()
val parsedArgs = AndroidLintActionArgs.parseArgs(args)
runner.runAndroidLint(parsedArgs, workingDirectory)
return 0
} catch (exception: Exception) {
exception.printStackTrace()
return 1
} finally {
try {
workingDirectory.toFile().deleteRecursively()
} catch (e: Exception) {
e.printStackTrace()
}
}
}
}
}