จะค้นหาคลาสที่ไม่ได้ใช้ทั้งหมดใน Intellij Idea ได้อย่างไร


126

มีการตรวจสอบ "Unused Declaration" ซึ่งสามารถค้นหาโค้ดที่ไม่ได้ใช้ทั้งหมดใน Intellij Idea (ดูคำถามนี้ ) แต่ฉันต้องการค้นหาคลาสที่ไม่ได้ใช้ทั้งหมดไม่ใช่วิธีการตัวแปร ฯลฯเฉพาะคลาส (เป็นการยากที่จะค้นหาเฉพาะคลาสในรายการผลลัพธ์ 3000 รายการ) ฉันจะทำเช่นนั้นได้อย่างไร?


เพียงแค่เรียกใช้การตรวจสอบคลิกปุ่มขวาและดูสิ่งนี้ในรายการเมนู
เชอร์รี่

นั่นคือสองคำถาม - ควรเป็นคำถามแยกกัน serialVersionXXX เป็นความคิดที่ไม่ดีสำหรับโครงการส่วนใหญ่
Software Engineer

เป็นความคิดที่ไม่ดีเพราะมีนักพัฒนาเพียงไม่กี่คนที่รู้ว่ามันมีไว้เพื่ออะไรและมักจะถูกใช้ในทางที่ผิด เป็นเรื่องยากมากใน java ที่จะใช้กลไกการทำให้เป็นอนุกรมเพื่ออ่านและเขียนออบเจ็กต์ในระดับไบต์และหากคุณทำเวอร์ชันอนุกรมเริ่มต้นมักจะเพียงพอที่จะให้ความปลอดภัย ต้องมีการอัปเดต SerialVersion แบบฮาร์ดโค้ดด้วยตนเองทุกครั้งที่อินเทอร์เฟซของคลาสเปลี่ยนไปและทุกครั้งที่รายการฟิลด์เปลี่ยนไป - โดยปกตินักพัฒนาจะไม่ทำเช่นนี้เพราะพวกเขาไม่เข้าใจว่า serialVersion มีไว้เพื่ออะไร สาเหตุหลักที่คุณเห็นในโค้ดเป็นเพราะคราส
Software Engineer

คำตอบ:


218
  • กดCtrl+ Shift+ A(ใน Mac Command+ Shift+ A)
  • ป้อน "decar ที่ไม่ได้ใช้"
  • ดับเบิลคลิกที่ "Unused Declaration"

การตั้งค่าจะปรากฏขึ้น

  • คลิกที่ Java / Declaration Redundancy / Unused Declaration
  • ที่ด้านล่างขวาเลือก "On the fly editor settings"
  • ยกเลิกการเลือกช่องตรวจสอบ ... ตรวจสอบพารามิเตอร์ ควรเลือกเฉพาะ Check Class เท่านั้น
  • กด OK

การตั้งค่าปิด

  • บนแถบเมนูคลิกที่วิเคราะห์ / เรียกใช้การตรวจสอบตามชื่อ (หรือCtrl+ Alt+ Shift+ I- ใน Mac Command+ Option+ Shift+ I)
  • แทรกข้อความ "Unused Decla"
  • เลือก "Unused Declaration Java | Declaration redundancy"

การค้นหาเริ่มต้นขึ้น

  • ตรวจสอบสถานะงานที่ด้านล่างของ Idea เมื่อเสร็จสิ้น: เพลิดเพลินกับผลลัพธ์และความรู้สึกที่ยอดเยี่ยมในการทำความสะอาดโค้ดที่ยุ่งเหยิง :)

การโพสต์คำตอบเดียวกันเกือบทุกข้อภายในสองสามนาทีไปยังคำถามหลายข้อแนะนำว่าหนึ่งในนั้น ios ซ้ำกับอีกข้อ โปรดทำเครื่องหมายเป็นดังกล่าว
Jaap

3
หนึ่งในนั้นมีไว้สำหรับการใช้งาน IntelliJ Idea โดยเฉพาะอีกรายการหนึ่งสำหรับ Java ทั่วไป ฉันจะไม่บอกว่านี่เป็นการทำซ้ำ
BlondCode

7
มันละเว้นการกำหนดค่า "ตรวจสอบเฉพาะชั้นเรียน" ดังนั้นฉันจึงได้รับผลลัพธ์ที่ไม่ต้องการมากมาย (วิธีการที่ไม่ได้ใช้ช่อง ฯลฯ และที่แย่ไปกว่านั้นคือส่วนใหญ่เป็นผลบวกปลอมด้วยเหตุผลหลายประการ ... )
thelawnmowerman

6
มีการเปลี่ยนแปลงใน Studio 3.0 ตัวเลือกการตรวจสอบคลาสเท่านั้นที่เกิดขึ้นหลังจากขั้นตอน: เลือก "Unused Declaration Java | Declaration redundancy"
Sourabh Saldi

4
เราไม่จำเป็นต้องเปลี่ยนการตั้งค่าส่วนกลางเพื่อเรียกใช้การตรวจสอบด้วยพารามิเตอร์ที่แตกต่างกัน การดำเนินการเรียกใช้การตรวจสอบตามชื่อจะแสดงการตั้งค่าสำหรับการตรวจสอบ
TWiStErRob

