pinchbv / android-analyzer

Android Gradle plugin for faster Sonarqube integration in Android projects. Supports Detekt and Jacoco out of the box.
http://pinch.nl
GNU General Public License v3.0
91 stars 16 forks source link

IndexOutOfBoundsException from detekt #32

Open cee-dee opened 4 years ago

cee-dee commented 4 years ago

I've added android-analyzer to my Android Kotlin project. When running gradlew clean androidAnalyzer --stacktrace --info I get the following error:

> Task :app:sonarqube FAILED
:app:sonarqube (Thread[Daemon worker,5,main]) completed. Took 47.646 secs.
FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':app:sonarqube'.
> Wrong offset: 1434. Should be in range: [0, 1432]

Here's part of the stacktrace:

org.gradle.api.tasks.TaskExecutionException: Execution failed for task ':app:sonarqube'.
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$3.accept(ExecuteActionsTaskExecuter.java:151)
        at org.gradle.api.internal.tasks.execution.ExecuteActionsTaskExecuter$3.accept(ExecuteActionsTaskExecuter.java:148)
        at org.gradle.internal.Try$Failure.ifSuccessfulOrElse(Try.java:191)
[...]
Caused by: java.lang.IndexOutOfBoundsException: Wrong offset: 1434. Should be in range: [0, 1432]
        at org.jetbrains.kotlin.com.intellij.openapi.editor.impl.LineSet.findLineIndex(LineSet.java:178)
        at org.jetbrains.kotlin.com.intellij.openapi.editor.impl.DocumentImpl.getLineNumber(DocumentImpl.java:991)
        at org.jetbrains.kotlin.diagnostics.PsiDiagnosticUtils.offsetToLineAndColumn(PsiDiagnosticUtils.java:73)
        at io.gitlab.arturbosch.detekt.sonar.foundation.KotlinSyntax$processFile$1.invoke(KotlinSyntax.kt:24)
        at io.gitlab.arturbosch.detekt.sonar.foundation.KotlinSyntax$processFile$2.invoke(KotlinSyntax.kt:27)
        at io.gitlab.arturbosch.detekt.sonar.foundation.KotlinSyntax$processFile$3.invoke(KotlinSyntax.kt:51)
        at io.gitlab.arturbosch.detekt.sonar.foundation.KotlinSyntax$processFile$5.invoke(KotlinSyntax.kt:65)
        at io.gitlab.arturbosch.detekt.sonar.foundation.KotlinSyntax$processFile$5.invoke(KotlinSyntax.kt:15)
        at io.gitlab.arturbosch.detekt.sonar.foundation.KotlinSyntax.visitTokens(KotlinSyntax.kt:80)
        at io.gitlab.arturbosch.detekt.sonar.foundation.KotlinSyntax.visitTokens(KotlinSyntax.kt:81)
        at io.gitlab.arturbosch.detekt.sonar.foundation.KotlinSyntax.visitTokens(KotlinSyntax.kt:81)
        at io.gitlab.arturbosch.detekt.sonar.foundation.KotlinSyntax.visitTokens(KotlinSyntax.kt:81)
        at io.gitlab.arturbosch.detekt.sonar.foundation.KotlinSyntax.visitTokens(KotlinSyntax.kt:81)
        at io.gitlab.arturbosch.detekt.sonar.foundation.KotlinSyntax.visitTokens(KotlinSyntax.kt:81)
        at io.gitlab.arturbosch.detekt.sonar.foundation.KotlinSyntax.visitTokens(KotlinSyntax.kt:81)
        at io.gitlab.arturbosch.detekt.sonar.foundation.KotlinSyntax.visitTokens(KotlinSyntax.kt:81)
        at io.gitlab.arturbosch.detekt.sonar.foundation.KotlinSyntax.processFile(KotlinSyntax.kt:63)
        at io.gitlab.arturbosch.detekt.sonar.sensor.FileProcessor.run(FileProcessor.kt:23)
        at io.gitlab.arturbosch.detekt.sonar.sensor.DetektSensor.execute(DetektSensor.kt:27)
        at org.sonar.scanner.sensor.AbstractSensorWrapper.analyse(AbstractSensorWrapper.java:48)
        at org.sonar.scanner.sensor.ModuleSensorsExecutor.execute(ModuleSensorsExecutor.java:85)

In my analysis of the problem I came across https://github.com/detekt/sonar-kotlin/issues/102, where the pull request https://github.com/detekt/sonar-kotlin/pull/104/commits is linked. Is it possible that this fix is not included in android-analyzer yet?

AndroideRob-zz commented 4 years ago

Thanks for pointing out the issue, as well as investigating it. I am going to make a release with updated dependencies, it should fix your issue.

cee-dee commented 4 years ago

Thank you very much!

cee-dee commented 4 years ago

When do you think you'll manage to do the update?

cdekok commented 3 years ago

I got a similar exception but with a slightly different trace.

