SonarQube 5.6 是否在使用 sonar-plugin-api 版本 4.5.2 开发的插件中执行装饰器?
Does SonarQube 5.6 executes Decorators in plugins developed with sonar-plugin-api version 4.5.2?
我安装了sonarqube 5.6,并下载了C#插件。
我决定扩展 C# 插件,所以我继续下载已安装插件的代码(版本 5.3.2)。
C# 插件项目引用了 sonar-plugin-api 版本 4.5.2
我添加了需要为项目级别计算的新指标,因此,根据文档,我创建了一个 Decorator。
public class CSharpMyDecorator implements Decorator{
private static final Logger LOG = LoggerFactory.getLogger(CSharpMyDecorator.class);
@Override
public boolean shouldExecuteOnProject(Project arg0) {
// TODO Auto-generated method stub
return true;
}
@Override
public void decorate(Resource resource, DecoratorContext context) {
LOG.info(resource.getName() + " Is Project: " + Scopes.isProject(resource) +" Is project not Module:" + Qualifiers.isProject(resource, false));
if (Scopes.isProject(resource) && Qualifiers.isProject(resource, false)) {
double files = 0d;
double percentage = 0d;
LOG.info("files: "+context.getMeasure(CoreMetrics.FILES).getValue());
for (Measure measure : context.getChildrenMeasures(MyMetrics.FILES_DONT_PASS_FUNCTION_THRESHOLD)) {
files += measure.getValue();
}
percentage = files / context.getMeasure(CoreMetrics.FILES).getValue();
context.saveMeasure(MyMetrics.PERC_FILES_DONT_PASS_FUNCTION_THRESHOLD, percentage);
}
}
}
我在插件中添加了class:
public class CSharpPlugin extends SonarPlugin {
public static final String LANGUAGE_KEY = "cs";
public static final String LANGUAGE_NAME = "C#";
public static final String FILE_SUFFIXES_KEY = "sonar.cs.file.suffixes";
public static final String FILE_SUFFIXES_DEFVALUE = ".cs";
public static final String CSHARP_WAY_PROFILE = "Sonar way";
public static final String REPOSITORY_KEY = "csharpsquid";
public static final String REPOSITORY_NAME = "SonarQube";
public static final String IGNORE_HEADER_COMMENTS = "sonar.cs.ignoreHeaderComments";
public static final String NUMBER_FUNCTION_THRESHOLD = "sonar.cs.numberFunctionThreshold";
public static final String NUMBER_LOC_THRESHOLD = "sonar.cs.numberLocThreshold";
@Override
public List getExtensions() {
ImmutableList.Builder builder = ImmutableList.builder();
builder.add(
CSharp.class,
CSharpSonarRulesDefinition.class,
CSharpSonarWayProfile.class,
CSharpCommonRulesEngine.class,
CSharpCommonRulesDecorator.class,
CSharpSourceCodeColorizer.class,
RuleRunnerExtractor.class,
CSharpSensor.class,
CSharpCPDMapping.class,
SonarLintProfileExporter.class,
SonarLintFakeProfileImporter.class,
RoslynProfileExporter.class,
MyMetrics.class,
CSharpMyDecorator.class
);
builder.addAll(CSharpFxCopProvider.extensions());
builder.addAll(CSharpCodeCoverageProvider.extensions());
builder.addAll(CSharpUnitTestResultsProvider.extensions());
builder.addAll(CSharpMsBuildIntegrationProvider.extensions());
builder.addAll(RoslynProfileExporter.sonarLintRepositoryProperties());
return builder.build();
}
}
当我执行分析时,既没有创建指标,也没有存储度量。
查看生成的日志(我启用了详细选项),我没有发现任何对装饰器执行的引用。甚至装饰器代码中预期的 LOG 条目也不行。
我正在使用 MSBuild.SonarQube.Runner.exe 版本 2.0
为什么不调用装饰器?是不是SonarQube的版本问题?
扩展点 Decorator 在 5.2 版中被删除,因为它不是为系列中最想要的功能之一设计的 5.x:将扫描器与数据库隔离。
可以在 http://docs.sonarqube.org/display/DEV/API+Changes and in the group https://groups.google.com/forum/#!forum/sonarqube 找到更多详细信息。
我安装了sonarqube 5.6,并下载了C#插件。
我决定扩展 C# 插件,所以我继续下载已安装插件的代码(版本 5.3.2)。
C# 插件项目引用了 sonar-plugin-api 版本 4.5.2
我添加了需要为项目级别计算的新指标,因此,根据文档,我创建了一个 Decorator。
public class CSharpMyDecorator implements Decorator{
private static final Logger LOG = LoggerFactory.getLogger(CSharpMyDecorator.class);
@Override
public boolean shouldExecuteOnProject(Project arg0) {
// TODO Auto-generated method stub
return true;
}
@Override
public void decorate(Resource resource, DecoratorContext context) {
LOG.info(resource.getName() + " Is Project: " + Scopes.isProject(resource) +" Is project not Module:" + Qualifiers.isProject(resource, false));
if (Scopes.isProject(resource) && Qualifiers.isProject(resource, false)) {
double files = 0d;
double percentage = 0d;
LOG.info("files: "+context.getMeasure(CoreMetrics.FILES).getValue());
for (Measure measure : context.getChildrenMeasures(MyMetrics.FILES_DONT_PASS_FUNCTION_THRESHOLD)) {
files += measure.getValue();
}
percentage = files / context.getMeasure(CoreMetrics.FILES).getValue();
context.saveMeasure(MyMetrics.PERC_FILES_DONT_PASS_FUNCTION_THRESHOLD, percentage);
}
}
}
我在插件中添加了class:
public class CSharpPlugin extends SonarPlugin {
public static final String LANGUAGE_KEY = "cs";
public static final String LANGUAGE_NAME = "C#";
public static final String FILE_SUFFIXES_KEY = "sonar.cs.file.suffixes";
public static final String FILE_SUFFIXES_DEFVALUE = ".cs";
public static final String CSHARP_WAY_PROFILE = "Sonar way";
public static final String REPOSITORY_KEY = "csharpsquid";
public static final String REPOSITORY_NAME = "SonarQube";
public static final String IGNORE_HEADER_COMMENTS = "sonar.cs.ignoreHeaderComments";
public static final String NUMBER_FUNCTION_THRESHOLD = "sonar.cs.numberFunctionThreshold";
public static final String NUMBER_LOC_THRESHOLD = "sonar.cs.numberLocThreshold";
@Override
public List getExtensions() {
ImmutableList.Builder builder = ImmutableList.builder();
builder.add(
CSharp.class,
CSharpSonarRulesDefinition.class,
CSharpSonarWayProfile.class,
CSharpCommonRulesEngine.class,
CSharpCommonRulesDecorator.class,
CSharpSourceCodeColorizer.class,
RuleRunnerExtractor.class,
CSharpSensor.class,
CSharpCPDMapping.class,
SonarLintProfileExporter.class,
SonarLintFakeProfileImporter.class,
RoslynProfileExporter.class,
MyMetrics.class,
CSharpMyDecorator.class
);
builder.addAll(CSharpFxCopProvider.extensions());
builder.addAll(CSharpCodeCoverageProvider.extensions());
builder.addAll(CSharpUnitTestResultsProvider.extensions());
builder.addAll(CSharpMsBuildIntegrationProvider.extensions());
builder.addAll(RoslynProfileExporter.sonarLintRepositoryProperties());
return builder.build();
}
}
当我执行分析时,既没有创建指标,也没有存储度量。
查看生成的日志(我启用了详细选项),我没有发现任何对装饰器执行的引用。甚至装饰器代码中预期的 LOG 条目也不行。
我正在使用 MSBuild.SonarQube.Runner.exe 版本 2.0
为什么不调用装饰器?是不是SonarQube的版本问题?
扩展点 Decorator 在 5.2 版中被删除,因为它不是为系列中最想要的功能之一设计的 5.x:将扫描器与数据库隔离。
可以在 http://docs.sonarqube.org/display/DEV/API+Changes and in the group https://groups.google.com/forum/#!forum/sonarqube 找到更多详细信息。