-
Notifications
You must be signed in to change notification settings - Fork 6
Expand file tree
/
Copy pathAndroidLintPersistentWorker.kt
More file actions
77 lines (72 loc) · 2.18 KB
/
AndroidLintPersistentWorker.kt
File metadata and controls
77 lines (72 loc) · 2.18 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
75
76
77
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 AndroidLintPersistentWorker {
@JvmStatic
fun main(args: Array<String>) {
if ("--persistent_worker" in args) {
val worker = PersistentWorker()
worker.start(AndroidLint()).run(::exitProcess)
return
}
val worker = Worker.fromArgs(args, AndroidLintExecutor())
val exitCode = worker.processRequests()
exitProcess(exitCode)
}
private class AndroidLint
@Inject
constructor() : Work {
override fun invoke(
ctx: WorkerContext.TaskContext,
args: Iterable<String>,
): Status {
val workingDirectory = Files.createTempDirectory("rules")
try {
val runner = AndroidLintRunner()
val parsedArgs = AndroidLintActionArgs.parseArgs(args.toList())
val result = runner.runAndroidLint(parsedArgs, workingDirectory)
if (result == 0) {
return Status.SUCCESS
}
return Status.ERROR
} 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)
return runner.runAndroidLint(parsedArgs, workingDirectory)
} catch (exception: Exception) {
exception.printStackTrace()
return 1
} finally {
try {
workingDirectory.toFile().deleteRecursively()
} catch (e: Exception) {
e.printStackTrace()
}
}
}
}
}