SonarLint cannot handle colon sign as ProjectKey (component name)

Please provide

  • Operating system: MacOS
  • SonarLint plugin version: 7.1.1.54565 (but problem is quite old, Im checking it from time to time since ~1-2 years)
  • Programming language you’re coding in: C++
  • Is connected mode used:
    • Connected to SonarCloud or SonarQube (and which version): SonarQube 9.6.1

And a thorough description of the problem / question:
SonarLint plugin cannot handle the “:” sign in component name & related fields, if I set in SonarLint properties ProjectKey as java-style project key like “com.project.example:my-solution” then the plugin cannot resolve correctly project. If ProjectKey is defined without “:” sign (ex. just my-solution), then synchronisation is working well.

With the colon sign I get following exception:

[SYNC] Synchronizing analyzer configuration for project 'com.project.example:my-solution'
Error updating the storage for connection 'My sonarqube'
org.sonarsource.sonarlint.core.serverapi.exception.NotFoundException: Error 404 on /api/settings/values.protobuf?component=com.project.example%3Amy-solution
	at org.sonarsource.sonarlint.core.serverapi.ServerApiHelper.handleError(ServerApiHelper.java:128)
	at org.sonarsource.sonarlint.core.serverapi.ServerApiHelper.get(ServerApiHelper.java:70)
	at org.sonarsource.sonarlint.core.serverapi.settings.SettingsApi.lambda$getProjectSettings$0(SettingsApi.java:49)
	at org.sonarsource.sonarlint.core.serverapi.ServerApiHelper.processTimed(ServerApiHelper.java:225)
	at org.sonarsource.sonarlint.core.serverapi.ServerApiHelper.consumeTimed(ServerApiHelper.java:250)
	at org.sonarsource.sonarlint.core.serverapi.settings.SettingsApi.getProjectSettings(SettingsApi.java:48)
	at org.sonarsource.sonarlint.core.serverconnection.LocalStorageSynchronizer.synchronizeAnalyzerConfig(LocalStorageSynchronizer.java:80)
	at org.sonarsource.sonarlint.core.serverconnection.LocalStorageSynchronizer.lambda$synchronize$0(LocalStorageSynchronizer.java:62)
	at java.base/java.util.stream.Collectors.lambda$uniqKeysMapAccumulator$1(Collectors.java:180)
	at java.base/java.util.stream.ReduceOps$3ReducingSink.accept(ReduceOps.java:169)
	at java.base/java.util.HashMap$KeySpliterator.forEachRemaining(HashMap.java:1707)
	at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:509)
	at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499)
	at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:921)
	at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
	at java.base/java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:682)
	at org.sonarsource.sonarlint.core.serverconnection.LocalStorageSynchronizer.synchronize(LocalStorageSynchronizer.java:62)
	at org.sonarsource.sonarlint.core.serverconnection.ServerConnection.sync(ServerConnection.java:131)
	at org.sonarsource.sonarlint.core.ConnectedSonarLintEngineImpl.sync(ConnectedSonarLintEngineImpl.java:291)
	at org.sonarlint.intellij.tasks.BindingStorageUpdateTask.tryUpdateProjectStorages(BindingStorageUpdateTask.java:174)
	at org.sonarlint.intellij.tasks.BindingStorageUpdateTask.updateProjectStorages(BindingStorageUpdateTask.java:136)
	at org.sonarlint.intellij.tasks.BindingStorageUpdateTask.run(BindingStorageUpdateTask.java:109)
	at org.sonarlint.intellij.tasks.BindingStorageUpdateTask$1.run(BindingStorageUpdateTask.java:85)
	at com.intellij.openapi.progress.impl.CoreProgressManager.startTask(CoreProgressManager.java:426)
	at com.intellij.openapi.progress.impl.ProgressManagerImpl.startTask(ProgressManagerImpl.java:114)
	at com.intellij.openapi.progress.impl.CoreProgressManager.lambda$runProcessWithProgressSynchronously$9(CoreProgressManager.java:510)
	at com.intellij.openapi.progress.impl.ProgressRunner.lambda$new$0(ProgressRunner.java:84)
	at com.intellij.openapi.progress.impl.ProgressRunner.lambda$submit$3(ProgressRunner.java:252)
	at com.intellij.openapi.progress.impl.CoreProgressManager.lambda$runProcess$2(CoreProgressManager.java:190)
	at com.intellij.openapi.progress.impl.CoreProgressManager.lambda$executeProcessUnderProgress$13(CoreProgressManager.java:592)
	at com.intellij.openapi.progress.impl.CoreProgressManager.registerIndicatorAndRun(CoreProgressManager.java:667)
	at com.intellij.openapi.progress.impl.CoreProgressManager.computeUnderProgress(CoreProgressManager.java:623)
	at com.intellij.openapi.progress.impl.CoreProgressManager.executeProcessUnderProgress(CoreProgressManager.java:591)
	at com.intellij.openapi.progress.impl.ProgressManagerImpl.executeProcessUnderProgress(ProgressManagerImpl.java:60)
	at com.intellij.openapi.progress.impl.CoreProgressManager.runProcess(CoreProgressManager.java:177)
	at com.intellij.openapi.progress.impl.ProgressRunner.lambda$submit$4(ProgressRunner.java:252)
	at java.base/java.util.concurrent.CompletableFuture$AsyncSupply.run(CompletableFuture.java:1768)
	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.util.concurrent.Executors$PrivilegedThreadFactory$1$1.run(Executors.java:702)
	at java.base/java.util.concurrent.Executors$PrivilegedThreadFactory$1$1.run(Executors.java:699)
	at java.base/java.security.AccessController.doPrivileged(AccessController.java:399)
	at java.base/java.util.concurrent.Executors$PrivilegedThreadFactory$1.run(Executors.java:699)
	at java.base/java.lang.Thread.run(Thread.java:833)

Hello @Divix55,

I am not able to reproduce the problem. The project key has to be the same as in your project on SonarQube, could you double check what is set on your project, in Project Information:

If needed there is an option to change the project key, in Project Settings > Update key

Hello Damien, thanks for fast reply.

Yes, the project key is the same as in Sonarqube, issue occur for multiple projects. Common point is always colon in Project Key. For testing purposes I changed for one project the Project Key in SonarQube and adapt configuration in SonarLint plugin and it works fine. Unfortunately I cannot change Project Key for all my projects as there is huge number of them from multiple domains and such name would be against company policy.

Maybe one important note: projects was created automatically with first analysis, and the Project Key was set via properties file.

Thanks.

Hi,

404 on /api/settings/values.protobuf?component=com.project.example%3Amy-solution

We can see in the error message that the project key is correctly URL encoded. Do you have any proxy between your IDE and SonarQube that could be misconfigured and doesn’t correctly rewrite URL encoded paths?
See for example: Apache reverse proxy encodes characters - Server Fault

You can check on SonarQube access.log to see what URL is really reaching the server.