From 58b833598d2ab91e9ea3e1a31360e86f21d48619 Mon Sep 17 00:00:00 2001 From: Sam Stern Date: Wed, 29 Aug 2018 09:49:53 -0700 Subject: [PATCH 1/3] Initial Commit Change-Id: I9b712f3df3e1a164867f69abb9e7f3270f48195f --- firestore/build.gradle.kts | 2 ++ internal/lint/build.gradle.kts | 2 +- .../lint/internal/LintIssueRegistry.kt | 12 ++++++++++++ .../lint/{ => internal}/NonGlobalIdDetector.kt | 2 +- .../java/com/firebaseui/lint/LintTestHelper.kt | 18 ------------------ .../{ => internal}/NonGlobalIdDetectorTest.kt | 18 ++++++++++++++++-- lint/build.gradle.kts | 17 +++++++++++++++++ ...irestoreRecyclerAdapterLifecycleDetector.kt | 0 .../com/firebaseui/lint/LintIssueRegistry.kt | 5 ++--- ...toreRecyclerAdapterLifecycleDetectorTest.kt | 15 ++++++++++++++- proguard-tests/build.gradle.kts | 8 ++++++++ settings.gradle.kts | 3 +++ 12 files changed, 76 insertions(+), 26 deletions(-) create mode 100644 internal/lint/src/main/java/com/firebaseui/lint/internal/LintIssueRegistry.kt rename internal/lint/src/main/java/com/firebaseui/lint/{ => internal}/NonGlobalIdDetector.kt (98%) delete mode 100644 internal/lint/src/test/java/com/firebaseui/lint/LintTestHelper.kt rename internal/lint/src/test/java/com/firebaseui/lint/{ => internal}/NonGlobalIdDetectorTest.kt (71%) create mode 100644 lint/build.gradle.kts rename {internal/lint => lint}/src/main/java/com/firebaseui/lint/FirestoreRecyclerAdapterLifecycleDetector.kt (100%) rename {internal/lint => lint}/src/main/java/com/firebaseui/lint/LintIssueRegistry.kt (51%) rename {internal/lint => lint}/src/test/java/com/firebaseui/lint/FirestoreRecyclerAdapterLifecycleDetectorTest.kt (79%) 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 71% 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..f775ca2e7 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.android.tools.lint.checks.infrastructure.TestLintTask import com.firebaseui.lint.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..a69598f53 100644 --- a/proguard-tests/build.gradle.kts +++ b/proguard-tests/build.gradle.kts @@ -4,6 +4,14 @@ android { } buildTypes { + named("debug").configure { + postprocessing { + isRemoveUnusedCode = true + isRemoveUnusedResources = true + isObfuscate = true + } + } + 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" ) From 9f5c4637dabd4dc447b5aa4c8e882f968c24a82c Mon Sep 17 00:00:00 2001 From: Sam Stern Date: Wed, 29 Aug 2018 13:49:55 -0700 Subject: [PATCH 2/3] Kotlin import error Change-Id: I5076201bc6d5ec7196a229485af91f4c894eca5c --- .../com/firebaseui/lint/internal/NonGlobalIdDetectorTest.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/internal/lint/src/test/java/com/firebaseui/lint/internal/NonGlobalIdDetectorTest.kt b/internal/lint/src/test/java/com/firebaseui/lint/internal/NonGlobalIdDetectorTest.kt index f775ca2e7..5bdf360c3 100644 --- a/internal/lint/src/test/java/com/firebaseui/lint/internal/NonGlobalIdDetectorTest.kt +++ b/internal/lint/src/test/java/com/firebaseui/lint/internal/NonGlobalIdDetectorTest.kt @@ -2,7 +2,7 @@ package com.firebaseui.lint.internal import com.android.tools.lint.checks.infrastructure.TestFiles.xml import com.android.tools.lint.checks.infrastructure.TestLintTask -import com.firebaseui.lint.NonGlobalIdDetector.Companion.NON_GLOBAL_ID +import com.firebaseui.lint.internal.NonGlobalIdDetector.Companion.NON_GLOBAL_ID import org.junit.Test import java.io.File From d58326d078a3536d134d3bfc152ac7f1d021a0d7 Mon Sep 17 00:00:00 2001 From: Sam Stern Date: Tue, 4 Sep 2018 09:40:40 -0700 Subject: [PATCH 3/3] Simplify debug config Change-Id: I561c1183fa383f51d9117ec870303cf767e9b641 --- proguard-tests/build.gradle.kts | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/proguard-tests/build.gradle.kts b/proguard-tests/build.gradle.kts index a69598f53..5f3f50233 100644 --- a/proguard-tests/build.gradle.kts +++ b/proguard-tests/build.gradle.kts @@ -5,11 +5,8 @@ android { buildTypes { named("debug").configure { - postprocessing { - isRemoveUnusedCode = true - isRemoveUnusedResources = true - isObfuscate = true - } + // This empty config is only here to make Android Studio happy. + // This build type is later ignored in the variantFilter section } named("release").configure {