以下代码分析意味着什么?

时间:2015-05-08 05:09:41

标签: java intellij-idea code-analysis

我的代码中只有一个地方(AggregateFunctions)实例化了如下所示的对象。

    private String selectColumns() {
        String query = "SELECT ";

        if (this.distinctResults) {
            query = query + "DISTINCT ";
        }

        SelectColumn selectColumn = new SelectColumn(this);

        if (!this.applyAggregation) {
            for (Object object : this.columns) {
                query = selectColumn.selectColumn(query, object);
            }
        } else {
            AggregateFunctions aggregateFunctions = new AggregateFunctions(this);
            query = query + aggregateFunctions.select();
        }
        //Remove extra ', '
        query = query.substring(0, query.length() - 2) + " FROM ";
        return query;
    }

构造函数:

    public AggregateFunctions(@NotNull SqlQueryGenerator sqlQueryGenerator) {
        this.spaceEncloser = sqlQueryGenerator.getSpaceEncloser();
        this.selectColumn = new SelectColumn(sqlQueryGenerator);
        JSONObject formData = sqlQueryGenerator.getFormData();
        this.columns = formData.getJSONArray("columns");
        this.aggregateJson = formData.getJSONObject("functions").getJSONArray("aggregate");
        this.aggregatesList = new ArrayList<Aggregate>();
        prepareAggregates();
        this.query = new StringBuilder();
    }

    public SelectColumn(SqlQueryGenerator sqlQueryGenerator) {
        this.sqlQueryGenerator = sqlQueryGenerator;
    }

但IntelliJ Code Analysis对递归调用进行了以下说明。基本上我不理解其含义。任何人都可以详细说明,帮助我理解吗?

问题简介

  

构造函数具有用法,但它们都属于递归调用链,没有可从入口点访问的成员。

问题解决

  1. 安全删除
  2. 评论
  3. 添加为入口点

3 个答案:

答案 0 :(得分:3)

这是来自未使用声明检查的警告。 IntelliJ IDEA认为无法从任何入口点访问构造函数。但是,构造函数并未使用,但是用法本身无法访问。

如果您的代码不是这种情况,则可能是IntelliJ IDEA中的错误。

答案 1 :(得分:0)

可能在您调用的代码中的AggregateFunctions的构造函数中,返回另一个类中的方法selectColumns()。这样一种复仇永远不会结束。

我的猜测是在这里

 JSONObject formData = sqlQueryGenerator.getFormData();

或者在这里的某个地方:

 this.selectColumn = new SelectColumn(sqlQueryGenerator);

你转到上一个类和创建新聚合门的相同方法,并且正在发生循环。

用这个调用AggregateFunction - 这是同一个对象。但是在构造函数中,您可以调用此方法。检查这些方法,如果其中任何一个方法有另一个AggregateFunction对象的创建 - 那就是你的问题。

答案 2 :(得分:0)

我遇到了这个问题,这是因为该对象没有在其他任何地方使用