question-mark
Stuck on an issue?

Lightrun Answers was designed to reduce the constant googling that comes with debugging 3rd party libraries. It collects links to all the places you might be looking at while hunting down a tough bug.

And, if you’re still stuck at the end, we’re happy to hop on a call to see how we can help out.

Kotlin ClassCastException Lint Error Timber 4.7.0

See original GitHub issue

Timber 4.7.0 with Android Gradle 3.1.0

java.lang.ClassCastException: org.jetbrains.uast.kotlin.KotlinUSimpleReferenceExpression cannot be cast to org.jetbrains.uast.UCallExpression
        at timber.lint.WrongTimberUsageDetector.isLoggingExceptionMessage(WrongTimberUsageDetector.java:552)
        at timber.lint.WrongTimberUsageDetector.checkExceptionLogging(WrongTimberUsageDetector.java:535)
        at timber.lint.WrongTimberUsageDetector.visitMethod(WrongTimberUsageDetector.java:95)
        at com.android.tools.lint.client.api.UElementVisitor$DelegatingPsiVisitor.visitMethodCallExpression(UElementVisitor.kt:1027)
        at com.android.tools.lint.client.api.UElementVisitor$DelegatingPsiVisitor.visitCallExpression(UElementVisitor.kt:1007)
        at org.jetbrains.uast.kotlin.KotlinUFunctionCallExpression.accept(KotlinUFunctionCallExpression.kt:114)
        at org.jetbrains.uast.UQualifiedReferenceExpression$DefaultImpls.accept(UQualifiedReferenceExpression.kt:48)
        at org.jetbrains.uast.kotlin.KotlinUQualifiedReferenceExpression.accept(KotlinUQualifiedReferenceExpression.kt:29)
        at org.jetbrains.uast.internal.ImplementationUtilsKt.acceptList(implementationUtils.kt:23)
        at org.jetbrains.uast.UBlockExpression$DefaultImpls.accept(UBlockExpression.kt:35)
        at org.jetbrains.uast.kotlin.KotlinUBlockExpression.accept(KotlinUBlockExpression.kt:24)
        at org.jetbrains.uast.UCatchClause$DefaultImpls.accept(UTryExpression.kt:135)
        at org.jetbrains.uast.kotlin.KotlinUCatchClause.accept(KotlinUCatchClause.kt:26)
        at org.jetbrains.uast.internal.ImplementationUtilsKt.acceptList(implementationUtils.kt:23)
        at org.jetbrains.uast.UTryExpression$DefaultImpls.accept(UTryExpression.kt:85)
        at org.jetbrains.uast.kotlin.KotlinUTryExpression.accept(KotlinUTryExpression.kt:25)
        at org.jetbrains.uast.internal.ImplementationUtilsKt.acceptList(implementationUtils.kt:23)
        at org.jetbrains.uast.UBlockExpression$DefaultImpls.accept(UBlockExpression.kt:35)
        at org.jetbrains.uast.kotlin.KotlinUBlockExpression.accept(KotlinUBlockExpression.kt:24)
        at org.jetbrains.uast.UAnnotationMethod$DefaultImpls.accept(UMethod.kt:102)
        at org.jetbrains.uast.kotlin.declarations.KotlinUMethod.accept(KotlinUMethod.kt:35)
        at org.jetbrains.uast.internal.ImplementationUtilsKt.acceptList(implementationUtils.kt:23)
        at org.jetbrains.uast.UClass$DefaultImpls.accept(UClass.kt:63)
        at org.jetbrains.uast.kotlin.AbstractKotlinUClass.accept(KotlinUClass.kt:32)
        at org.jetbrains.uast.internal.ImplementationUtilsKt.acceptList(implementationUtils.kt:23)
        at org.jetbrains.uast.UClass$DefaultImpls.accept(UClass.kt:63)
        at org.jetbrains.uast.kotlin.AbstractKotlinUClass.accept(KotlinUClass.kt:32)
        at org.jetbrains.uast.internal.ImplementationUtilsKt.acceptList(implementationUtils.kt:23)
        at org.jetbrains.uast.UFile$DefaultImpls.accept(UFile.kt:91)
        at org.jetbrains.uast.kotlin.KotlinUFile.accept(KotlinUFile.kt:30)
        at com.android.tools.lint.client.api.UElementVisitor$visitFile$3.run(UElementVisitor.kt:258)
        at com.android.tools.lint.client.api.LintClient.runReadAction(LintClient.kt:1439)
        at com.android.tools.lint.client.api.LintDriver$LintClientWrapper.runReadAction(LintDriver.kt:1900)
        at com.android.tools.lint.client.api.UElementVisitor.visitFile(UElementVisitor.kt:255)
        at com.android.tools.lint.client.api.LintDriver$visitJavaFiles$1.run(LintDriver.kt:1476)
        at com.android.tools.lint.client.api.LintClient.runReadAction(LintClient.kt:1439)
        at com.android.tools.lint.client.api.LintDriver$LintClientWrapper.runReadAction(LintDriver.kt:1900)
        at com.android.tools.lint.client.api.LintDriver.visitJavaFiles(LintDriver.kt:1476)
        at com.android.tools.lint.client.api.LintDriver.visitJavaFiles(LintDriver.kt:1445)
        at com.android.tools.lint.client.api.LintDriver.checkJava(LintDriver.kt:1423)
        at com.android.tools.lint.client.api.LintDriver.runFileDetectors(LintDriver.kt:962)
        at com.android.tools.lint.client.api.LintDriver.checkProject(LintDriver.kt:812)
        at com.android.tools.lint.client.api.LintDriver.analyze(LintDriver.kt:345)
        at com.android.tools.lint.LintCliClient.run(LintCliClient.java:179)
        at com.android.tools.lint.gradle.LintGradleClient.run(LintGradleClient.java:254)
        at com.android.tools.lint.gradle.LintGradleExecution.runLint(LintGradleExecution.java:257)
        at com.android.tools.lint.gradle.LintGradleExecution.lintSingleVariant(LintGradleExecution.java:359)
        at com.android.tools.lint.gradle.LintGradleExecution.analyze(LintGradleExecution.java:93)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at com.android.tools.lint.gradle.api.ReflectiveLintRunner.runLint(ReflectiveLintRunner.kt:38)
        at com.android.build.gradle.tasks.LintBaseTask.runLint(LintBaseTask.java:87)
        at com.android.build.gradle.tasks.LintPerVariantTask.lint(LintPerVariantTask.java:41)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at org.gradle.internal.reflect.JavaMethod.invoke(JavaMethod.java:73)
        at org.gradle.api.internal.project.taskfactory.StandardTaskAction.doExecute(StandardTaskAction.java:46)
        at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:39)
        at org.gradle.api.internal.project.taskfactory.StandardTaskAction.execute(StandardTaskAction.java:26)
        at org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:788)
        at org.gradle.api.internal.AbstractTask$TaskActionWrapper.execute(AbstractTask.java:755)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$1.run(ExecuteActionsTaskExecuter.java:124)
        at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:336)
        at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:328)
        at org.gradle.internal.progress.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:199)
        at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:110)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeAction(ExecuteActionsTaskExecuter.java:113)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.executeActions(ExecuteActionsTaskExecuter.java:95)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter.execute(ExecuteActionsTaskExecuter.java:73)
        at org.gradle.api.internal.tasks.execution.OutputDirectoryCreatingTaskExecuter.execute(OutputDirectoryCreatingTaskExecuter.java:51)
        at org.gradle.api.internal.tasks.execution.SkipUpToDateTaskExecuter.execute(SkipUpToDateTaskExecuter.java:59)
        at org.gradle.api.internal.tasks.execution.ResolveTaskOutputCachingStateExecuter.execute(ResolveTaskOutputCachingStateExecuter.java:54)
        at org.gradle.api.internal.tasks.execution.ValidatingTaskExecuter.execute(ValidatingTaskExecuter.java:59)
        at org.gradle.api.internal.tasks.execution.SkipEmptySourceFilesTaskExecuter.execute(SkipEmptySourceFilesTaskExecuter.java:101)
        at org.gradle.api.internal.tasks.execution.FinalizeInputFilePropertiesTaskExecuter.execute(FinalizeInputFilePropertiesTaskExecuter.java:44)
        at org.gradle.api.internal.tasks.execution.CleanupStaleOutputsExecuter.execute(CleanupStaleOutputsExecuter.java:91)
        at org.gradle.api.internal.tasks.execution.ResolveTaskArtifactStateTaskExecuter.execute(ResolveTaskArtifactStateTaskExecuter.java:62)
        at org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:59)
        at org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:54)
        at org.gradle.api.internal.tasks.execution.ExecuteAtMostOnceTaskExecuter.execute(ExecuteAtMostOnceTaskExecuter.java:43)
        at org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter.java:34)
        at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker$1.run(DefaultTaskGraphExecuter.java:256)
        at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:336)
        at org.gradle.internal.progress.DefaultBuildOperationExecutor$RunnableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:328)
        at org.gradle.internal.progress.DefaultBuildOperationExecutor.execute(DefaultBuildOperationExecutor.java:199)
        at org.gradle.internal.progress.DefaultBuildOperationExecutor.run(DefaultBuildOperationExecutor.java:110)
        at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker.execute(DefaultTaskGraphExecuter.java:249)
        at org.gradle.execution.taskgraph.DefaultTaskGraphExecuter$EventFiringTaskWorker.execute(DefaultTaskGraphExecuter.java:238)
        at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker.processTask(DefaultTaskPlanExecutor.java:123)
        at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker.access$200(DefaultTaskPlanExecutor.java:79)
        at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker$1.execute(DefaultTaskPlanExecutor.java:104)
        at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker$1.execute(DefaultTaskPlanExecutor.java:98)
        at org.gradle.execution.taskgraph.DefaultTaskExecutionPlan.execute(DefaultTaskExecutionPlan.java:663)
        at org.gradle.execution.taskgraph.DefaultTaskExecutionPlan.executeWithTask(DefaultTaskExecutionPlan.java:597)
        at org.gradle.execution.taskgraph.DefaultTaskPlanExecutor$TaskExecutorWorker.run(DefaultTaskPlanExecutor.java:98)
        at org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63)
        at org.gradle.internal.concurrent.ManagedExecutorImpl$1.run(ManagedExecutorImpl.java:46)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
        at org.gradle.internal.concurrent.ThreadFactoryImpl$ManagedThreadRunnable.run(ThreadFactoryImpl.java:55)
        at java.lang.Thread.run(Thread.java:748)

