如果安装了JaCoCo,Kotlin导入包级别的“val”对象将从Android库模块中失败
我发现我认为是Kotlin和JaCoCo覆盖工具之间的交互错误。
在库中UsefulObjects.kt
:
package com.example.library object Turtles { val allTheWayDown = "Yertle" } val canYouHearTheDrums: Boolean get() = Turtles.allTheWayDown == "Yertle"
在主应用程序MainActivity.kt
:
package com.example.importobjectfails import android.support.v7.app.AppCompatActivity import android.os.Bundle import android.util.Log import com.example.library.Turtles import com.example.library.canYouHearTheDrums class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) Log.d("THIS", canYouHearTheDrums.toString()) Log.d("THAT", Turtles.allTheWayDown) } }
JaCoCo测试覆盖被禁用,上面的代码编译和运行,写预期的消息到Android控制台。 JaCoCo启用代码甚至不编译,它失败了:
e: ImportObjectFails/app/src/main/java/com/example/importobjectfails/MainActivity.kt: (7, 28): Unresolved reference: canYouHearTheDrums e: ImportObjectFails/app/src/main/java/com/example/importobjectfails/MainActivity.kt: (19, 23): Unresolved reference: canYouHearTheDrums
已导入的Turtles
对象没有问题,但是无法找到包级别的val
声明对象。
这似乎是一个善意的错误。
我已经创建了一个示例项目来说明这一点: https : //github.com/gefilte/KotlinImportObjectFails
该项目将无法按照提交进行编译,但是如果从library/build.gradle
文件中除去testCoverageEnabled true
,则它将编译并正常运行。