diff --git a/firestore/build.gradle.kts b/firestore/build.gradle.kts index a04543ceb..4686e0114 100644 --- a/firestore/build.gradle.kts +++ b/firestore/build.gradle.kts @@ -24,6 +24,8 @@ dependencies { compileOnly(Config.Libs.Arch.paging) + lintChecks(project(":lint")) + androidTestImplementation(Config.Libs.Test.junit) androidTestImplementation(Config.Libs.Test.runner) androidTestImplementation(Config.Libs.Test.rules) diff --git a/internal/lint/build.gradle.kts b/internal/lint/build.gradle.kts index 279cc79c8..08c2d83a4 100644 --- a/internal/lint/build.gradle.kts +++ b/internal/lint/build.gradle.kts @@ -12,6 +12,6 @@ dependencies { tasks.withType().configureEach { manifest { - attributes(mapOf("Lint-Registry-v2" to "com.firebaseui.lint.LintIssueRegistry")) + attributes(mapOf("Lint-Registry-v2" to "com.firebaseui.lint.internal.LintIssueRegistry")) } } diff --git a/internal/lint/src/main/java/com/firebaseui/lint/internal/LintIssueRegistry.kt b/internal/lint/src/main/java/com/firebaseui/lint/internal/LintIssueRegistry.kt new file mode 100644 index 000000000..6316879f9 --- /dev/null +++ b/internal/lint/src/main/java/com/firebaseui/lint/internal/LintIssueRegistry.kt @@ -0,0 +1,12 @@ +package com.firebaseui.lint.internal + +import com.android.tools.lint.client.api.IssueRegistry + +/** + * Registry for custom FirebaseUI lint checks. + */ +class LintIssueRegistry : IssueRegistry() { + override val issues = listOf( + NonGlobalIdDetector.NON_GLOBAL_ID + ) +} diff --git a/internal/lint/src/main/java/com/firebaseui/lint/NonGlobalIdDetector.kt b/internal/lint/src/main/java/com/firebaseui/lint/internal/NonGlobalIdDetector.kt similarity index 98% rename from internal/lint/src/main/java/com/firebaseui/lint/NonGlobalIdDetector.kt rename to internal/lint/src/main/java/com/firebaseui/lint/internal/NonGlobalIdDetector.kt index 170bccebb..cc57aebdf 100644 --- a/internal/lint/src/main/java/com/firebaseui/lint/NonGlobalIdDetector.kt +++ b/internal/lint/src/main/java/com/firebaseui/lint/internal/NonGlobalIdDetector.kt @@ -1,4 +1,4 @@ -package com.firebaseui.lint +package com.firebaseui.lint.internal import com.android.tools.lint.detector.api.Category import com.android.tools.lint.detector.api.Implementation diff --git a/internal/lint/src/test/java/com/firebaseui/lint/LintTestHelper.kt b/internal/lint/src/test/java/com/firebaseui/lint/LintTestHelper.kt deleted file mode 100644 index 17f791fbd..000000000 --- a/internal/lint/src/test/java/com/firebaseui/lint/LintTestHelper.kt +++ /dev/null @@ -1,18 +0,0 @@ -package com.firebaseui.lint - -import com.android.tools.lint.checks.infrastructure.TestLintTask -import java.io.File - -object LintTestHelper { - // Nasty hack to make lint tests pass on Windows. For some reason, lint doesn't - // automatically find the Android SDK in its standard path on Windows. This hack looks - // through the system properties to find the path defined in `local.properties` and then - // sets lint's SDK home to that path if it's found. - private val sdkPath = System.getProperty("java.library.path").split(';').find { - it.contains("SDK", true) - } - - fun configuredLint(): TestLintTask = TestLintTask.lint().apply { - sdkHome(File(sdkPath ?: return@apply)) - } -} diff --git a/internal/lint/src/test/java/com/firebaseui/lint/NonGlobalIdDetectorTest.kt b/internal/lint/src/test/java/com/firebaseui/lint/internal/NonGlobalIdDetectorTest.kt similarity index 68% rename from internal/lint/src/test/java/com/firebaseui/lint/NonGlobalIdDetectorTest.kt rename to internal/lint/src/test/java/com/firebaseui/lint/internal/NonGlobalIdDetectorTest.kt index 0e06b9644..5bdf360c3 100644 --- a/internal/lint/src/test/java/com/firebaseui/lint/NonGlobalIdDetectorTest.kt +++ b/internal/lint/src/test/java/com/firebaseui/lint/internal/NonGlobalIdDetectorTest.kt @@ -1,11 +1,25 @@ -package com.firebaseui.lint +package com.firebaseui.lint.internal import com.android.tools.lint.checks.infrastructure.TestFiles.xml -import com.firebaseui.lint.LintTestHelper.configuredLint -import com.firebaseui.lint.NonGlobalIdDetector.Companion.NON_GLOBAL_ID +import com.android.tools.lint.checks.infrastructure.TestLintTask +import com.firebaseui.lint.internal.NonGlobalIdDetector.Companion.NON_GLOBAL_ID import org.junit.Test +import java.io.File class NonGlobalIdDetectorTest { + + // Nasty hack to make lint tests pass on Windows. For some reason, lint doesn't + // automatically find the Android SDK in its standard path on Windows. This hack looks + // through the system properties to find the path defined in `local.properties` and then + // sets lint's SDK home to that path if it's found. + private val sdkPath = System.getProperty("java.library.path").split(';').find { + it.contains("SDK", true) + } + + fun configuredLint(): TestLintTask = TestLintTask.lint().apply { + sdkHome(File(sdkPath ?: return@apply)) + } + @Test fun `Passes on valid view id`() { configuredLint() diff --git a/lint/build.gradle.kts b/lint/build.gradle.kts new file mode 100644 index 000000000..f13aef635 --- /dev/null +++ b/lint/build.gradle.kts @@ -0,0 +1,17 @@ +plugins { + id("kotlin") +} + +dependencies { + compileOnly(Config.Libs.Lint.api) + compileOnly(Config.Libs.Kotlin.jvm) + + testImplementation(Config.Libs.Lint.api) + testImplementation(Config.Libs.Lint.tests) +} + + tasks.withType().configureEach { + manifest { + attributes(mapOf("Lint-Registry-v2" to "com.firebaseui.lint.LintIssueRegistry")) + } + } diff --git a/internal/lint/src/main/java/com/firebaseui/lint/FirestoreRecyclerAdapterLifecycleDetector.kt b/lint/src/main/java/com/firebaseui/lint/FirestoreRecyclerAdapterLifecycleDetector.kt similarity index 100% rename from internal/lint/src/main/java/com/firebaseui/lint/FirestoreRecyclerAdapterLifecycleDetector.kt rename to lint/src/main/java/com/firebaseui/lint/FirestoreRecyclerAdapterLifecycleDetector.kt diff --git a/internal/lint/src/main/java/com/firebaseui/lint/LintIssueRegistry.kt b/lint/src/main/java/com/firebaseui/lint/LintIssueRegistry.kt similarity index 51% rename from internal/lint/src/main/java/com/firebaseui/lint/LintIssueRegistry.kt rename to lint/src/main/java/com/firebaseui/lint/LintIssueRegistry.kt index f85c68afa..32cb1e589 100644 --- a/internal/lint/src/main/java/com/firebaseui/lint/LintIssueRegistry.kt +++ b/lint/src/main/java/com/firebaseui/lint/LintIssueRegistry.kt @@ -7,8 +7,7 @@ import com.android.tools.lint.client.api.IssueRegistry */ class LintIssueRegistry : IssueRegistry() { override val issues = listOf( - NonGlobalIdDetector.NON_GLOBAL_ID, - FirestoreRecyclerAdapterLifecycleDetector.ISSUE_MISSING_LISTENING_START_METHOD, - FirestoreRecyclerAdapterLifecycleDetector.ISSUE_MISSING_LISTENING_STOP_METHOD + FirestoreRecyclerAdapterLifecycleDetector.ISSUE_MISSING_LISTENING_START_METHOD, + FirestoreRecyclerAdapterLifecycleDetector.ISSUE_MISSING_LISTENING_STOP_METHOD ) } diff --git a/internal/lint/src/test/java/com/firebaseui/lint/FirestoreRecyclerAdapterLifecycleDetectorTest.kt b/lint/src/test/java/com/firebaseui/lint/FirestoreRecyclerAdapterLifecycleDetectorTest.kt similarity index 79% rename from internal/lint/src/test/java/com/firebaseui/lint/FirestoreRecyclerAdapterLifecycleDetectorTest.kt rename to lint/src/test/java/com/firebaseui/lint/FirestoreRecyclerAdapterLifecycleDetectorTest.kt index b28d3a5e2..efc57784c 100644 --- a/internal/lint/src/test/java/com/firebaseui/lint/FirestoreRecyclerAdapterLifecycleDetectorTest.kt +++ b/lint/src/test/java/com/firebaseui/lint/FirestoreRecyclerAdapterLifecycleDetectorTest.kt @@ -1,13 +1,26 @@ package com.firebaseui.lint import com.android.tools.lint.checks.infrastructure.TestFiles.java +import com.android.tools.lint.checks.infrastructure.TestLintTask import com.firebaseui.lint.FirestoreRecyclerAdapterLifecycleDetector.Companion.ISSUE_MISSING_LISTENING_START_METHOD import com.firebaseui.lint.FirestoreRecyclerAdapterLifecycleDetector.Companion.ISSUE_MISSING_LISTENING_STOP_METHOD -import com.firebaseui.lint.LintTestHelper.configuredLint import org.junit.Test +import java.io.File class FirestoreRecyclerAdapterLifecycleDetectorTest { + // Nasty hack to make lint tests pass on Windows. For some reason, lint doesn't + // automatically find the Android SDK in its standard path on Windows. This hack looks + // through the system properties to find the path defined in `local.properties` and then + // sets lint's SDK home to that path if it's found. + private val sdkPath = System.getProperty("java.library.path").split(';').find { + it.contains("SDK", true) + } + + fun configuredLint(): TestLintTask = TestLintTask.lint().apply { + sdkHome(File(sdkPath ?: return@apply)) + } + @Test fun `Checks missing startListening() method call`() { configuredLint() diff --git a/proguard-tests/build.gradle.kts b/proguard-tests/build.gradle.kts index a0f8d08e6..5f3f50233 100644 --- a/proguard-tests/build.gradle.kts +++ b/proguard-tests/build.gradle.kts @@ -4,6 +4,11 @@ android { } buildTypes { + named("debug").configure { + // This empty config is only here to make Android Studio happy. + // This build type is later ignored in the variantFilter section + } + named("release").configure { // For the purposes of the sample, allow testing of a proguarded release build // using the debug key diff --git a/settings.gradle.kts b/settings.gradle.kts index cc8f450ea..dd8fbeaf0 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -5,5 +5,8 @@ include( ":common", ":firestore", ":database", ":storage", + + ":lint", + ":proguard-tests", ":internal:lint", ":internal:lintchecks" )