Duplicate Key error org.sonar.api.config.PropertyDefinition-sonar.typescript.file.suffixes

Hi Everyone,
I would like to use SonarLint in VSCode in connected mode but I experience some issues, analysis doesn’t work on JS and TS files, database seems to be correctly loaded I noticed 2 errors in the output logs :

  • Duplicate Keys not allowed. Duplicate for ‘org.sonar.api.config.PropertyDefinition-sonar.typescript.file.suffixes’
  • The field ‘Max’ does not exist or is not annotated with @RuleProperty in the class org.sonar.javascript.checks.TooManyLinesInFileCheck
  • Notification errors : Failed to get notifications: 404, {“errors”:[{“msg”:“Unknown url : /api/developers/search_events”}]}

Context :

  • Operating system: MacOS arm-64 (Apple Silicon Macs)
  • SonarLint plugin version: v3.7.0
  • Connected mode used with SonarQube : Community Edition - Version 7.9.6 (build 41879)

Duplicate Key stack trace error :

[Error - 10:26:00.112] Error loading components for plugin 'typescript'
[Error - 10:26:00.112] java.lang.IllegalStateException: Unable to register extension org.sonar.api.config.PropertyDefinition from plugin 'typescript'
	at org.sonarsource.sonarlint.core.plugin.commons.pico.ComponentContainer.addExtension(ComponentContainer.java:227)
	at org.sonarsource.sonarlint.core.plugin.commons.ExtensionInstaller.loadExtensions(ExtensionInstaller.java:64)
	at org.sonarsource.sonarlint.core.plugin.commons.ExtensionInstaller.install(ExtensionInstaller.java:53)
	at org.sonarsource.sonarlint.core.analysis.container.global.AnalysisExtensionInstaller.install(AnalysisExtensionInstaller.java:54)
	at org.sonarsource.sonarlint.core.analysis.container.analysis.AnalysisContainer.addPluginExtensions(AnalysisContainer.java:114)
	at org.sonarsource.sonarlint.core.analysis.container.analysis.AnalysisContainer.doBeforeStart(AnalysisContainer.java:63)
	at org.sonarsource.sonarlint.core.plugin.commons.pico.ComponentContainer.startComponents(ComponentContainer.java:117)
	at org.sonarsource.sonarlint.core.plugin.commons.pico.ComponentContainer.execute(ComponentContainer.java:104)
	at org.sonarsource.sonarlint.core.analysis.container.module.ModuleContainer.analyze(ModuleContainer.java:71)
	at org.sonarsource.sonarlint.core.analysis.command.AnalyzeCommand.execute(AnalyzeCommand.java:58)
	at org.sonarsource.sonarlint.core.analysis.command.AnalyzeCommand.execute(AnalyzeCommand.java:32)
	at org.sonarsource.sonarlint.core.analysis.AnalysisEngine$AsyncCommand.execute(AnalysisEngine.java:152)
	at org.sonarsource.sonarlint.core.analysis.AnalysisEngine.executeQueuedCommands(AnalysisEngine.java:70)
	at java.base/java.lang.Thread.run(Unknown Source)
Caused by: org.sonarsource.sonarlint.shaded.org.picocontainer.PicoCompositionException: Duplicate Keys not allowed. Duplicate for 'org.sonar.api.config.PropertyDefinition-sonar.typescript.file.suffixes'
	at org.sonarsource.sonarlint.shaded.org.picocontainer.DefaultPicoContainer.addAdapterInternal(DefaultPicoContainer.java:438)
	at org.sonarsource.sonarlint.shaded.org.picocontainer.DefaultPicoContainer.addAdapter(DefaultPicoContainer.java:459)
	at org.sonarsource.sonarlint.shaded.org.picocontainer.DefaultPicoContainer.addComponent(DefaultPicoContainer.java:556)
	at org.sonarsource.sonarlint.shaded.org.picocontainer.DefaultPicoContainer.access$300(DefaultPicoContainer.java:84)
	at org.sonarsource.sonarlint.shaded.org.picocontainer.DefaultPicoContainer$AsPropertiesPicoContainer.addComponent(DefaultPicoContainer.java:1149)
	at org.sonarsource.sonarlint.core.plugin.commons.pico.ComponentContainer.addExtension(ComponentContainer.java:225)
	... 13 more

Max field error :

Caused by: java.lang.IllegalStateException: Unable to load component class org.sonar.plugins.javascript.eslint.TypeScriptChecks
	at org.sonarsource.sonarlint.core.plugin.commons.pico.ComponentContainer$ExtendedDefaultPicoContainer.getComponent(ComponentContainer.java:57)
	at org.sonarsource.sonarlint.shaded.org.picocontainer.DefaultPicoContainer.getComponent(DefaultPicoContainer.java:632)
	at org.sonarsource.sonarlint.shaded.org.picocontainer.parameters.BasicComponentParameter$1.resolveInstance(BasicComponentParameter.java:118)
	at org.sonarsource.sonarlint.shaded.org.picocontainer.parameters.ComponentParameter$1.resolveInstance(ComponentParameter.java:136)
	at org.sonarsource.sonarlint.shaded.org.picocontainer.injectors.SingleMemberInjector.getParameter(SingleMemberInjector.java:78)
	at org.sonarsource.sonarlint.shaded.org.picocontainer.injectors.ConstructorInjector$CtorAndAdapters.getParameterArguments(ConstructorInjector.java:309)
	at org.sonarsource.sonarlint.shaded.org.picocontainer.injectors.ConstructorInjector$1.run(ConstructorInjector.java:335)
	at org.sonarsource.sonarlint.shaded.org.picocontainer.injectors.AbstractInjector$ThreadLocalCyclicDependencyGuard.observe(AbstractInjector.java:270)
	at org.sonarsource.sonarlint.shaded.org.picocontainer.injectors.ConstructorInjector.getComponentInstance(ConstructorInjector.java:364)
	at org.sonarsource.sonarlint.shaded.org.picocontainer.injectors.AbstractInjectionFactory$LifecycleAdapter.getComponentInstance(AbstractInjectionFactory.java:56)
	at org.sonarsource.sonarlint.shaded.org.picocontainer.behaviors.AbstractBehavior.getComponentInstance(AbstractBehavior.java:64)
	at org.sonarsource.sonarlint.shaded.org.picocontainer.behaviors.Stored.getComponentInstance(Stored.java:91)
	at org.sonarsource.sonarlint.shaded.org.picocontainer.DefaultPicoContainer.getInstance(DefaultPicoContainer.java:699)
	at org.sonarsource.sonarlint.shaded.org.picocontainer.DefaultPicoContainer.getComponent(DefaultPicoContainer.java:647)
	at org.sonarsource.sonarlint.core.plugin.commons.pico.ComponentContainer$ExtendedDefaultPicoContainer.getComponent(ComponentContainer.java:55)
	... 27 more
