解决SonarQube分析结果不准确的问题

作者:佚名 上传时间:2023-03-11 运行软件:SonarQube 软件版本:SonarQube 6.7+ 版权申诉

本示例代码演示如何解决在使用SonarQube进行代码静态分析时,分析结果不准确的问题。该问题通常发生在代码中存在使用反射、动态代理等技术的情况下,这些技术使得代码在编译时无法完全确定执行路径,从而导致SonarQube分析结果偏差甚至失效的问题。

@Rules(
    rules = {
        "java:S2068"
    }
)
public void validateReflectiveAccess(JavaFileScannerContext context) {
    final SemanticModel semanticModel = context.getSemanticModel();
    Collection<Tree> trees = semanticModel.getTrees(semanticModel.getClassSymbol(context.getTree()));
    for (Tree tree : trees) {
        if (tree.is(Tree.Kind.NEW_CLASS)) {
            final NewClassTree newClassTree = (NewClassTree) tree;
            final Symbol.TypeSymbol symbol = semanticModel.getSymbol(newClassTree);
            if (symbol == null) {
                return;
            }
            newClassTree.getArguments().stream()
                    .filter(arg -> arg.getKind() == Tree.Kind.METHOD_INVOCATION)
                    .map(MethodInvocationTree.class::cast)
                    .forEach(invocation -> {
                        final Symbol.MethodSymbol methodSymbol = semanticModel.getSymbols().getInvocationSymbol(invocation);
                        if (methodSymbol == null) {
                            return;
                        }
                        if (methodSymbol.owner().typeArguments().isEmpty()) {
                            context.reportIssue(
                                    invocation,
                                    "Use \"LambdaMetafactory\" to create a \"java.lang.invoke.MethodHandle\" instead of using reflection.");
                            return;
                        }
                        final String ownerType = ((Symbol.TypeSymbol) methodSymbol.owner()).getQualifiedName().toString();
                        final String methodName = methodSymbol.name();
                        if (isOnUnsafeType(methodSymbol.owner())) {
                            final boolean usesUnsafe = isUnsafeMethodInvocation(methodSymbol, invocation, semanticModel);
                            if (usesUnsafe) {
                                context.reportIssue(
                                        invocation,
                                        String.format("Use \"%1$s.%2$s\" instead of using reflection.", ownerType, methodName));
                            }
                        } else if (isOnJAXBContextType(methodSymbol.owner())) {
                            final boolean usesJAXB = isJAXBMethodInvocation(methodSymbol, invocation, semanticModel, context);
                            if (usesJAXB) {
                                context.reportIssue(
                                        invocation,
                                        String.format("Use \"%1$s.%2$s\" instead of using reflection.", ownerType, methodName));
                            }
                        }
                    });
        }
    }
}

免责申明:文章和图片全部来源于公开网络,如有侵权,请通知删除 server@dude6.com

用户评论
相关推荐
SonarQube
本示例代码演示如何解决在使用SonarQube进行代码静态分析时,分析结果不准确的问题。该问题通常发生在代码中存在使用反射、动态代理等技术的情况下,这些技术使得代码在编译时无法完全确定执行路径,从而导
SonarQube 6.7+
SonarQube
2023-03-11 17:14
使用OpenTSDB时如何查询
在使用OpenTSDB时,查询结果不准确可能是由于多种原因引起的,需要仔细排查和调试。以下是一些常见的问题和解决方法:时间戳不一致:确保查询的时间范围和时间戳与实际数据匹配。时区差异、时间戳格式
OpenTSDB版本
OpenTSDB
2023-11-13 23:15
JavaScript解决浮点数计算不准确问题方法分析
主要介绍了JavaScript解决浮点数计算不准确问题的方法,结合实例形式分析了javascript浮点数运算精度误差的原因以及相关的解决方法与具体操作技巧,需要的朋友可以参考下
PDF
60KB
2020-10-28 06:44
Solr中文词导致搜索
Solr中文搜索结果不准确的问题通常与分词策略有关。要优化中文分词,首先要确认你是否使用了适当的分词器。Solr提供了多个中文分词器,如StandardTokenizer、CJKTokenizer等。
Solr 8.0及以上
Solr
2023-12-04 23:06
Elasticsearch中文词导致搜索
对于Elasticsearch中文分词导致搜索不准确的问题,首先需要检查你的分词器设置。Elasticsearch默认使用的是标准分词器,但对于中文文本,我们通常建议使用专门的中文分词器。常见的中文分
Elasticsearch 7.x
Elasticsearch
2023-12-05 01:23
Elasticsearch中文词导致搜索
在Elasticsearch中,中文分词对搜索结果的准确性至关重要。IK Analyzer是一款常用的中文分词器,但在使用过程中,需要注意以下几点。首先,确保你的分词器版本与Elasticsearch
7.9.2
Elasticsearch
2023-11-14 22:07
IOS解决后台计数器不准确问题
解决了计时器进入后台之后返回前台的时候数据显示不准确的问题。使用方法带了文档,如果是测试项目 请记得添加 #import
ZIP
7KB
2020-09-24 23:19
Elasticsearch中文词器导致搜索
在Elasticsearch中,中文分词是一个常见的问题,导致搜索结果不准确的情况。这通常是由于默认的中文分词器对中文文本的处理方式不够灵活,导致某些词语无法正确切分或匹配。为了解决这个问题,你可以考
Elasticsearch 7.x
Elasticsearch
2023-12-14 15:11
使用OpenTSDB时遇到查询
在OpenTSDB中,查询结果不准确的问题可能与数据点的聚合方式和查询条件有关。首先,确保你的查询条件包括正确的时间范围和指标名称。其次,注意查询时是否使用了正确的聚合函数。OpenTSDB支持多种聚
OpenTSDB 2.4.0
OpenTSDB
2023-11-15 12:18
使用Elasticsearch时,如何查询中文本排序
在Elasticsearch中,中文本排序不准确的问题通常与分词和排序策略有关。首先,确保你正在使用合适的中文分词器,例如IK Analyzer。其次,针对中文文本排序,可以使用Elasticsear
Elasticsearch 7.x
Elasticsearch
2023-12-04 05:06