2013-02-22 3 views
7

Следующий код дает мне предупреждение о «Мертвый код» в Eclipse:Нежелательные Мертвый код Предупреждение в Затмении

private void add(Node<E> n, E element) { 
     Node<E> e = new Node<E>(element); 
     if (n == null) 
      root = e; 
     else if (n.compareTo(e) > 0) 
      if (n.hasLeft()) 
       add(n.getLeft(), element); 
      else 
       n.setLeft(e); 
     else if (n.hasRight()) 
      add(n.getRight(), element); 
     else 
      n.setRight(e); 
     balance(e); 
    } 

предупреждение появляется в строке, которая говорит root = e;.

Я искал мертвый код и обнаружил, что это кодовая шляпа не имеет никакого эффекта и поэтому будет игнорироваться компилятором java.

Однако этот корень является частным полем моего класса, и поэтому для моей программы необходимо, чтобы я это делал.

Неужели компилятор действительно проигнорирует это? Как я могу это остановить? Почему он думает, что это мертвый код?

+1

- это фактический код? –

+2

Проведите очистку и перестройте код, время от времени затмевается Eclipse. –

+1

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

ответ

2

Если root частное поле в своем классе, который содержит метод add вас в курсе, то, как вы сказали, линия root = e; не следует рассматривать как мертвый код в Eclipse IDE.

Компилятор должен работать нормально ... это всего лишь предупреждение IDE.

Мое предположение, что Eclipse выполняет какую-то кодовую ходьбу (подобно инструментам сложности Cyclomatic), чтобы определять пути кода и находить «мертвый код» и «недостижимый код».

Я бы попробовал освежиться, а затем сделать чистую и построить в среде IDE. Если это не разрешило его, Eclipse может просто иметь «ложное срабатывание» при предупреждении о мертвом коде. Не было бы в первый раз ... Я использую как Eclipse, так и IntelliJ IDEA и видел, что обе IDE некорректно предупреждают о коде раньше. Однако мой код все еще компилируется, несмотря на предупреждение IDE.

2

Возможны две проблемы: первая: проблема заключается в том, что корень строки не используется для чего-либо. В FindBugs же ошибка называется «мертвой» магазин, который, в findbugs означает:

Эта команда присваивает значение локальной переменной, но значение не читается или использоваться в любой последующей команды. Часто это указывает на ошибку, поскольку вычисляемое значение никогда не используется.

Обратите внимание, что ключевое слово здесь «Часто».

Я бы проверил и убедился, что корень используется так, как вы ожидаете, и если это так, то, как упомянуто Филиппом Тенном, является ложным положительным.

Вторая: Ваша проблема может быть связана с this issue.

1

Поскольку источника недостаточно, чтобы найти точную причину, я думаю, что это связано с проблемами в затмении, связанными с кодом Dead. Некоторые из вопросов вы можете проверить here и here.

0

Посмотрите на свое состояние.

Node<E> e = new Node<E>(element); 
if (n == null) { 
    // dead code here 
} 

Этот код мертв, потому что n == null будет всегда быть ложным. Вы только что создали новый экземпляр Node<E> на предыдущей строке (безоговорочно). Новый объект никогда не будет пустым.

+0

Обратите внимание, что я сделал 'e', но я проверяю' n'. – golddove

+0

Извините, я продолжал оглядываться на оригинал и поклялся кучу раз, что увидел там «n». Возможно, я был слишком устал;) – efritz

Смежные вопросы