Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ForbiddenImport with reason fails with a ClassCastException #5103

Closed
Gama11 opened this issue Jul 19, 2022 · 6 comments
Closed

ForbiddenImport with reason fails with a ClassCastException #5103

Gama11 opened this issue Jul 19, 2022 · 6 comments
Labels

Comments

@Gama11
Copy link

Gama11 commented Jul 19, 2022

I was trying out the example config for the new reason feature from #4611 (linked in the 1.21.0 release notes):

style:
  ForbiddenImport:
    active: true
    imports:
      - value: 'org.junit.Test'
        reason: 'Do not use JUnit4. Replace with org.junit.jupiter.api.Test.'
detekt-cli.bat -c detekt.yml

It fails with the following:

Location: io.gitlab.arturbosch.detekt.rules.style.ForbiddenImport$imports$2.invoke(ForbiddenImport.kt:65)
The original exception message was: class java.util.LinkedHashMap cannot be cast to class java.lang.String (java.util.LinkedHashMap and java.lang.String are in module java.base of loader 'bootstrap')
Running detekt '1.21.0' on Java '16.0.1+9-24' on OS 'Windows 10'
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:163)
        at io.gitlab.arturbosch.detekt.core.AnalyzerKt.access$throwIllegalStateException(Analyzer.kt:1)
        at io.gitlab.arturbosch.detekt.core.Analyzer.runSync(Analyzer.kt:70)
        at io.gitlab.arturbosch.detekt.core.Analyzer.run(Analyzer.kt:52)
        at io.gitlab.arturbosch.detekt.core.tooling.Lifecycle$analyze$result$1.invoke(Lifecycle.kt:47)
        at io.gitlab.arturbosch.detekt.core.tooling.Lifecycle$analyze$result$1.invoke(Lifecycle.kt:44)
        at io.gitlab.arturbosch.detekt.core.util.PerformanceMonitor.measure(PerformanceMonitor.kt:42)
        at io.gitlab.arturbosch.detekt.core.tooling.Lifecycle$DefaultImpls.measure(Lifecycle.kt:34)
        at io.gitlab.arturbosch.detekt.core.tooling.Lifecycle$DefaultImpls.analyze(Lifecycle.kt:44)
        at io.gitlab.arturbosch.detekt.core.tooling.DefaultLifecycle.analyze(Lifecycle.kt:61)
        at io.gitlab.arturbosch.detekt.core.tooling.AnalysisFacade$runAnalysis$1.invoke(AnalysisFacade.kt:48)
        at io.gitlab.arturbosch.detekt.core.tooling.AnalysisFacade$runAnalysis$1.invoke(AnalysisFacade.kt:47)
        at io.gitlab.arturbosch.detekt.core.tooling.ProcessingSpecSettingsBridgeKt.withSettings(ProcessingSpecSettingsBridge.kt:26)
        at io.gitlab.arturbosch.detekt.core.tooling.AnalysisFacade.runAnalysis$detekt_core(AnalysisFacade.kt:47)
        at io.gitlab.arturbosch.detekt.core.tooling.AnalysisFacade.run(AnalysisFacade.kt:25)
        at io.gitlab.arturbosch.detekt.cli.runners.Runner.call(Runner.kt:33)
        at io.gitlab.arturbosch.detekt.cli.CliRunner.run(CliRunner.kt:33)
        at io.gitlab.arturbosch.detekt.cli.CliRunner.run(CliRunner.kt:15)
        at io.gitlab.arturbosch.detekt.cli.Main.main(Main.kt:19)
