diktat
diktat copied to clipboard
KdocMethods assertion failed
Describe the bug
Got exception on ./gradlew diktatFix
ERROR: Assertion failed: anchorBefore == null || anchorBefore.getTreeParent() == parent
java.lang.Throwable: Assertion failed: anchorBefore == null || anchorBefore.getTreeParent() == parent
at org.jetbrains.kotlin.com.intellij.openapi.diagnostic.Logger.assertTrue(Logger.java:201)
at org.jetbrains.kotlin.com.intellij.psi.impl.source.tree.CompositeElement.addChild(CompositeElement.java:571)
at org.cqfn.diktat.ruleset.rules.chapter2.kdoc.KdocMethods$handleParamCheck$2.invoke(KdocMethods.kt:350)
at org.cqfn.diktat.ruleset.rules.chapter2.kdoc.KdocMethods$handleParamCheck$2.invoke(KdocMethods.kt:225)
at org.cqfn.diktat.ruleset.constants.Warnings.warnAndFix(Warnings.kt:267)
at org.cqfn.diktat.ruleset.constants.Warnings.warnAndFix$default(Warnings.kt:209)
at org.cqfn.diktat.ruleset.rules.chapter2.kdoc.KdocMethods.handleParamCheck(KdocMethods.kt:225)
at org.cqfn.diktat.ruleset.rules.chapter2.kdoc.KdocMethods.checkSignatureDescription(KdocMethods.kt:128)
at org.cqfn.diktat.ruleset.rules.chapter2.kdoc.KdocMethods.logic(KdocMethods.kt:93)
at org.cqfn.diktat.ruleset.rules.DiktatRule.visit(DiktatRule.kt:63)
at org.cqfn.diktat.ruleset.rules.OrderedRuleSet$Companion$OrderedRule.visit(OrderedRuleSet.kt:92)
at com.pinterest.ktlint.core.KtLint$format$1.invoke(KtLint.kt:251)
at com.pinterest.ktlint.core.KtLint$format$1.invoke(KtLint.kt:244)
at com.pinterest.ktlint.core.internal.VisitorProvider$sequentialVisitor$1$1$1$1.invoke(VisitorProvider.kt:123)
at com.pinterest.ktlint.core.internal.VisitorProvider$sequentialVisitor$1$1$1$1.invoke(VisitorProvider.kt:123)
at com.pinterest.ktlint.core.ast.PackageKt.visit(package.kt:236)
at com.pinterest.ktlint.core.ast.PackageKt.visit(package.kt:237)
at com.pinterest.ktlint.core.internal.VisitorProvider$sequentialVisitor$1.invoke(VisitorProvider.kt:123)
at com.pinterest.ktlint.core.internal.VisitorProvider$sequentialVisitor$1.invoke(VisitorProvider.kt:115)
at com.pinterest.ktlint.core.KtLint.format(KtLint.kt:244)
at com.pinterest.ktlint.internal.FileUtilsKt.formatFile(FileUtils.kt:202)
at com.pinterest.ktlint.internal.KtlintCommandLine.process(KtlintCommandLine.kt:355)
at com.pinterest.ktlint.internal.KtlintCommandLine.access$process(KtlintCommandLine.kt:48)
at com.pinterest.ktlint.internal.KtlintCommandLine$lintFiles$3.invoke$lambda-1(KtlintCommandLine.kt:274)
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)
18:08:00.317 [pool-1-thread-2] ERROR org.cqfn.diktat.ruleset.rules.DiktatRule - Internal error has occurred in rule [diktat-ruleset:kdoc-methods]. Please make an issue on this bug at https://github.com/saveourtool/diKTat/.
As a workaround you can disable these inspections in yml config: <[KDOC_TRIVIAL_KDOC_ON_FUNCTION, KDOC_WITHOUT_PARAM_TAG, KDOC_WITHOUT_RETURN_TAG, KDOC_WITHOUT_THROWS_TAG, MISSING_KDOC_ON_FUNCTION]>.
Root cause of the problem is in [/Users/sanyavertolet/StudioProjects/iomt-android1/app/src/main/java/com/iomt/android/jetpack/components/textfield/Cell.kt] file.
java.lang.AssertionError: Assertion failed: anchorBefore == null || anchorBefore.getTreeParent() == parent
at org.jetbrains.kotlin.com.intellij.openapi.diagnostic.DefaultLogger.error(DefaultLogger.java:57)
at org.jetbrains.kotlin.com.intellij.openapi.diagnostic.Logger.error(Logger.java:187)
at org.jetbrains.kotlin.com.intellij.openapi.diagnostic.Logger.assertTrue(Logger.java:201)
at org.jetbrains.kotlin.com.intellij.psi.impl.source.tree.CompositeElement.addChild(CompositeElement.java:571)
at org.cqfn.diktat.ruleset.rules.chapter2.kdoc.KdocMethods$handleParamCheck$2.invoke(KdocMethods.kt:350)
at org.cqfn.diktat.ruleset.rules.chapter2.kdoc.KdocMethods$handleParamCheck$2.invoke(KdocMethods.kt:225)
at org.cqfn.diktat.ruleset.constants.Warnings.warnAndFix(Warnings.kt:267)
at org.cqfn.diktat.ruleset.constants.Warnings.warnAndFix$default(Warnings.kt:209)
at org.cqfn.diktat.ruleset.rules.chapter2.kdoc.KdocMethods.handleParamCheck(KdocMethods.kt:225)
at org.cqfn.diktat.ruleset.rules.chapter2.kdoc.KdocMethods.checkSignatureDescription(KdocMethods.kt:128)
at org.cqfn.diktat.ruleset.rules.chapter2.kdoc.KdocMethods.logic(KdocMethods.kt:93)
at org.cqfn.diktat.ruleset.rules.DiktatRule.visit(DiktatRule.kt:63)
at org.cqfn.diktat.ruleset.rules.OrderedRuleSet$Companion$OrderedRule.visit(OrderedRuleSet.kt:92)
at com.pinterest.ktlint.core.KtLint$format$1.invoke(KtLint.kt:251)
at com.pinterest.ktlint.core.KtLint$format$1.invoke(KtLint.kt:244)
at com.pinterest.ktlint.core.internal.VisitorProvider$sequentialVisitor$1$1$1$1.invoke(VisitorProvider.kt:123)
at com.pinterest.ktlint.core.internal.VisitorProvider$sequentialVisitor$1$1$1$1.invoke(VisitorProvider.kt:123)
at com.pinterest.ktlint.core.ast.PackageKt.visit(package.kt:236)
at com.pinterest.ktlint.core.ast.PackageKt.visit(package.kt:237)
at com.pinterest.ktlint.core.internal.VisitorProvider$sequentialVisitor$1.invoke(VisitorProvider.kt:123)
at com.pinterest.ktlint.core.internal.VisitorProvider$sequentialVisitor$1.invoke(VisitorProvider.kt:115)
at com.pinterest.ktlint.core.KtLint.format(KtLint.kt:244)
at com.pinterest.ktlint.internal.FileUtilsKt.formatFile(FileUtils.kt:202)
at com.pinterest.ktlint.internal.KtlintCommandLine.process(KtlintCommandLine.kt:355)
at com.pinterest.ktlint.internal.KtlintCommandLine.access$process(KtlintCommandLine.kt:48)
at com.pinterest.ktlint.internal.KtlintCommandLine$lintFiles$3.invoke$lambda-1(KtlintCommandLine.kt:274)
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.Throwable: Assertion failed: anchorBefore == null || anchorBefore.getTreeParent() == parent
... 28 common frames omitted
Exception in thread "main" java.util.concurrent.ExecutionException: java.lang.Error: Internal error in diktat application
at java.base/java.util.concurrent.FutureTask.report(FutureTask.java:122)
at java.base/java.util.concurrent.FutureTask.get(FutureTask.java:191)
at com.pinterest.ktlint.internal.KtlintCommandLine.parallel(KtlintCommandLine.kt:578)
at com.pinterest.ktlint.internal.KtlintCommandLine.parallel$default(KtlintCommandLine.kt:536)
at com.pinterest.ktlint.internal.KtlintCommandLine.lintFiles(KtlintCommandLine.kt:283)
at com.pinterest.ktlint.internal.KtlintCommandLine.run(KtlintCommandLine.kt:235)
at com.pinterest.ktlint.Main.main(Main.kt:31)
Caused by: java.lang.Error: Internal error in diktat application
at org.cqfn.diktat.ruleset.rules.DiktatRule.visit(DiktatRule.kt:74)
at org.cqfn.diktat.ruleset.rules.OrderedRuleSet$Companion$OrderedRule.visit(OrderedRuleSet.kt:92)
at com.pinterest.ktlint.core.KtLint$format$1.invoke(KtLint.kt:251)
at com.pinterest.ktlint.core.KtLint$format$1.invoke(KtLint.kt:244)
at com.pinterest.ktlint.core.internal.VisitorProvider$sequentialVisitor$1$1$1$1.invoke(VisitorProvider.kt:123)
at com.pinterest.ktlint.core.internal.VisitorProvider$sequentialVisitor$1$1$1$1.invoke(VisitorProvider.kt:123)
at com.pinterest.ktlint.core.ast.PackageKt.visit(package.kt:236)
at com.pinterest.ktlint.core.ast.PackageKt.visit(package.kt:237)
at com.pinterest.ktlint.core.internal.VisitorProvider$sequentialVisitor$1.invoke(VisitorProvider.kt:123)
at com.pinterest.ktlint.core.internal.VisitorProvider$sequentialVisitor$1.invoke(VisitorProvider.kt:115)
at com.pinterest.ktlint.core.KtLint.format(KtLint.kt:244)
at com.pinterest.ktlint.internal.FileUtilsKt.formatFile(FileUtils.kt:202)
at com.pinterest.ktlint.internal.KtlintCommandLine.process(KtlintCommandLine.kt:355)
at com.pinterest.ktlint.internal.KtlintCommandLine.access$process(KtlintCommandLine.kt:48)
at com.pinterest.ktlint.internal.KtlintCommandLine$lintFiles$3.invoke$lambda-1(KtlintCommandLine.kt:274)
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.AssertionError: Assertion failed: anchorBefore == null || anchorBefore.getTreeParent() == parent
at org.jetbrains.kotlin.com.intellij.openapi.diagnostic.DefaultLogger.error(DefaultLogger.java:57)
at org.jetbrains.kotlin.com.intellij.openapi.diagnostic.Logger.error(Logger.java:187)
at org.jetbrains.kotlin.com.intellij.openapi.diagnostic.Logger.assertTrue(Logger.java:201)
at org.jetbrains.kotlin.com.intellij.psi.impl.source.tree.CompositeElement.addChild(CompositeElement.java:571)
at org.cqfn.diktat.ruleset.rules.chapter2.kdoc.KdocMethods$handleParamCheck$2.invoke(KdocMethods.kt:350)
at org.cqfn.diktat.ruleset.rules.chapter2.kdoc.KdocMethods$handleParamCheck$2.invoke(KdocMethods.kt:225)
at org.cqfn.diktat.ruleset.constants.Warnings.warnAndFix(Warnings.kt:267)
at org.cqfn.diktat.ruleset.constants.Warnings.warnAndFix$default(Warnings.kt:209)
at org.cqfn.diktat.ruleset.rules.chapter2.kdoc.KdocMethods.handleParamCheck(KdocMethods.kt:225)
at org.cqfn.diktat.ruleset.rules.chapter2.kdoc.KdocMethods.checkSignatureDescription(KdocMethods.kt:128)
at org.cqfn.diktat.ruleset.rules.chapter2.kdoc.KdocMethods.logic(KdocMethods.kt:93)
at org.cqfn.diktat.ruleset.rules.DiktatRule.visit(DiktatRule.kt:63)
... 18 more
Caused by: java.lang.Throwable: Assertion failed: anchorBefore == null || anchorBefore.getTreeParent() == parent
... 28 more
on code like:
/**
* @property value current cell value
* @property validator callback that validates the value
* @property onValueChange callback invoked on [value] change
* @return [Cell] for height
*/
fun heightCell(
value: String,
validator: ((String) -> Boolean)? = null,
onValueChange: (String) -> Unit,
) = Cell(value, R.drawable.height, "height", validator, onValueChange)
Expected behavior
Either replace @property with @param or message like that:
[KDOC_WITHOUT_PARAM_TAG] all methods which take arguments should have @param tags in KDoc: heightCell (value, validator, onValueChange) (diktat-ruleset:kdoc-methods)
Observed behavior
Exception that leads to diktat crush
Reproducer
/**
* @property value
* @return Unit
*/
fun foo(value: String) = Unit
Environment information
- diktat version:
1.2.5 - build tool (maven/gradle):
gradle - how is diktat run (CLI, plugin, etc.):
diktat-gradle-plugin - kotlin version:
1.8.20 - operating system:
macOS - link to a project (if your project is public): https://github.com/IoMT-LVK/iomt-android
I have seen similar problems when investigating/resolving https://github.com/pinterest/ktlint/issues/1981.
I have seen similar problems when investigating/resolving pinterest/ktlint#1981.
Thank you, this is important, we will have a look
Created a branch with tests which reproduce the issue: https://github.com/saveourtool/diktat/tree/bugfix/error-kdoc-fixing%231650
Looks like @property leads to invalid detecting a prev node before @return or @throw