Caused by: java.lang.IllegalStateException: The field 'Max' does not exist or is not annotated with @RuleProperty in the class org.sonar.javascript.checks.TooManyLinesInFileCheck
	at org.sonar.api.batch.rule.Checks.configureFields(Checks.java:170)
	at org.sonar.api.batch.rule.Checks.instantiate(Checks.java:154)
	at org.sonar.api.batch.rule.Checks.addAnnotatedChecks(Checks.java:128)
	at org.sonar.plugins.javascript.eslint.AbstractChecks.doAddChecks(AbstractChecks.java:58)
	at org.sonar.plugins.javascript.eslint.AbstractChecks.addChecks(AbstractChecks.java:51)
	at org.sonar.plugins.javascript.eslint.TypeScriptChecks.<init>(TypeScriptChecks.java:43)
	at org.sonar.plugins.javascript.eslint.TypeScriptChecks.<init>(TypeScriptChecks.java:38)
	at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
	at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
	at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Unknown Source)
	at java.base/java.lang.reflect.Constructor.newInstance(Unknown Source)
	at org.sonarsource.sonarlint.shaded.org.picocontainer.injectors.AbstractInjector.newInstance(AbstractInjector.java:145)
	at org.sonarsource.sonarlint.shaded.org.picocontainer.injectors.ConstructorInjector$1.run(ConstructorInjector.java:342)
	at org.sonarsource.sonarlint.shaded.org.picocontainer.injectors.AbstractInjector$ThreadLocalCyclicDependencyGuard.observe(AbstractInjector.java:270)
	at org.sonarsource.sonarlint.shaded.org.picocontainer.injectors.ConstructorInjector.getComponentInstance(ConstructorInjector.java:364)
	at org.sonarsource.sonarlint.shaded.org.picocontainer.injectors.AbstractInjectionFactory$LifecycleAdapter.getComponentInstance(AbstractInjectionFactory.java:56)
	at org.sonarsource.sonarlint.shaded.org.picocontainer.behaviors.AbstractBehavior.getComponentInstance(AbstractBehavior.java:64)
	at org.sonarsource.sonarlint.shaded.org.picocontainer.behaviors.Stored.getComponentInstance(Stored.java:91)
	at org.sonarsource.sonarlint.shaded.org.picocontainer.DefaultPicoContainer.getInstance(DefaultPicoContainer.java:699)
	at org.sonarsource.sonarlint.shaded.org.picocontainer.DefaultPicoContainer.getComponent(DefaultPicoContainer.java:647)
	at org.sonarsource.sonarlint.core.plugin.commons.pico.ComponentContainer$ExtendedDefaultPicoContainer.getComponent(ComponentContainer.java:55)
	... 41 more

I have attached the full logs, could you provide some guidance on how to debug that ? Don’t hesitate if you need more details.

sonarlint.log (22.9 KB)

Thanks in advance for your help :slight_smile:

Hi,

Your version is past EOL. You should upgrade to either the latest version or the current LTS at your earliest convenience. Your upgrade path is:

7.9.6 → 8.9.9 → 9.5 (last step optional)

You may find the Upgrade Guide and the LTS-to-LTS Upgrade Notes helpful. If you have questions about upgrading, feel free to open a new thread for that here.

If your error persists with connected mode after upgrade, please come back to us.

1 Like

Hi Colin,
Thanks for your reply we will try to update our SonarQube, meanwhile do you know if any older version of the vscode plugin would support our current version.

Also readme says that support version in connected mode section is 7.9+, maybe a small update should be made : GitHub - SonarSource/sonarlint-vscode: SonarLint for Visual Studio Code

Hello, thanks for the suggestion!

We usually make sure that SonarLint keeps compatibility with the last LTS (8.9) and at the previous one (7.9). However, in the particular case of TypeScript analysis, a recent change broke this compatibility - and only for TypeScript. We will update the documentation to reflect this.

I second @Colin’s suggestion about upgrading your SonarQube instance: the current LTS cycle is almost over, and SonarQube 9.x LTS should be released before the end of 2022. Following our current support policy, this means that the minimal supported SonarQube version will be bumped from 7.9 to 8.9 in a few months time.

Pending an upgrade of your SonarQube server, you can try to revert SonarLint to 3.4.1 - as far as I can tell, this is the last version in which analysis of TypeScript should work in connected mode with SonarQube 7.9.

1 Like