Caused by: java.lang.ClassCastException: class java.util.LinkedHashMap cannot be cast to class java.lang.String (java.util.LinkedHashMap and java.lang.String are in module java.base of loader 'bootstrap')
        at io.gitlab.arturbosch.detekt.rules.style.ForbiddenImport$imports$2.invoke(ForbiddenImport.kt:65)
        at io.gitlab.arturbosch.detekt.rules.style.ForbiddenImport$imports$2.invoke(ForbiddenImport.kt:36)
        at io.gitlab.arturbosch.detekt.api.TransformedConfigProperty.doGetValue(ConfigProperty.kt:192)
        at io.gitlab.arturbosch.detekt.api.MemoizedConfigProperty.getValue(ConfigProperty.kt:169)
        at io.gitlab.arturbosch.detekt.api.MemoizedConfigProperty.getValue(ConfigProperty.kt:165)
        at io.gitlab.arturbosch.detekt.rules.style.ForbiddenImport.getImports(ForbiddenImport.kt:36)
        at io.gitlab.arturbosch.detekt.rules.style.ForbiddenImport.visitImportDirective(ForbiddenImport.kt:47)
        at org.jetbrains.kotlin.psi.KtVisitorVoid.visitImportDirective(KtVisitorVoid.java:533)
        at org.jetbrains.kotlin.psi.KtVisitorVoid.visitImportDirective(KtVisitorVoid.java:21)
        at org.jetbrains.kotlin.psi.KtImportDirective.accept(KtImportDirective.java:44)
        at org.jetbrains.kotlin.psi.KtElementImplStub.accept(KtElementImplStub.java:49)
        at org.jetbrains.kotlin.com.intellij.psi.impl.PsiElementBase.acceptChildren(PsiElementBase.java:69)
        at org.jetbrains.kotlin.psi.KtTreeVisitorVoid.visitElement(KtTreeVisitorVoid.java:25)
        at org.jetbrains.kotlin.psi.KtVisitor.visitKtElement(KtVisitor.java:24)
        at org.jetbrains.kotlin.psi.KtVisitorVoid.visitKtElement(KtVisitorVoid.java:25)
        at org.jetbrains.kotlin.psi.KtVisitorVoid.visitKtElement(KtVisitorVoid.java:455)
        at org.jetbrains.kotlin.psi.KtVisitorVoid.visitKtElement(KtVisitorVoid.java:21)
        at org.jetbrains.kotlin.psi.KtVisitor.visitImportList(KtVisitor.java:90)
        at org.jetbrains.kotlin.psi.KtVisitorVoid.visitImportList(KtVisitorVoid.java:85)
        at org.jetbrains.kotlin.psi.KtVisitorVoid.visitImportList(KtVisitorVoid.java:539)
        at org.jetbrains.kotlin.psi.KtVisitorVoid.visitImportList(KtVisitorVoid.java:21)
        at org.jetbrains.kotlin.psi.KtImportList.accept(KtImportList.java:38)
        at org.jetbrains.kotlin.psi.KtElementImplStub.accept(KtElementImplStub.java:49)
        at org.jetbrains.kotlin.com.intellij.psi.impl.source.tree.SharedImplUtil.acceptChildren(SharedImplUtil.java:185)
        at org.jetbrains.kotlin.com.intellij.psi.impl.source.PsiFileImpl.acceptChildren(PsiFileImpl.java:754)
        at org.jetbrains.kotlin.psi.KtTreeVisitorVoid.visitElement(KtTreeVisitorVoid.java:25)
        at org.jetbrains.kotlin.com.intellij.psi.PsiElementVisitor.visitFile(PsiElementVisitor.java:35)
        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:521)
        at org.jetbrains.kotlin.psi.KtVisitorVoid.visitKtFile(KtVisitorVoid.java:21)
        at org.jetbrains.kotlin.psi.KtFile.accept(KtFile.kt:249)
        at org.jetbrains.kotlin.psi.KtFile.accept(KtFile.kt:236)
        at io.gitlab.arturbosch.detekt.api.BaseRule.visit(BaseRule.kt:56)
        at io.gitlab.arturbosch.detekt.api.BaseRule.visitFile(BaseRule.kt:46)
        at io.gitlab.arturbosch.detekt.core.Analyzer.analyze$executeRules(Analyzer.kt:122)
        at io.gitlab.arturbosch.detekt.core.Analyzer.analyze(Analyzer.kt:134)
        at io.gitlab.arturbosch.detekt.core.Analyzer.runSync(Analyzer.kt:69)
        ... 16 more

It works fine with the old style:

style:
  ForbiddenImport:
    active: true
    imports:
      - 'org.junit.Test'
@Gama11 Gama11 added the bug label Jul 19, 2022
@marschwar
Copy link
Contributor

Thank you for reporting this.

@BraisGabin
Copy link
Member

BraisGabin commented Jul 19, 2022

Which version of detekt are you using? If it's not main you can't use that yet... We need versiones documentation >_<.

Oh, I just saw the PR that you link. That just implements the option to support that. But we need to implement it for each rule. It's on 1.22.0 where you could do that: #4909

@Gama11
Copy link
Author

Gama11 commented Jul 19, 2022

Oh, I see... I guess I just misinterpreted the line in the release notes then, to me it sounded like this is something I can start using. :)

We now allow users and rule authors to specify a reason for every value in the config file - #4611

@marschwar
Copy link
Contributor

Thank you for reading the Release Notes - a lost Art 😉 and trying it out.
The feature will be part of 1.22.x. So stay tuned.

@cortinico
Copy link
Member

The feature will be part of 1.22.x. So stay tuned.

Should we clarify this in the release notes somehow?

@marschwar
Copy link
Contributor

We probably should have mentioned, that this only applies to rules that have been adapted to the new configuration option.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

4 participants