Skip to content

Commit c0d4f80

Browse files
committed
Add linter rules in Android Studio
Closes #339 Automatically add the right lint rules if AGP is detected to avoid warnings/errors on version placeholder
1 parent 4649276 commit c0d4f80

File tree

12 files changed

+111
-0
lines changed

12 files changed

+111
-0
lines changed

plugins/core/src/main/kotlin/de/fayard/refreshVersions/core/RefreshVersionsTask.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
package de.fayard.refreshVersions.core
22

33
import de.fayard.refreshVersions.core.internal.RefreshVersionsConfigHolder
4+
import de.fayard.refreshVersions.core.internal.RefreshVersionsConfigHolder.settings
45
import de.fayard.refreshVersions.core.internal.SettingsPluginsUpdater
6+
import de.fayard.refreshVersions.core.internal.configureLintOnAndroidProjects
57
import de.fayard.refreshVersions.core.internal.legacy.LegacyBootstrapUpdater
68
import de.fayard.refreshVersions.core.internal.lookupVersionCandidates
79
import de.fayard.refreshVersions.core.internal.versions.VersionsPropertiesModel
@@ -77,6 +79,7 @@ open class RefreshVersionsTask : DefaultTask() {
7779
warnAboutHardcodedVersionsIfAny(result.dependenciesWithHardcodedVersions)
7880
warnAboutDynamicVersionsIfAny(result.dependenciesWithDynamicVersions)
7981
warnAboutGradleUpdateAvailableIfAny(result.gradleUpdates)
82+
configureLintOnAndroidProjects(settings, RefreshVersionsConfigHolder.readVersionsMap())
8083
}
8184
}
8285

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
package de.fayard.refreshVersions.core.internal
2+
3+
import org.gradle.api.initialization.Settings
4+
5+
// Disable a warning in Android Studio that AGP has version "_"
6+
fun configureLintOnAndroidProjects(settings: Settings, versionsMap: Map<String, String>) {
7+
if ("plugin.android" !in versionsMap) return
8+
val file = settings.rootDir.resolve("lint.xml")
9+
val currentLintXml = when {
10+
file.canRead() -> file.readText()
11+
else -> ""
12+
}
13+
val newLintXml = updateLintXml(currentLintXml)
14+
if (newLintXml !== currentLintXml) {
15+
file.writeText(newLintXml)
16+
}
17+
}
18+
19+
fun updateLintXml(input: String): String {
20+
val alreadyAdded = input.contains("GradleDependency") && input.contains("GradlePluginVersion")
21+
if (alreadyAdded) return input
22+
val ignoreRules = """
23+
| <issue id="GradleDependency" severity="ignore" />
24+
| <issue id="GradlePluginVersion" severity="ignore" />
25+
""".trimMargin()
26+
27+
val prefix = when {
28+
input.isBlank() -> """
29+
<?xml version="1.0" encoding="UTF-8"?>
30+
<lint>
31+
""".trimIndent()
32+
else -> input.substringBefore("</lint>").trimEnd()
33+
}
34+
val postfix = "</lint>"
35+
return """
36+
|$prefix
37+
|$ignoreRules
38+
|$postfix
39+
""".trimMargin()
40+
}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
package de.fayard.refreshVersions.core
2+
3+
import de.fayard.refreshVersions.core.internal.updateLintXml
4+
import io.kotest.matchers.shouldBe
5+
import org.junit.jupiter.api.TestFactory
6+
import testutils.junit.mapDynamicTest
7+
import java.io.File
8+
9+
class LintUpdaterTest {
10+
11+
private val testDataDir = testResources.resolve("lint-updater")
12+
13+
private val dirs = testDataDir.listFiles { file ->
14+
file.isDirectory
15+
}!!.asList()
16+
17+
@TestFactory
18+
fun `lint updater`() = dirs.mapDynamicTest { dirOfSample ->
19+
`test lint updater`(dirOfSample)
20+
}
21+
22+
private fun `test lint updater`(directory: File) {
23+
require(directory.isDirectory)
24+
val input = directory.resolve("input.xml").readText()
25+
val expected = directory.resolve("expected.xml").readText()
26+
updateLintXml(input).trim() shouldBe expected.trim()
27+
}
28+
}
29+
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<lint>
3+
<issue id="MissingPermission" severity="informational" />
4+
<issue id="GradleDependency" severity="ignore" />
5+
<issue id="GradlePluginVersion" severity="ignore" />
6+
</lint>
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<lint>
3+
<issue id="MissingPermission" severity="informational" />
4+
<issue id="GradleDependency" severity="ignore" />
5+
<issue id="GradlePluginVersion" severity="ignore" />
6+
</lint>
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<lint>
3+
<issue id="GradleDependency" severity="ignore" />
4+
<issue id="GradlePluginVersion" severity="ignore" />
5+
</lint>

plugins/core/src/test/resources/lint-updater/blank/input.xml

Whitespace-only changes.
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<lint>
3+
<issue id="GradleDependency" severity="ignore" />
4+
<issue id="GradlePluginVersion" severity="ignore" />
5+
</lint>
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<lint>
3+
4+
</lint>
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<lint>
3+
<issue id="MissingPermission" severity="informational" />
4+
<issue id="GradleDependency" severity="ignore" />
5+
<issue id="GradlePluginVersion" severity="ignore" />
6+
</lint>

0 commit comments

Comments
 (0)