The original exception message was: java.lang.IndexOutOfBoundsException: Wrong offset: 4383. Should be in range: [0, 4378]
Running detekt '1.15.0' on Java '14.0.2+12' on OS 'Mac OS X'
If the exception message does not help, please feel free to create an issue on our GitHub page.
        at io.gitlab.arturbosch.detekt.core.AnalyzerKt.throwIllegalStateException(Analyzer.kt:151)
        at io.gitlab.arturbosch.detekt.core.AnalyzerKt.access$throwIllegalStateException(Analyzer.kt:1)
        at io.gitlab.arturbosch.detekt.core.Analyzer$runAsync$tasks$1$2.invoke(Analyzer.kt:90)
        at io.gitlab.arturbosch.detekt.core.Analyzer$runAsync$tasks$1$2.invoke(Analyzer.kt:31)
        at io.gitlab.arturbosch.detekt.core.TaskPoolKt$sam$java_util_function_Function$0.apply(TaskPool.kt)
Caused by: java.util.concurrent.CompletionException: java.lang.IndexOutOfBoundsException: Wrong offset: 4383. Should be in range: [0, 4378]
Caused by: java.lang.IndexOutOfBoundsException: Wrong offset: 4383. Should be in range: [0, 4378]
        at org.jetbrains.kotlin.com.intellij.openapi.editor.impl.LineSet.findLineIndex(LineSet.java:178)
        at org.jetbrains.kotlin.com.intellij.openapi.editor.impl.DocumentImpl.getLineNumber(DocumentImpl.java:991)
        at org.jetbrains.kotlin.diagnostics.PsiDiagnosticUtils.offsetToLineAndColumn(PsiDiagnosticUtils.java:73)
        at org.jetbrains.kotlin.diagnostics.DiagnosticUtils.getLineAndColumnInPsiFile(DiagnosticUtils.java:84)
        at io.github.detekt.metrics.LinesOfCodeKt.line(LinesOfCode.kt:48)
        at io.github.detekt.metrics.LinesOfCodeKt$linesOfCode$1.invoke(LinesOfCode.kt:44)
        at io.github.detekt.metrics.LinesOfCodeKt$linesOfCode$1.invoke(LinesOfCode.kt)
        at kotlin.sequences.TransformingSequence$iterator$1.next(Sequences.kt:210)
        at kotlin.sequences.DistinctIterator.computeNext(Sequences.kt:571)
        at kotlin.collections.AbstractIterator.tryToComputeNext(AbstractIterator.kt:42)
        at kotlin.collections.AbstractIterator.hasNext(AbstractIterator.kt:29)
        at kotlin.sequences.SequencesKt___SequencesKt.count(_Sequences.kt:1191)
        at io.github.detekt.metrics.LinesOfCodeKt.linesOfCode(LinesOfCode.kt:46)
        at io.github.detekt.metrics.LinesOfCodeKt.linesOfCode$default(LinesOfCode.kt:42)
        at io.gitlab.arturbosch.detekt.rules.complexity.LongMethod.visitNamedFunction(LongMethod.kt:74)
        at org.jetbrains.kotlin.psi.KtVisitorVoid.visitNamedFunction(KtVisitorVoid.java:483)
        at org.jetbrains.kotlin.psi.KtVisitorVoid.visitNamedFunction(KtVisitorVoid.java:21)
        at org.jetbrains.kotlin.psi.KtNamedFunction.accept(KtNamedFunction.java:50)
        at org.jetbrains.kotlin.psi.KtElementImplStub.accept(KtElementImplStub.java:59)
        at org.jetbrains.kotlin.com.intellij.psi.impl.source.tree.SharedImplUtil.acceptChildren(SharedImplUtil.java:200)
        at org.jetbrains.kotlin.com.intellij.psi.impl.source.PsiFileImpl.acceptChildren(PsiFileImpl.java:733)
        at org.jetbrains.kotlin.psi.KtTreeVisitorVoid.visitElement(KtTreeVisitorVoid.java:25)
        at org.jetbrains.kotlin.com.intellij.psi.PsiElementVisitor.visitFile(PsiElementVisitor.java:34)
        at org.jetbrains.kotlin.psi.KtVisitor.visitKtFile(KtVisitor.java:73)
        at org.jetbrains.kotlin.psi.KtVisitorVoid.visitKtFile(KtVisitorVoid.java:69)
        at org.jetbrains.kotlin.psi.KtVisitorVoid.visitKtFile(KtVisitorVoid.java:513)
        at org.jetbrains.kotlin.psi.KtVisitorVoid.visitKtFile(KtVisitorVoid.java:21)
        at org.jetbrains.kotlin.psi.KtFile.accept(KtFile.kt:242)
        at org.jetbrains.kotlin.psi.KtFile.accept(KtFile.kt:229)
        at io.gitlab.arturbosch.detekt.api.internal.BaseRule.visit(BaseRule.kt:61)
        at io.gitlab.arturbosch.detekt.api.internal.BaseRule.visitFile(BaseRule.kt:51)
        at io.gitlab.arturbosch.detekt.core.Analyzer$analyze$8.invoke(Analyzer.kt:118)
        at io.gitlab.arturbosch.detekt.core.Analyzer.analyze(Analyzer.kt:128)
        at io.gitlab.arturbosch.detekt.core.Analyzer.access$analyze(Analyzer.kt:31)
        at io.gitlab.arturbosch.detekt.core.Analyzer$runAsync$$inlined$map$lambda$1.invoke(Analyzer.kt:87)
        at io.gitlab.arturbosch.detekt.core.Analyzer$runAsync$$inlined$map$lambda$1.invoke(Analyzer.kt:31)
        at io.gitlab.arturbosch.detekt.core.TaskPoolKt$task$1.get(TaskPool.kt:13)