Issue Analytics

  • State:closed
  • Created 5 years ago
  • Reactions:2
  • Comments:8 (1 by maintainers)

github_iconTop GitHub Comments

2reactions
ZaimonHaenlecommented, Mar 28, 2018

I get a similar issue with Android gradle plugin 3.1.0 and Timber 4.7.0

ClassCastException:WrongTimberUsageDetector.isLoggingExceptionMessage(WrongTimberUsageDetector.java:552)←WrongTimberUsageDetector.chekExceptionLogging(WrongTimberUsageDetector.java:514)←WrongTimberUsageDetector.visitMethod(WrongTimberUsageDetector.java:95)←UElementVitor$DelegatingPsiVisitor.visitMethodCallExpression(UElementVisitor.kt:1027)←UElementVisitor$DelegatingPsiVisitor.visitCallExpression(UElementVisitor.kt:1007)←KotlinUFunctionCallExpression.accept(KotlinUFunctionCallExpression.kt:114)←UQualifiedReferenceExpression$Defaulmpls.accept(UQualifiedReferenceExpression.kt:48)←KotlinUQualifiedReferenceExpression.accept(KotlinUQualifiedReferenceExpression.kt:29)

Edit: I found the statement that caused the error: Timber.e(error, error.message) and fixed it by replacing it with Timber.e(error)

