Class RulesDefinition.Rule

  • Direct Known Subclasses:
    DefaultRule
    Enclosing interface:
    RulesDefinition

    @Immutable
    public abstract static class RulesDefinition.Rule
    extends java.lang.Object
    • Constructor Detail

      • Rule

        public Rule()
    • Method Detail

      • pluginKey

        @CheckForNull
        public abstract java.lang.String pluginKey()
        Since:
        6.6 the plugin the rule was declared in
      • key

        public abstract java.lang.String key()
      • name

        public abstract java.lang.String name()
      • scope

        public abstract RuleScope scope()
        Since:
        7.1
      • severity

        public abstract java.lang.String severity()
      • htmlDescription

        @CheckForNull
        public abstract java.lang.String htmlDescription()
      • markdownDescription

        @CheckForNull
        public abstract java.lang.String markdownDescription()
      • template

        public abstract boolean template()
      • activatedByDefault

        public abstract boolean activatedByDefault()
        Should this rule be enabled by default. For example in SonarLint standalone.
        Since:
        6.0
      • debtSubCharacteristic

        @CheckForNull
        @Deprecated
        public abstract java.lang.String debtSubCharacteristic()
        Deprecated.
        in 5.5. SQALE Quality Model is replaced by SonarQube Quality Model. null is always returned. See https://jira.sonarsource.com/browse/MMF-184
        See Also:
        type()
      • effortToFixDescription

        @Deprecated
        @CheckForNull
        public abstract java.lang.String effortToFixDescription()
        Deprecated.
        since 5.5, replaced by gapDescription()
      • gapDescription

        @CheckForNull
        public abstract java.lang.String gapDescription()
      • tags

        public abstract java.util.Set<java.lang.String> tags()
      • securityStandards

        public abstract java.util.Set<java.lang.String> securityStandards()
      • deprecatedRuleKeys

        public abstract java.util.Set<RuleKey> deprecatedRuleKeys()
        Deprecated rules keys for this rule.

        If you want to rename the key of a rule or change its repository or both, register the rule's previous repository and key (see addDeprecatedRuleKey). This will allow SonarQube to support "issue re-keying" for this rule.

        If the repository and/or key of an existing rule is changed without declaring deprecated keys, existing issues for this rule, created under the rule's previous repository and/or key, will be closed and new ones will be created under the issue's new repository and/or key.

        Several deprecated keys can be provided to allow SonarQube to support several key (and/or repository) changes across multiple versions of a plugin.
        Consider the following use case scenario:

        • Rule Foo:A is defined in version 1 of the plugin
           NewRepository newRepository = context.createRepository("Foo", "my_language");
           NewRule r = newRepository.createRule("A");
           
        • Rule's key is renamed to B in version 2 of the plugin
           NewRepository newRepository = context.createRepository("Foo", "my_language");
           NewRule r = newRepository.createRule("B")
             .addDeprecatedRuleKey("Foo", "A");
           
        • All rules, including Foo:B, are moved to a new repository Bar in version 3 of the plugin
           NewRepository newRepository = context.createRepository("Bar", "my_language");
           NewRule r = newRepository.createRule("B")
             .addDeprecatedRuleKey("Foo", "A")
             .addDeprecatedRuleKey("Bar", "B");
           
        With all deprecated keys defined in version 3 of the plugin, SonarQube will be able to support "issue re-keying" for this rule in all cases:
        • plugin upgrade from v1 to v2,
        • plugin upgrade from v2 to v3
        • AND plugin upgrade from v1 to v3

        Finally, repository/key pairs must be unique across all rules and their deprecated keys.
        This implies that no rule can use the same repository and key as the deprecated key of another rule. This uniqueness applies across plugins.

        Note that, even though this method returns a Set, its elements are ordered according to calls to addDeprecatedRuleKey. This allows to describe the history of a rule's repositories and keys over time. Oldest repository and key must be specified first.

        Since:
        7.1
        See Also:
        RulesDefinition.NewRule.addDeprecatedRuleKey(String, String)