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()
      • educationPrincipleKeys

        public abstract java.util.Set<java.lang.String> educationPrincipleKeys()
        Since:
        9.8
      • htmlDescription

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

        @Deprecated(since="9.6",
                    forRemoval=true)
        @CheckForNull
        public abstract java.lang.String markdownDescription()
        Deprecated, for removal: This API element is subject to removal in a future version.
        use html format instead
      • 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
      • 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)