mrmans0n / compose-rules

Lint rules for ktlint/detekt aimed to contribute to a healthier usage of Compose. Actively maintained and evolved fork of the Twitter Compose rules.
https://mrmans0n.github.io/compose-rules
Other
543 stars 20 forks source link

Internal Error (rule 'compose:modifier-composed-check') in TextModels.kt at position '0:0. #241

Closed vgonda closed 4 months ago

vgonda commented 4 months ago

Error message

Internal Error (rule 'compose:modifier-composed-check') in TextModels.kt at position '0:0. Please create a ticket at https://github.com/pinterest/ktlint/issues and provide the source code that triggered an error.
com.pinterest.ktlint.rule.engine.api.KtLintRuleException: Rule 'compose:modifier-composed-check' throws exception in file 'TextModels.kt' at position (0:0)
   Rule maintainer: Compose Rules
   Issue tracker  : https://github.com/mrmans0n/compose-rules/issues
   Repository     : https://github.com/mrmans0n/compose-rules
        at com.pinterest.ktlint.rule.engine.internal.RuleExecutionContext.executeRule(RuleExecutionContext.kt:65)
        at com.pinterest.ktlint.rule.engine.api.KtLintRuleEngine$format$3.invoke(KtLintRuleEngine.kt:146)
        at com.pinterest.ktlint.rule.engine.api.KtLintRuleEngine$format$3.invoke(KtLintRuleEngine.kt:145)
        at com.pinterest.ktlint.rule.engine.internal.VisitorProvider$visitor$3.invoke(VisitorProvider.kt:46)
        at com.pinterest.ktlint.rule.engine.internal.VisitorProvider$visitor$3.invoke(VisitorProvider.kt:44)
        at com.pinterest.ktlint.rule.engine.api.KtLintRuleEngine.format(KtLintRuleEngine.kt:145)
        at com.pinterest.ktlint.cli.internal.KtlintCommandLine.format(KtlintCommandLine.kt:476)
        at com.pinterest.ktlint.cli.internal.KtlintCommandLine.process(KtlintCommandLine.kt:462)
        at com.pinterest.ktlint.cli.internal.KtlintCommandLine.access$process(KtlintCommandLine.kt:68)
        at com.pinterest.ktlint.cli.internal.KtlintCommandLine$lintFiles$3.invoke$lambda$0(KtlintCommandLine.kt:402)
        at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
        at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)
        at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)
        at java.base/java.lang.Thread.run(Thread.java:833)
Caused by: java.lang.NullPointerException
        at kotlin.UnsafeLazyImpl.getValue(Lazy.kt:81)
        at io.nlopez.rules.core.util.ModifiersKt.getModifierNames(Modifiers.kt:73)
        at io.nlopez.rules.core.util.ModifiersKt.isModifierReceiver(Modifiers.kt:86)
        at io.nlopez.compose.rules.ModifierComposed.visitFunction(ModifierComposed.kt:19)
        at io.nlopez.compose.rules.ktlint.ModifierComposedCheck.visitFunction(ModifierComposedCheck.kt)
        at io.nlopez.rules.core.ktlint.KtlintRule.beforeVisitChildNodes(KtlintRule.kt:53)
        at com.pinterest.ktlint.rule.engine.internal.RuleExecutionContext$executeRuleOnNodeRecursively$1.invoke(RuleExecutionContext.kt:125)
        at com.pinterest.ktlint.rule.engine.internal.RuleExecutionContext$executeRuleOnNodeRecursively$1.invoke(RuleExecutionContext.kt:124)
        at com.pinterest.ktlint.rule.engine.internal.SuppressHandler.handle(SuppressHandler.kt:28)
        at com.pinterest.ktlint.rule.engine.internal.RuleExecutionContext.executeRuleOnNodeRecursively(RuleExecutionContext.kt:124)
        at com.pinterest.ktlint.rule.engine.internal.RuleExecutionContext.executeRuleOnNodeRecursively(RuleExecutionContext.kt:93)
        at com.pinterest.ktlint.rule.engine.internal.RuleExecutionContext.access$executeRuleOnNodeRecursively(RuleExecutionContext.kt:30)
        at com.pinterest.ktlint.rule.engine.internal.RuleExecutionContext$executeRuleOnNodeRecursively$2$1.invoke(RuleExecutionContext.kt:132)
        at com.pinterest.ktlint.rule.engine.internal.RuleExecutionContext$executeRuleOnNodeRecursively$2$1.invoke(RuleExecutionContext.kt:131)
        at com.pinterest.ktlint.rule.engine.internal.SuppressHandler.handle(SuppressHandler.kt:28)
        at com.pinterest.ktlint.rule.engine.internal.RuleExecutionContext.executeRuleOnNodeRecursively(RuleExecutionContext.kt:131)
        at com.pinterest.ktlint.rule.engine.internal.RuleExecutionContext.executeRuleOnNodeRecursively(RuleExecutionContext.kt:93)
        at com.pinterest.ktlint.rule.engine.internal.RuleExecutionContext.executeRule(RuleExecutionContext.kt:62)

File it errored on

package com.squareup.ui.model.resources.test

import android.content.Context
import android.content.res.Configuration
import com.google.common.truth.FailureMetadata
import com.google.common.truth.StringSubject
import com.google.common.truth.Subject
import com.google.common.truth.Subject.Factory
import com.google.common.truth.Truth
import com.google.common.truth.Truth.assertAbout
import com.squareup.ui.model.resources.TextModel
import java.util.Locale

public fun <T : CharSequence> assertThat(textModel: TextModel<T>): TextModelSubject<T> =
  assertAbout(factory<T>()).that(textModel)

private fun <T : CharSequence> factory() =
  Factory<TextModelSubject<T>, TextModel<T>>(::TextModelSubject)

public class TextModelSubject<T : CharSequence>
internal constructor(
  failureMetadata: FailureMetadata,
  private val actual: TextModel<T>?
) : Subject(failureMetadata, actual) {
  public fun evaluatedAsString(
    context: Context,
    locale: Locale? = null
  ): StringSubject {
    val result = actual?.evaluate(localized(context, locale))
    return Truth.assertThat(result.toString())
  }

  public fun evaluatesTo(
    expected: T,
    context: Context,
    locale: Locale? = null
  ) {
    check("evaluate(${locale ?: ""})")
      .that(actual?.evaluate(localized(context, locale)))
      .isEqualTo(expected)
  }

  private fun localized(
    context: Context,
    locale: Locale? = null
  ) =
    locale?.let {
      context.createConfigurationContext(
        Configuration().apply { setLocale(it) }
      )
    } ?: context
}
mrmans0n commented 4 months ago

Damn, that's unfortunate. It failed in a lazy field with LazyThreadSafety.NONE. I'll fix that. It might work if you retry though.

Thanks for the report!