4444public class CxxMetrics implements Metrics {
4545
4646 private final CxxLanguage language ;
47+ private final String domain ;
48+
49+ // Introduce own documentation metrics, after they has been removed from SQ core
50+ // see https://jira.sonarsource.com/browse/SONAR-8328
51+ public static final String PUBLIC_API_KEY = "public_api" ;
52+ public static final String PUBLIC_UNDOCUMENTED_API_KEY = "public_undocumented_api" ;
53+ public static final String PUBLIC_DOCUMENTED_API_DENSITY_KEY = "public_documented_api_density" ;
4754
4855 /**
4956 * CxxMetrics
5057 *
5158 * @param language for metrics
52- *
59+ *
5360 */
5461 public CxxMetrics (CxxLanguage language ) {
5562 this .language = language ;
63+ this .domain = language .getKey ().toUpperCase (Locale .ENGLISH );
64+
65+ Metric <?> metric = new Metric .Builder (getKey (PUBLIC_API_KEY , language ), "Public API" , Metric .ValueType .INT )
66+ .setDescription ("Public API" )
67+ .setDirection (Metric .DIRECTION_WORST )
68+ .setQualitative (false )
69+ .setDomain (this .domain )
70+ .create ();
71+ saveMetric (PUBLIC_API_KEY , metric );
72+
73+ metric = new Metric .Builder (getKey (PUBLIC_DOCUMENTED_API_DENSITY_KEY , language ), "Public Documented API (%)" , Metric .ValueType .PERCENT )
74+ .setDescription ("Public documented classes and functions balanced by ncloc" )
75+ .setDirection (Metric .DIRECTION_BETTER )
76+ .setQualitative (true )
77+ .setDomain (this .domain )
78+ .setWorstValue (0.0 )
79+ .setBestValue (100.0 )
80+ .setOptimizedBestValue (true )
81+ .create ();
82+ saveMetric (PUBLIC_DOCUMENTED_API_DENSITY_KEY , metric );
5683
57- buildMetric (CxxCompilerSensor .KEY , "Compiler issues" , language );
58- buildMetric (CxxCppCheckSensor .KEY , "CppCheck issues" , language );
59- buildMetric (CxxOtherSensor .KEY , "Other tools issues" , language );
60- buildMetric (CxxPCLintSensor .KEY , "PC-Lint issues" , language );
61- buildMetric (CxxRatsSensor .KEY , "Rats issues" , language );
62- buildMetric (CxxSquidSensor .KEY , "Squid issues" , language );
63- buildMetric (CxxValgrindSensor .KEY , "Valgrind issues" , language );
64- buildMetric (CxxVeraxxSensor .KEY , "Vera issues" , language );
65- buildMetric (CxxDrMemorySensor .KEY , "DrMemory issues" , language );
66- buildMetric (CxxClangSASensor .KEY , "ClangSA issues" , language );
67- buildMetric (CxxClangTidySensor .KEY , "ClangTidy issues" , language );
84+ metric = new Metric .Builder (getKey (PUBLIC_UNDOCUMENTED_API_KEY , language ), "Public Undocumented API" , Metric .ValueType .INT )
85+ .setDescription ("Public undocumented classes, functions and variables" )
86+ .setDirection (Metric .DIRECTION_WORST )
87+ .setQualitative (true )
88+ .setDomain (this .domain )
89+ .setBestValue (0.0 )
90+ .setDirection (Metric .DIRECTION_WORST )
91+ .setOptimizedBestValue (true )
92+ .create ();
93+ saveMetric (PUBLIC_UNDOCUMENTED_API_KEY , metric );
94+
95+ saveMetric (CxxCompilerSensor .KEY , buildReportMetric (CxxCompilerSensor .KEY , "Compiler issues" ));
96+ saveMetric (CxxCppCheckSensor .KEY , buildReportMetric (CxxCppCheckSensor .KEY , "CppCheck issues" ));
97+ saveMetric (CxxOtherSensor .KEY , buildReportMetric (CxxOtherSensor .KEY , "Other tools issues" ));
98+ saveMetric (CxxPCLintSensor .KEY , buildReportMetric (CxxPCLintSensor .KEY , "PC-Lint issues" ));
99+ saveMetric (CxxRatsSensor .KEY , buildReportMetric (CxxRatsSensor .KEY , "Rats issues" ));
100+ saveMetric (CxxSquidSensor .KEY , buildReportMetric (CxxSquidSensor .KEY , "Squid issues" ));
101+ saveMetric (CxxValgrindSensor .KEY , buildReportMetric (CxxValgrindSensor .KEY , "Valgrind issues" ));
102+ saveMetric (CxxVeraxxSensor .KEY , buildReportMetric (CxxVeraxxSensor .KEY , "Vera issues" ));
103+ saveMetric (CxxDrMemorySensor .KEY , buildReportMetric (CxxDrMemorySensor .KEY , "DrMemory issues" ));
104+ saveMetric (CxxClangSASensor .KEY , buildReportMetric (CxxClangSASensor .KEY , "ClangSA issues" ));
105+ saveMetric (CxxClangTidySensor .KEY , buildReportMetric (CxxClangTidySensor .KEY , "ClangTidy issues" ));
106+ }
107+
108+ private Metric <?> buildReportMetric (String key , String description ) {
109+ String effectiveKey = CxxMetrics .getKey (key , this .language );
110+ Metric <?> metric = new Metric .Builder (effectiveKey , description , Metric .ValueType .INT )
111+ .setDirection (Metric .DIRECTION_WORST )
112+ .setQualitative (Boolean .TRUE )
113+ .setDomain (this .domain )
114+ .create ();
115+ return metric ;
116+ }
117+
118+ private Boolean saveMetric (String key , Metric <?> metric ) {
119+ return this .language .SaveMetric (metric , key );
68120 }
69121
70122 /**
71- * GetKey
123+ * getKey
72124 *
73125 * @param key for language
74126 * @param language for metrics
75- * @return String
76- *
127+ * @return effective key
128+ *
77129 */
78130 public static String getKey (String key , CxxLanguage language ) {
79131 return language .getPropertiesKey ().toUpperCase (Locale .ENGLISH ) + "-" + key .toUpperCase (Locale .ENGLISH );
@@ -83,15 +135,4 @@ public static String getKey(String key, CxxLanguage language) {
83135 public List <Metric > getMetrics () {
84136 return new ArrayList (this .language .getMetricsCache ());
85137 }
86-
87- private static void buildMetric (String key , String description , CxxLanguage language ) {
88- String effectiveKey = CxxMetrics .getKey (key , language );
89- Metric <?> metric = new Metric .Builder (effectiveKey , description , Metric .ValueType .INT )
90- .setDirection (Metric .DIRECTION_WORST )
91- .setQualitative (Boolean .TRUE )
92- .setDomain (language .getKey ().toUpperCase (Locale .ENGLISH ))
93- .create ();
94-
95- language .SaveMetric (metric , key );
96- }
97138}
0 commit comments