Sonar anomalie plugin Taglist

De EjnTricks

L'utilisation du plugin Taglist permet de générer des rapports en fonction de tag dans le code source, comme les TODO ou FIXME. Lors d'une analyse du code, déclenchée par Jenkins par exemple, le message d'erreur peut être visualisé dans la trace d'exécution:

[INFO] [00:36:02.522] Execute decorators...
[INFO] ------------------------------------------------------------------------
[ERROR] FATAL ERROR
[INFO] ------------------------------------------------------------------------
[INFO] Fail to decorate 'fr.ejn.tutorial.ws.Parameter'
[INFO] ------------------------------------------------------------------------
[INFO] Trace
org.sonar.api.utils.SonarException: Fail to decorate 'fr.ejn.tutorial.ws.Parameter'
	at org.sonar.batch.phases.DecoratorsExecutor.executeDecorator(DecoratorsExecutor.java:84)
	at org.sonar.batch.phases.DecoratorsExecutor.decorateResource(DecoratorsExecutor.java:70)
	at org.sonar.batch.phases.DecoratorsExecutor.decorateResource(DecoratorsExecutor.java:63)
	at org.sonar.batch.phases.DecoratorsExecutor.decorateResource(DecoratorsExecutor.java:63)
	at org.sonar.batch.phases.DecoratorsExecutor.execute(DecoratorsExecutor.java:55)
	at org.sonar.batch.phases.Phases.execute(Phases.java:94)
	at org.sonar.batch.bootstrap.ProjectModule.doStart(ProjectModule.java:143)
	at org.sonar.batch.bootstrap.Module.start(Module.java:83)
	at org.sonar.batch.bootstrap.BatchModule.analyze(BatchModule.java:111)
	at org.sonar.batch.bootstrap.BatchModule.doStart(BatchModule.java:101)
	at org.sonar.batch.bootstrap.Module.start(Module.java:83)
	at org.sonar.batch.bootstrap.BootstrapModule.doStart(BootstrapModule.java:102)
	at org.sonar.batch.bootstrap.Module.start(Module.java:83)
	at org.sonar.batch.Batch.execute(Batch.java:100)
	at org.sonar.maven.SonarMojo.executeBatch(SonarMojo.java:152)
	at org.sonar.maven.SonarMojo.execute(SonarMojo.java:142)
	at org.apache.maven.plugin.DefaultPluginManager.executeMojo(DefaultPluginManager.java:490)
	at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoals(DefaultLifecycleExecutor.java:694)
	at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeStandaloneGoal(DefaultLifecycleExecutor.java:569)
	at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoal(DefaultLifecycleExecutor.java:539)
	at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoalAndHandleFailures(DefaultLifecycleExecutor.java:387)
	at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeTaskSegments(DefaultLifecycleExecutor.java:284)
	at org.apache.maven.lifecycle.DefaultLifecycleExecutor.execute(DefaultLifecycleExecutor.java:180)
	at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:328)
	at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:138)
	at org.apache.maven.cli.MavenCli.main(MavenCli.java:362)
	at org.apache.maven.cli.compat.CompatibleMain.main(CompatibleMain.java:60)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at org.codehaus.classworlds.Launcher.launchEnhanced(Launcher.java:315)
	at org.codehaus.classworlds.Launcher.launch(Launcher.java:255)
	at org.codehaus.classworlds.Launcher.mainWithExitCode(Launcher.java:430)
	at org.codehaus.classworlds.Launcher.main(Launcher.java:375)
Caused by: java.lang.NullPointerException
	at java.util.TreeMap.getEntry(TreeMap.java:324)
	at java.util.TreeMap.get(TreeMap.java:255)
	at org.apache.commons.collections.bag.AbstractMapBag.add(AbstractMapBag.java:257)
	at org.sonar.api.measures.CountDistributionBuilder.add(CountDistributionBuilder.java:65)
	at org.sonar.api.measures.CountDistributionBuilder.add(CountDistributionBuilder.java:79)
	at org.sonar.plugins.taglist.ViolationsDecorator.saveFileMeasures(ViolationsDecorator.java:98)
	at org.sonar.plugins.taglist.ViolationsDecorator.decorate(ViolationsDecorator.java:76)
	at org.sonar.batch.phases.DecoratorsExecutor.executeDecorator(DecoratorsExecutor.java:79)
	... 34 more

Cette erreur et assez ancienne au niveau de Sonar mais peut avoir plusieurs origines. Mais dans le cadre de cet article, l'origine identifiée concerne l'écriture des tag TODO au sein du code, faisant l'objet du ticket http://jira.codehaus.org/browse/SONARPLUGINS-925.

Au niveau du code source, un tag TODO a été placé de la façon suivante:

	// TODO: To optimize

Tout le problème provient du caractère : qu'il faut supprimer.

	// TODO To optimize