Interface SonarRuntime
-
@ScannerSide @ServerSide @ComputeEngineSide @SonarLintSide @Immutable public interface SonarRuntime
Information about runtime environment.A usage for plugins is to benefit from new APIs while keeping backward-compatibility with previous versions of SonarQube or SonarLint.
Example: a plugin extension wants to use a new feature of API 6.1 without breaking compatibility with version 6.0 at runtime. This new feature would be enabled only in 6.1 and greater runtimes.
// Component provided by sonar-plugin-api // @since 6.0 public interface AnApi { // implicitly since 6.0 public void foo(); // @since 6.1 public void bar(); } // Plugin extension public class MyExtension { private final SonarRuntime sonarRuntime; private final AnApi api; public MyExtension(SonarRuntime sonarRuntime, AnApi api) { this.sonarRuntime = sonarRuntime; this.api = api; } public void doSomething() { // assume that minimal supported runtime is 6.0 api.foo(); if (sonarRuntime.getApiVersion().isGreaterThanOrEqual(Version.create(6, 1))) { api.bar(); } } }
Note that
Sensor
extensions can directly getSonarRuntime
throughSensorContext.runtime()
, without using constructor injection:public class MySensor implements Sensor { public void execute(SensorContext context) { if (context.runtime().getApiVersion().isGreaterThanOrEqual(Version.create(6, 1)) { context.newMethodIntroducedIn6_0(); } } }
The minimal supported version of plugin API is verified at runtime. As plugin is built with sonar-plugin-api 6.1, we assume that the plugin requires v6.1 or greater at runtime. For this reason the plugin must override the minimal supported version in the configuration of sonar-packaging-maven-plugin 1.16+:
<packaging>sonar-plugin</packaging> <dependencies> <dependency> <groupId>org.sonarsource.sonarqube</groupId> <artifactId>sonar-plugin-api</artifactId> <version>6.1</version> <scope>provided</scope> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.sonarsource.sonar-packaging-maven-plugin</groupId> <artifactId>sonar-packaging-maven-plugin</artifactId> <version>1.16</version> <extensions>true</extensions> <configuration> <!-- Override the default value 6.0 which is guessed from sonar-plugin-api dependency --> <sonarQubeMinVersion>6.0</sonarQubeMinVersion> </configuration> </plugin> </plugins> </build>
As this component was introduced in version 6.0, the pattern described above can't be exactly applied when plugin must support version 5.6 Long Term Support. In this case plugin should use
SonarQubeVersion
, for example throughPlugin.Context.getSonarQubeVersion()
orSensorContext.getSonarQubeVersion()
.Unit tests of plugin extensions can create instances of
SonarRuntime
viaorg.sonar.api.internal.SonarRuntimeImpl
.- Since:
- 6.0
-
-
Method Summary
All Methods Instance Methods Abstract Methods Modifier and Type Method Description Version
getApiVersion()
Version of API (sonar-plugin-api artifact) at runtime.SonarEdition
getEdition()
The SonarQube/SonarCloud edition being executed at runtime.SonarProduct
getProduct()
The product being executed at runtime.SonarQubeSide
getSonarQubeSide()
The SonarQube/SonarCloud stack being executed at runtime.
-
-
-
Method Detail
-
getApiVersion
Version getApiVersion()
Version of API (sonar-plugin-api artifact) at runtime. It can be helpful to call some API classes/methods without checking their availability at runtime by using reflection.
Since 6.3, the returned version includes the build number in the fourth field, for example"6.3.0.12345"
.
-
getProduct
SonarProduct getProduct()
The product being executed at runtime. It targets analysers so that they can implement different behaviours in SonarQube/SonarCloud and SonarLint.
-
getSonarQubeSide
SonarQubeSide getSonarQubeSide()
The SonarQube/SonarCloud stack being executed at runtime.- Throws:
java.lang.UnsupportedOperationException
- ifgetProduct()
is not equal toSonarProduct.SONARQUBE
-
getEdition
SonarEdition getEdition()
The SonarQube/SonarCloud edition being executed at runtime. Note that there is a specific edition for SonarCloud.- Throws:
java.lang.UnsupportedOperationException
- ifgetProduct()
is not equal toSonarProduct.SONARQUBE
- Since:
- 7.8
-
-