Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Code Block
titlepom.xml
langxml
<artifactId>sonar-foo-plugin</artifactId>
<packaging>sonar-plugin</packaging>
<build>
  <plugins>
    <plugin>
      <groupId>org.codehaus.sonar</groupId>
      <artifactId>sonar-packaging-maven-plugin</artifactId>
      <version>1.4<7</version>
      <extensions>true</extensions>
      <configuration>
        <pluginClass>com.mycompany.sonar.MyPlugin</pluginClass>
      </configuration>
    </plugin>
  </plugins>
</build>

The sonar-plugin packaging accepts advanced parameters.

Extension Points

Here are the available extension points An extension point is a point in the Sonar plugin API. Please note that partial implementation of these extensions are available in the API as well. See all known sub-interfaces and implementing classes of org.sonar.api.Extension to get an exhaustive list.

Batch Side

What

Since

Description

org.sonar.api.batch.CpdMapping

1.10

CPD definition to detect duplicated lines on a new language

org.sonar.api.batch.Decorator

1.10

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.resources.Language

1.10

Define a new language.

org.sonar.api.batch.maven.MavenPluginHandler

1.10

Define a Maven2 plugin to execute before analyzing the project.

org.sonar.api.measures.Metrics

1.10

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.batch.PostJob

1.10

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

org.sonar.api.batch.Purge

1.11

Job to delete data from database.

org.sonar.api.batch.ResourceFilter

1.12

enables to ignore certain resources. The only implementations is the exclusion pattern management. (ExcludedResourceFilter in the core plugin).

org.sonar.api.batch.Sensor

1.10

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

org.sonar.api.rules.ViolationFilter

1.12

Enables to ignore violations. Has a very simple interface: public boolean isIgnored(Violation violation). A NoSonarFilter draft has been added to the Squid plugin.

org.sonar.api.batch.Initializer

 2.6

Batch task executed before all other tasks (sensors, decorators, post-jobs)

org.sonar.api.batch.FileFilter

 2.3

Filter to exclude some files from analysis

org.sonar.api.batch.events.*

2.8

Handle batch lifecycle events (sensor is started, stopped, ...)

org.sonar.api.batch.bootstrap.ProjectBuilder

2.9

Change project structure before analysis

Server Side

What

Since

Description

org.sonar.api.charts.Chart

1.10

Image generated by JFreeChart.

org.sonar.api.web.CodeColorizerFormat

1.12

Extend the library sonar-colorizer to support new languages. By default only Java sources are colorized in SonarQube.

org.sonar.api.web.Footer

1.10

Static HTML footer displayed in all pages.

org.sonar.api.resources.Language

1.10

Define a new language.

org.sonar.api.web.GwtPage

1.11

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.web.ResourceViewer

1.10

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

1.11

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

org.sonar.api.web.RubyRailsWebservice

1.11

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

org.sonar.api.web.RubyRailsWidget

1.11

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

org.sonar.api.rules.RuleRepository

2.3

Define a new repository of rules, i.e. a list of coding rules to publish into the global referential

org.sonar.api.profiles.ProfileDefinition

2.3

Programmatically define a Quality profile

org.sonar.api.profiles.ProfileImporter

2.3

Import a Quality profile, generally used when end-users create a profile by uploading a file

org.sonar.api.profiles.ProfileExporter

2.3

Export a Quality profile in a specific format, for example Checkstyle configuration format

org.sonar.api.qualitymodel.ModelDefinition

2.3

Define a new Quality model, like SQALE

org.sonar.api.security.LoginPasswordAuthenticator

1.12

Delegates authentication of users to external system

org.sonar.api.platform.ServerStartHandler

 2.2

Handle server startup notification

org.sonar.api.platform.ServerStoptHandler

 2.2

Handle server shutdown notification

org.sonar.api.notifications.NotificationChannel

2.10

Channel to publish notifications. An example is the Email channel.

org.sonar.api.notifications.NotificationDispatcher

2.10

Provides logic to determine which users are interested in receiving notification. Example: notify me when when someone changes review assigned to me or created by me.

application where plugin code can be invoked, such as webapp page or code analyzer. Extension points are generally interfaces that can be implemented by plugins. Implementations have to be declared in the method org.sonar.api.SonarPlugin#getExtensions() and are then injected in the IoC container.

The extension points are listed and documented in the Javadoc. See http://docs.sonarsource.org/latest/apidocs/index.html?org/sonar/api/Extension.html.

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.

...