2013-02-22 13 views
7

Der folgende Code mir ein 'Dead Code' Warnung in Eclipse gibt: auf der LinieUnerwünschte Dead Code Warnung in 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); 
    } 

Die Warnung erscheint, die root = e; sagt.

Ich sah toten Code und fand, dass es Code Hut hat keine Wirkung und wird daher von der Java-Compiler ignoriert werden.

Allerdings ist diese Wurzel ein privates Feld in meiner Klasse und daher ist es für die Funktion meines Programms notwendig, dass ich dies tue.

Wird der Compiler das wirklich ignorieren? Wie kann ich das stoppen? Warum denkt es, dass es ein toter Code ist?

+1

ist das der eigentliche Code? –

+2

Säubere und baue den Code auf, Eclipse Bugs hin und wieder aus. –

+1

Ich denke, das einzige Mal, dass dies passieren kann, ist, wenn es für root unmöglich wäre, null zu sein. Vielleicht schau dir an, wo diese Variable benutzt wird. – austin

Antwort

2

Wenn root ein eigenes Feld in der Klasse ist, die die add Methode enthält, die Sie geschrieben, dann, wie Sie sagten, die Linie root = e; sollte nicht tot Code von der Eclipse IDE in Betracht gezogen werden.

Der Compiler sollte gut funktionieren ... es ist nur eine IDE-Warnung.

Meine Vermutung wäre, dass Eclipse eine Art Code läuft (ähnlich den Cyclomatic-Komplexitäts-Tools), um Code-Pfade zu ermitteln und "toten Code" und "unerreichbaren Code" zu finden.

Ich würde versuchen, zu aktualisieren, dann eine saubere und bauen in der IDE. Wenn dies nicht gelöst wird, hat Eclipse möglicherweise nur eine "falsch positive" Warnung bei totem Code. Wäre nicht das erste Mal ... Ich benutze sowohl Eclipse als auch IntelliJ IDEA und habe beide IDEs vorher fälschlicherweise auf Code warnen sehen. Mein Code wird jedoch trotz der IDE-Warnung immer noch gut übersetzt.

2

Es gibt möglicherweise zwei Probleme: erstens: Das Problem ist, dass der Stamm der Zeile nicht für irgendetwas "verwendet" wird. In findbugs wird der gleiche Fehler bezeichnet als „tote store“, die pro findbugs bedeutet:

Diese Anweisung Wert auf eine lokale Variable zuweist, aber der Wert gelesen oder nicht in einem späteren Befehl verwendet. Oft deutet dies auf einen Fehler hin, da der berechnete Wert nie verwendet wird.

Beachten Sie, dass das Schlüsselwort hier "oft" ist.

Ich würde überprüfen und stellen Sie sicher, dass die Wurzel verwendet wird, wie Sie erwarten, und wenn es ist, könnte es, wie von Philip Tenn erwähnt, ein falsches positives sein.

Zweitens: Ihr Problem könnte mit this issue zusammenhängen.

1

Da die Quelle nicht ausreicht, um die genaue Ursache zu finden, denke ich, dass es sich auf die Probleme in der Eclipse im Zusammenhang mit Dead-Code bezieht. Einige der Probleme, die Sie überprüfen können, sind here und here.

0

Sehen Sie sich Ihren if-Zustand an.

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

Dieser Code ist tot, weil n == null wird immer falsch sein. Sie haben gerade eine neue Instanz von Node<E> in der vorherigen Zeile (unbedingt) erstellt. Ein neues Objekt wird niemals null sein.

+0

Beachten Sie, dass ich 'e' gemacht habe, aber ich überprüfe' n'. – golddove

+0

Entschuldigung, ich schaute immer wieder auf das Original zurück und schwor einige Male, dass ich 'n' dort oben sah. Vielleicht war ich ein bisschen zu müde;) – efritz