Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 7 Next »

Extension points

Here is list of extension points available in the sonar plugin API. Please note that partial implementation of those extensions are available in the api as well. Check the Javadoc for more information.

org.sonar.api.charts.Chart

Image generated by JFreeChart.

org.sonar.api.batch.CpdMapping

CPD definition to detect duplicated lines on a new language

org.sonar.api.batch.Decorator

Used to decorate resources, i.e. calculate measures from other measures. Example : the number of lines of code of a package is the sum of the lines of its classes.

org.sonar.api.web.Footer

Static HTML footer displayed in all pages.

org.sonar.api.resources.Language

Define a new language.

org.sonar.api.batch.maven.MavenPluginHandler

Define a Maven2 plugin to execute before analyzing the project.

org.sonar.api.measures.Metrics

List new Metrics. A metric is an instance of org.sonar.api.measure.Metric. It can be quantitative (lines of code, number of rule violations) or qualitative (code coverage, complexity by class, rules compliance). As a rule, a metric is used to store a number but it can also be used to store a text field with list of key/value pairs, an XML or even binary data.

org.sonar.api.web.GwtPage

Add a page, linked from the left sidebar. The page is implemented as a GWT component. GWT RPC/servlets are not supported.

org.sonar.api.batch.PostJob

Post-jobs are tasks executed at the end of project analysis. Examples : purge database, generate report, send emails, ...

org.sonar.api.batch.Purge

Job to delete data from database.

org.sonar.api.web.ResourceViewer

New view when displaying source code. It is used to add a new tab to the source viewer along with "Violations", "Sources", "Coverage", ... The new tab is implemented as a GWT component.

org.sonar.api.web.RubyRailsPage

Add a page, linked from the left sidebar. The page is implemented as a JRuby on Rails view. 

org.sonar.api.web.RubyRailsWebservice

Experimental. Used to define new web services, written in JRuby on Rails. 

org.sonar.api.web.RubyRailsWidget

New widget in project dashboards. It is implements as a JRuby on Rails template.

org.sonar.api.rules.RulesRepository

This extension is used to define a new repository of rules, i.e. a list of coding rules to publish into the global rules referential. 

org.sonar.api.batch.Sensor

Analyze project. It creates resources (classes, packages, ...) and measures. It can make requests on other systems. See below.

org.sonar.api.batch.SquidSearch

Access Sonar Squid data from Sensors. Sonar Squid is the internal code analyzer.

Sensor or Decorator ?

There are two extensions that enables to save measures : Sensor and Decorator. A common problem when writing a plugin is to decide which one to use.

Sensor

A Sensor is invoked once during the analysis of a project. The sensor can invoke a maven plugin, parse a flat file, connect to a web server... For example the Cobertura Sensor invokes the Codehaus Cobertura MOJO. Then the generated XML file is parsed and used to save the first-level of measures on resources (project, package or class).
A sensor has can access and save measures on the whole tree of resources. Sensor are generally used to add measure at the lowest level of the resource tree.

Decorator

Decorators are triggered once all sensors have completed. Their decorate method is called on every resource of a certain level bottom up. Decorators can load (SELECT) and save (INSERT) measures. The call is contextual, i.e it is only possible to access the resource and its children.
Decorators are generally used either to consolidate at higher levels measures that have been added by Sensors at the lowest level.

  • No labels