2013-02-22 20 views
7

में निम्नलिखित कोड मुझे ग्रहण में एक 'मृत कोड' चेतावनी देता है:अवांछित मृत कोड चेतावनी ग्रहण

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; कहते हैं पर दिखाई देता है।

मैंने मृत कोड देखा और पाया कि कोड टोपी का कोई प्रभाव नहीं है और इसलिए जावा कंपाइलर द्वारा अनदेखा किया जाएगा।

हालांकि, यह रूट मेरी कक्षा में एक निजी क्षेत्र है और इसलिए यह मेरे कार्यक्रम के कार्य के लिए आवश्यक है जो मैं करता हूं।

क्या संकलक वास्तव में इसे अनदेखा कर रहा है? मैं इसे कैसे रोक सकता हूं? ऐसा क्यों लगता है कि यह मृत कोड है?

+1

क्या वास्तविक कोड है? –

+2

कोड को साफ और पुनर्निर्माण करें, थोड़ी देर में ग्रहण बग्स एक बार बाहर निकालें। –

+1

मुझे लगता है कि ऐसा होने का एकमात्र समय यह है कि अगर रूट शून्य के लिए असंभव होगा। शायद यह चर देखें जहां यह चर इस्तेमाल किया जाता है। – austin

उत्तर

2

तो root अपनी कक्षा में एक निजी क्षेत्र है कि add विधि तुम्हें तैनात है, तो होता है, जैसा कि आप ने कहा, लाइन root = e; नहीं ग्रहण आईडीई द्वारा मृत कोड माना जाना चाहिए।

कंपाइलर को ठीक काम करना चाहिए ... यह सिर्फ एक आईडीई चेतावनी है।

मेरा अनुमान है कि ग्रहण कोड पथ निर्धारित करने और "मृत कोड" और "पहुंचने योग्य कोड" ढूंढने के लिए कुछ प्रकार के कोड चलने (चक्रवात जटिलता उपकरण के समान) करता है।

मैं ताज़ा करने की कोशिश करता हूं, फिर एक साफ और आईडीई में निर्माण करता हूं। यदि यह इसे हल नहीं करता है, तो ग्रहण पर मृत कोड पर चेतावनी पर "झूठी सकारात्मक" हो सकती है। पहली बार नहीं होगा ... मैं ग्रहण और इंटेलिजे आईडीईए दोनों का उपयोग करता हूं और दोनों आईडीई पहले कोड पर गलत तरीके से चेतावनी देते हैं। हालांकि, आईडीई चेतावनी के बावजूद मेरा कोड अभी भी ठीक संकलित है।

2

संभवतः दो समस्याएं चल रही हैं: पहला: मुद्दा यह है कि लाइन रूट किसी भी चीज़ के लिए "उपयोग" नहीं है। FindBugs में एक ही गलती एक "मृत दुकान" जो, प्रति findbugs का मतलब है के रूप में भेजा जाता है:

यह निर्देश एक स्थानीय चर के लिए एक मूल्य प्रदान करती है, लेकिन मान नहीं पढ़ा जा रहा है या बाद में किसी भी शिक्षा में इस्तेमाल किया। अक्सर, यह एक त्रुटि इंगित करता है, क्योंकि गणना की गई मान का कभी भी उपयोग नहीं किया जाता है।

ध्यान दें कि यहां कीवर्ड "अक्सर" है।

मैं जांचता हूं और सुनिश्चित करता हूं कि जड़ का उपयोग किया जा रहा है जैसा कि आप उम्मीद करते हैं, और अगर ऐसा हो सकता है, जैसा कि फिलिप टेन ने एक झूठी सकारात्मक बताया है।

दूसरा: आपकी समस्या this issue से संबंधित हो सकती है।

1

चूंकि स्रोत सही कारण खोजने के लिए पर्याप्त नहीं है, मुझे लगता है कि यह मृत कोड से संबंधित ग्रहण में मुद्दों से संबंधित है। कुछ समस्याएं आप 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

क्षमा करें, मैंने मूल पर वापस देख रखा और कई बार शपथ ली कि मैंने वहां 'एन' देखा था। शायद मैं थोड़ा थक गया था;) – efritz