Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit f542a920 authored by Kshitij Gupta's avatar Kshitij Gupta
Browse files

RunBlockingDetector: Fully deprecate runBlocking(Traced)

- To follow up on ag/32154762, we want to fully deprecate
  use of runBlocking and runBlockingTraced
- Both variations of the imports used across SystemUI for
  runBlockingTraced are tested

Bug: 423461968
Test: RunBlockingDetectorTest
Flag: NONE - linter update
Change-Id: I1878bdebff08e7dc11396343948e3c09ef2f27ca
parent 3cb9dadd
Loading
Loading
Loading
Loading
+5 −1
Original line number Diff line number Diff line
@@ -79,6 +79,10 @@ class RunBlockingDetector : Detector(), SourceCodeScanner {
                    Implementation(RunBlockingDetector::class.java, Scope.JAVA_FILE_SCOPE),
            )

        val FORBIDDEN_IMPORTS = listOf("kotlinx.coroutines.runBlocking")
        val FORBIDDEN_IMPORTS =
            listOf(
                "kotlinx.coroutines.runBlocking",
                "com.android.app.tracing.coroutines.runBlockingTraced",
            )
    }
}
+53 −1
Original line number Diff line number Diff line
@@ -28,7 +28,7 @@ class RunBlockingDetectorTest : SystemUILintDetectorTest() {
    override fun getIssues(): List<Issue> = listOf(RunBlockingDetector.ISSUE)

    @Test
    fun testViolation() {
    fun testViolationRunBlocking() {
        lint()
            .files(
                kotlin(
@@ -61,6 +61,48 @@ src/com/example/MyClass.kt:4: Error: Importing kotlinx.coroutines.runBlocking is
            )
    }

    @Test
    fun testViolationRunBlockingTraced() {
        lint()
            .files(
                kotlin(
                    """
                    package com.example

                    import com.android.app.tracing.coroutines.runBlockingTraced
                    import com.android.app.tracing.coroutines.runBlockingTraced as runBlocking

                    class MyClass {
                        fun myMethod() {
                            runBlockingTraced {
                                // Some code here
                            }

                            runBlocking {
                                // Some code here
                            }
                        }
                    }
                    """
                ),
                RUN_BLOCKING_TRACED_DEFINITION,
            )
            .issues(RunBlockingDetector.ISSUE)
            .run()
            .expect(
                """
src/com/example/MyClass.kt:4: Error: Importing com.android.app.tracing.coroutines.runBlockingTraced is not allowed. [RunBlockingUsage]
                    import com.android.app.tracing.coroutines.runBlockingTraced
                    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
src/com/example/MyClass.kt:5: Error: Importing com.android.app.tracing.coroutines.runBlockingTraced is not allowed. [RunBlockingUsage]
                    import com.android.app.tracing.coroutines.runBlockingTraced as runBlocking
                    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2 errors, 0 warnings
"""
                    .trimIndent()
            )
    }

    // Verifies that the lint check does *not* flag calls to other methods.
    @Test
    fun testNotViolation() {
@@ -100,5 +142,15 @@ src/com/example/MyClass.kt:4: Error: Importing kotlinx.coroutines.runBlocking is
                    }
                    """
            )
        val RUN_BLOCKING_TRACED_DEFINITION =
            kotlin(
                """
                    package com.android.app.tracing.coroutines

                    fun runBlockingTraced(block: suspend () -> Unit) {
                        // Implementation details don't matter for this test.
                    }
                    """
            )
    }
}