]> source.dussan.org Git - sonarqube.git/blob
2f85575c37927798cb2162d61f0452045aa203fb
[sonarqube.git] /
1 /*
2  * SonarQube, open source software quality management tool.
3  * Copyright (C) 2008-2013 SonarSource
4  * mailto:contact AT sonarsource DOT com
5  *
6  * SonarQube is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU Lesser General Public
8  * License as published by the Free Software Foundation; either
9  * version 3 of the License, or (at your option) any later version.
10  *
11  * SonarQube is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14  * Lesser General Public License for more details.
15  *
16  * You should have received a copy of the GNU Lesser General Public License
17  * along with this program; if not, write to the Free Software Foundation,
18  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
19  */
20
21 package org.sonar.plugins.core.issue.ignore;
22
23 import com.google.common.collect.ImmutableList;
24 import org.sonar.api.CoreProperties;
25 import org.sonar.api.PropertyType;
26 import org.sonar.api.config.PropertyDefinition;
27 import org.sonar.api.config.PropertyFieldDefinition;
28 import org.sonar.api.resources.Qualifiers;
29
30 import java.util.List;
31
32 public final class IgnoreIssuesConfiguration {
33
34   public static final String SUB_CATEGORY_IGNORE_ISSUES = "issues";
35
36   public static final String EXCLUSION_KEY_PREFIX = "sonar.issue.ignore";
37   public static final String INCLUSION_KEY_PREFIX = "sonar.issue.enforce";
38
39   public static final String MULTICRITERIA_SUFFIX = ".multicriteria";
40   public static final String PATTERNS_MULTICRITERIA_EXCLUSION_KEY = EXCLUSION_KEY_PREFIX + MULTICRITERIA_SUFFIX;
41   public static final String PATTERNS_MULTICRITERIA_INCLUSION_KEY = INCLUSION_KEY_PREFIX + MULTICRITERIA_SUFFIX;
42   public static final String RESOURCE_KEY = "resourceKey";
43   private static final String PROPERTY_FILE_PATH_PATTERN = "File Path Pattern";
44   public static final String RULE_KEY = "ruleKey";
45   private static final String PROPERTY_RULE_KEY_PATTERN = "Rule Key Pattern";
46
47   public static final String BLOCK_SUFFIX = ".block";
48   public static final String PATTERNS_BLOCK_KEY = EXCLUSION_KEY_PREFIX + BLOCK_SUFFIX;
49   public static final String BEGIN_BLOCK_REGEXP = "beginBlockRegexp";
50   public static final String END_BLOCK_REGEXP = "endBlockRegexp";
51
52   public static final String ALLFILE_SUFFIX = ".allfile";
53   public static final String PATTERNS_ALLFILE_KEY = EXCLUSION_KEY_PREFIX + ALLFILE_SUFFIX;
54   public static final String FILE_REGEXP = "fileRegexp";
55
56   static final int LARGE_SIZE = 40;
57   static final int SMALL_SIZE = 10;
58
59   private IgnoreIssuesConfiguration() {
60     // static configuration declaration only
61   }
62
63   public static List<PropertyDefinition> getPropertyDefinitions() {
64     return ImmutableList.of(
65       PropertyDefinition.builder(PATTERNS_MULTICRITERIA_EXCLUSION_KEY)
66         .category(CoreProperties.CATEGORY_EXCLUSIONS)
67         .subCategory(SUB_CATEGORY_IGNORE_ISSUES)
68         .name("Ignore Issues on Multiple Criteria")
69         .description("Patterns to ignore issues on certain components and for certain coding rules.")
70         .onQualifiers(Qualifiers.PROJECT)
71         .index(3)
72         .fields(
73           PropertyFieldDefinition.build(RULE_KEY)
74             .name(PROPERTY_RULE_KEY_PATTERN)
75             .description("Pattern to match rules which should be ignored.")
76             .type(PropertyType.STRING)
77             .indicativeSize(LARGE_SIZE)
78             .build(),
79           PropertyFieldDefinition.build(RESOURCE_KEY)
80             .name(PROPERTY_FILE_PATH_PATTERN)
81             .description("Pattern to match files which should be ignored.")
82             .type(PropertyType.STRING)
83             .indicativeSize(LARGE_SIZE)
84             .build())
85         .build(),
86       PropertyDefinition.builder(PATTERNS_BLOCK_KEY)
87         .category(CoreProperties.CATEGORY_EXCLUSIONS)
88         .subCategory(SUB_CATEGORY_IGNORE_ISSUES)
89         .name("Ignore Issues in Blocks")
90         .description("Patterns to ignore all issues on specific blocks of code, while continuing to scan and mark issues on the remainder of the file.")
91         .onQualifiers(Qualifiers.PROJECT)
92         .index(2)
93         .fields(
94           PropertyFieldDefinition.build(BEGIN_BLOCK_REGEXP)
95             .name("Regular Expression for Start of Block")
96             .description("If this regular expression is found in a file, then following lines are ignored until end of block.")
97             .type(PropertyType.STRING)
98             .indicativeSize(LARGE_SIZE)
99             .build(),
100           PropertyFieldDefinition.build(END_BLOCK_REGEXP)
101             .name("Regular Expression for End of Block")
102             .description("If specified, this regular expression is used to determine the end of code blocks to ignore. If not, then block ends at the end of file.")
103             .type(PropertyType.STRING)
104             .indicativeSize(LARGE_SIZE)
105             .build())
106         .build(),
107       PropertyDefinition.builder(PATTERNS_ALLFILE_KEY)
108         .category(CoreProperties.CATEGORY_EXCLUSIONS)
109         .subCategory(SUB_CATEGORY_IGNORE_ISSUES)
110         .name("Ignore Issues on Files")
111         .description("Patterns to ignore all issues on files that contain a block of code matching a given regular expression.")
112         .onQualifiers(Qualifiers.PROJECT)
113         .index(1)
114         .fields(
115           PropertyFieldDefinition.build(FILE_REGEXP)
116             .name("Regular Expression")
117             .description("If this regular expression is found in a file, then the whole file is ignored.")
118             .type(PropertyType.STRING)
119             .indicativeSize(LARGE_SIZE)
120             .build())
121         .build(),
122       PropertyDefinition.builder(PATTERNS_MULTICRITERIA_INCLUSION_KEY)
123         .category(CoreProperties.CATEGORY_EXCLUSIONS)
124         .subCategory(SUB_CATEGORY_IGNORE_ISSUES)
125         .name("Restrict Scope of Coding Rules")
126         .description("Patterns to restrict the application of a rule to only certain components, ignoring all others.")
127         .onQualifiers(Qualifiers.PROJECT)
128         .index(4)
129         .fields(
130           PropertyFieldDefinition.build(RULE_KEY)
131             .name(PROPERTY_RULE_KEY_PATTERN)
132             .description("Pattern used to match rules which should be restricted.")
133             .type(PropertyType.STRING)
134             .indicativeSize(LARGE_SIZE)
135             .build(),
136           PropertyFieldDefinition.build(RESOURCE_KEY)
137             .name(PROPERTY_FILE_PATH_PATTERN)
138             .description("Pattern used to match files to which the rules should be restricted.")
139             .type(PropertyType.STRING)
140             .indicativeSize(LARGE_SIZE)
141             .build())
142         .build());
143   }
144 }