gpt4 book ai didi

java - Google javaparser IfStmt 不计算后续

转载 作者:行者123 更新时间:2023-12-01 14:21:08 26 4
gpt4 key购买 nike

我正在使用Google javaparser来解析java文件,当我尝试计算“If”语句时,似乎无法获得“else-if”语句的数量。

例如,我想解析以下代码:

    if(i>1){
i++;
}else if(i>2){
i++;
}else if(i>3){
i++;
}else{
i++;
}

我想获得循环复杂度,以便我需要计算“if”和“else-if”的数量。当我使用Visitor模式时,我只能访问API中定义的“IfStmt”,代码如下:

    private static class IfStmtVisitor extends VoidVisitorAdapter<Void> {
int i = 0;

@Override
public void visit(IfStmt n, Void arg) {
//visit a if statement, add 1
i++;
if (n.getElseStmt() != null) {
i++;
}
}

public int getNumber() {
return i;
}
}

没有办法获得“else-if”,但带有“IfStmt”的访问者模式将整个代码块视为一个“if”语句。因此,我期望数字为 4,但实际是 2。

有人有什么想法吗?

最佳答案

一条if语句只包含一个“then语句”和一个“else语句”。 else 语句可以是隐藏的 if 语句。所以存在递归性。要跟踪您所需的复杂性,以下递归方法可能会有所帮助:

private static class IfStmtVisitor extends VoidVisitorAdapter<Void> {
int i = 0;

@Override
public void visit(IfStmt n, Void arg)
{
cyclomaticCount(n);
}

private void cyclomaticCount(IfStmt n)
{
// one for the if-then
i++;
Statement elseStmt = n.getElseStmt();
if (elseStmt != null)
{
if ( IfStmt.class.isAssignableFrom(elseStmt.getClass()))
{
cyclomaticCount((IfStmt) elseStmt);
}
else
{
// another for the else
i++;
}
}
}

public int getNumber() {
return i;
}
}

希望有帮助。

关于java - Google javaparser IfStmt 不计算后续 <else-if>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17552443/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com