2015-05-08 3 views
2

У меня есть объект, созданный таким образом, как только в одном месте в моем коде (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 анализ кода говорит следующее о рекурсивных вызовов. В принципе, я не понял смысла. Может ли кто-нибудь уточнить, чтобы помочь мне понять?

Проблема синопсис

Конструктор имеет использование (ов), но все они принадлежат рекурсивные вызовы цепи, которая не имеет членов достижимые из точек входа.

Решение проблемы

  1. Безопасное удаление
  2. Закомментируйте
  3. Добавить в точке входа
+0

Это означает, что вы создали недостижимую цепочку вызовов конструктора в своем коде. В принципе, у вас есть код, который делает что-то, но не может туда добраться. –

+0

Трудно сказать без дополнительной информации. Возможно, нам нужен точный метод, в котором размещается этот вызов, и содержимое constructr 'Aggregate'. –

+0

Хорошо. Я обновлю вопрос – phoenix

ответ

2

Это предупреждение от Неиспользованная декларация осмотр. IntelliJ IDEA считает, что конструктор недоступен из любых точек входа. Однако конструктор не используется, но сами по себе не доступны.

Если это не так для вашего кода, это может быть ошибка в IntelliJ IDEA.

0

Вероятно, в конструкторе AggregateFunctions в коде, который вы называете вы идете Вернемся к методу selectColumns() в другом классе. Таким образом, рекурсия никогда не закончится.

Я думаю, что либо здесь

JSONObject formData = sqlQueryGenerator.getFormData(); 

Или где-то здесь:

this.selectColumn = new SelectColumn(sqlQueryGenerator); 

Идешь в предыдущем классе, и к тому же методу, который создает новый aggreggate и цикл происходит ,

Вы вызываете AggregateFunction с этим - это тот же объект. Но тогда в конструкторе вы вызываете методы этого. Проверьте эти методы, и если у кого-то из них есть другое создание объекта AggregateFunction - есть ваша проблема.

+0

AggregateFunctions создается только один раз – phoenix

+0

Да, но это сообщение означает, что есть рекурсия. И, глядя в ваш код, я считаю, что это причина. Вы создали его только один раз в коде, который вы опубликовали. Но некоторые из кода, вызываемого в его конструкторе, вероятно, создают еще один.Можете ли вы опубликовать, возможно, метод getFormData() и конструктор SelectColumn (sqlQueryGenerator)? –

+0

formData является переменной-членом в SqlQueryGenerator. И метод getFormData является только получателем. Выделение структуры затрат SelectColumns уже опубликовано. И formData - это net.sf.JSONObject – phoenix