11

ฉันไม่คิดว่าจะทำได้ ฉันสงสัยว่าคุณลักษณะนี้ถูกละทิ้งจาก IDE โดยเจตนาเนื่องจากไม่สามารถใช้งานได้อย่างปลอดภัยในแบบที่ "ลบการปรับแต่ง XXX ที่ไม่ได้ใช้" อื่น ๆ สามารถทำได้

IDEA การประกาศที่ไม่ได้ใช้ (และ AFAIK, NetBeans) มองหามีไว้สำหรับสมาชิกส่วนตัวและตัวแปรท้องถิ่น: สิ่งที่ไม่สามารถเข้าถึงได้แม้ในแบบไดนามิกจากภายนอกคลาสหรือขอบเขตนั้น (อย่างน้อยก็ไม่มีการทำสิ่งต่างๆด้วยการแฮ็ก Reflection หรือ JVM ที่คุณไม่ควรทำ) ไม่ว่าโค้ดภายนอกจะทำอะไรกับไลบรารีของคุณก็จะไม่ทำให้สิ่งเหล่านั้นถูกนำไปใช้เนื่องจากขอบเขตมี จำกัด และ IDE สามารถดูได้ทั้งหมด คอมไพเลอร์สามารถกำหนดสิ่งนี้ได้โดยดูแค่โค้ดของคุณ

สำหรับชั้นเรียนแม้ว่าจะไม่มีpublicสิทธิ์เข้าถึง แต่ก็สามารถอ้างอิงได้แบบไดนามิกด้วยClass.forName()และสิ่งนี้เกิดขึ้นจริงในโค้ดสด ดังนั้นแม้ว่าจะไม่เห็นได้ชัดว่ามีการใช้โค้ดในโครงการของคุณ แต่ก็อาจถูกใช้ขึ้นอยู่กับสิ่งที่คุณหรือโค้ดภายนอกที่ใช้ไลบรารีของคุณเรียกใช้ ดังนั้น IDE จึงไม่สามารถรับประกันได้ว่าการลบคลาสเหล่านั้นจะไม่เปลี่ยนพฤติกรรมที่สังเกตได้จากภายนอก

ด้วยเหตุนี้ฉันจึงคิดว่า IDEA ไม่ได้ให้พฤติกรรมนี้มันอาจทำให้ผู้ใช้คาดหวังเรื่องความปลอดภัยที่ผิดพลาดและการลบออกไม่ใช่การปรับโครงสร้างใหม่อย่างปลอดภัย


6
ชื่อคลาสจะเป็นสีเทาเมื่อดูไฟล์จริงและให้คุณดำเนินการโดยตั้งใจที่จะ "ลบคลาสที่ไม่ได้ใช้" สิ่งที่ขาดหายไปคือสามารถค้นหาได้โดยอัตโนมัติ แน่นอนว่ามีหลายวิธีที่สามารถทำลายสิ่งต่างๆได้ แต่นั่นเป็นความจริงของการปรับแต่งหลายอย่าง
Rob Fletcher

2
Class.forName () ไม่แตกต่างจากประเด็นของความปลอดภัยในการวิเคราะห์มากกว่าการใช้การสะท้อนเพื่ออ่าน / ตั้งค่าฟิลด์ส่วนตัวในคลาส ดังนั้นหาก IntelliJ จะทำสิ่งนี้สำหรับฟิลด์นั่นไม่ใช่คำตอบที่ยอมรับได้ว่าทำไมมันถึงไม่ทำกับคลาสด้วย ไม่ว่าในกรณีใดผลการวิเคราะห์จะไม่รับประกันว่าปลอดภัย 100%
สุนัข

1

บางทีคุณควรUnused Symbolตรวจสอบการตั้งค่าต่อไปนี้:

ใส่คำอธิบายภาพที่นี่


ฮา! ดูเหมือนจะไม่ :-) ฉันปิดทุกอย่างในกลุ่ม "การประกาศที่ไม่ได้ใช้" และเหลือเพียง "สัญลักษณ์ที่ไม่ได้ใช้" กับ "คลาสตรวจสอบ" เท่านั้น แต่ผลลัพธ์ไม่เปลี่ยนแปลง :-(
เชอร์รี่

@ เชอร์รี่เสียใจที่ได้ยิน ... บางทีคุณควรส่งข้อบกพร่องไปยัง jetbrains
วิก

1

ฉันไม่แน่ใจว่าสิ่งนี้จะตอบคำถามของคุณได้หรือไม่ แต่ฉันเคยใช้เครื่องมือในอดีตเป็น Fortify เพื่อเรียกใช้กฎการตรวจสอบโค้ดในโครงการซึ่งชี้ไปที่การนำเข้าที่ไม่ได้ใช้รหัสที่ตายแล้วคลาสที่ไม่ได้ใช้ ฯลฯ เป็นซอฟต์แวร์ที่ต้องชำระเงิน แต่ฉัน แน่ใจว่าจะมีปลั๊กอิน / ซอฟต์แวร์ฟรีบางตัวพร้อมใช้งาน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.