关键代码:
class DependencyProjectDetector : Detector(), Detector.UastScanner {
// 各个module之间的依赖树
private val treeMap = HashMap<String, ElementNode>()
// 根module结点
private var rootNode = ElementNode()
companion object {
const val TAG = “DependencyProjectDetector”
private val IMPLEMENTATION = Implementation(
DependencyProjectDetector::class.java,
Scope.JAVA_FILE_SCOPE
)
val ISSUE: Issue = Issue
.create(
id = “DependencyProjectDetector”,
briefDescription = “app dependency relationship”,
explanation = “”"
app dependency relationship
“”".trimIndent(),
category = Category.CORRECTNESS,
priority = 9,
severity = Severity.FATAL,
androidSpecific = true,
implementation = IMPLEMENTATION
)
}
//这里可以随意,主要是为了借助遍历method的能力。
override fun getApplicableMethodNames(): List? {
return listOf(“a”)
}
override fun beforeCheckRootProject(context: Context) {
rootNode = collectNode(context.project.name)
super.beforeCheckRootProject(context)
}
//分析当前模块依赖情况,并收集依赖信息。
private fun analysisCurrentProjectDependency(project: Project) {
val projectName = project.name
val currentNode = collectNode(projectName)
val artifact = project.currentVariant.mainArtifact
val list = project.directLibraries.filter { !it.isExternalLibrary }
list.forEach {
val childNode &#