1reaction
vanniktechcommented, Mar 28, 2018

Seems to me like this is an issue within Lint / UAST. Here’s a test case that won’t even jump into the visitMethod method:

@Test fun exceptionLoggingUsingExceptionMessageArgumentInKotlin() {
  lint()
      .files(TIMBER_STUB,
          kt("""
              |package foo
              |import timber.log.Timber
              |class Example {
              |  fun log() {
              |     Exception e = Exception()
              |     Timber.d(e, e.message)
              |  }
              |}""".trimMargin())
      )
      .issues(WrongTimberUsageDetector.ISSUE_EXCEPTION_LOGGING)
      .run()
      .expect("""
          |src/foo/Example.kt:6: Warning: Explicitly logging exception message is redundant [TimberExceptionLogging]
          |     Timber.d(e, e.message)
          |     ~~~~~~~~~~~~~~~~~~~~~~
          |0 errors, 1 warnings""".trimMargin())
      .expectFixDiffs("""
          |Fix for src/foo/Example.java line 5: Remove redundant argument:
          |@@ -6 +6
          |-      Timber.d(e, e.message)
          |+      Timber.d(e)
          |""".trimMargin())
}
Read more comments on GitHub >

github_iconTop Results From Across the Web

kotlin 1.5 causes timber lint to fail when variable in for loop ...
it works. It looks like the android linter does not get info what the currentRetry variable is and assumes it is an object....
Read more >
Trying to add timber to Kotlin project results in multiple 'Unable ...
I have added implementation 'com.jakewharton.timber:timber:4.7.1' to my Kotlin project and now I get the following Gradle errors:
Read more >
Lint: ClassCastException in RestrictToDetector (related to KT ...
Mentioned issues (1). P2, Strange warning from RestrictToDetector for Kotlin property initialized by constructor call. “ delif I dna) 88312721/ ...
Read more >
Hi Trying to upgrade Timber to 5 0 1 and get this error No m
Hi Trying to upgrade Timber to 5 0 1 and get this error No m | Squarelibraries | Kotlinlang.
Read more >
False import resolution error in TestLintTask? - Google Groups
gradlew timber-lint:test. The outlined error makes sense for 3rd-party libraries, like RecyclerView, but shouldn't the JDK or Kotlin standard libs be ...
Read more >

github_iconTop Related Medium Post

No results found

github_iconTop Related StackOverflow Question

No results found

github_iconTroubleshoot Live Code

Lightrun enables developers to add logs, metrics and snapshots to live code - no restarts or redeploys required.
Start Free

github_iconTop Related Reddit Thread

No results found

github_iconTop Related Hackernoon Post

No results found

github_iconTop Related Tweet

No results found

github_iconTop Related Dev.to Post

No results found

github_iconTop Related Hashnode Post

No results found