Analisis Kod Sumber Menggunakan API Java 6

oleh Seema Richard, Deepa Sobhana

Pernahkah anda memikirkan bagaimana alat seperti Checkstyle atau FindBugs melakukan analisis kod statik, atau bagaimana Persekitaran Pembangunan Bersepadu (IDE) seperti NetBeans atau Eclipse melaksanakan pembaikan kod cepat atau mencari rujukan tepat bidang yang dinyatakan dalam kod anda? Dalam banyak kes, IDE mempunyai API sendiri untuk menguraikan kod sumber dan menghasilkan struktur pokok standard, yang disebut Abstract Syntax Tree (AST) atau "parse tree", yang dapat digunakan untuk analisis yang lebih mendalam mengenai elemen sumber. Berita baiknya adalah sekarang memungkinkan untuk menyelesaikan tugas-tugas tersebut ditambah banyak lagi dengan bantuan tiga API baru yang diperkenalkan di Java sebagai bagian dari rilis Java Standard Edition 6. API yang mungkin menarik bagi pengembang aplikasi Java yang perlu melakukan analisis kod sumber adalah Java Compiler API (JSR 199),API Pemrosesan Anotasi Pluggable (JSR 269), dan API Pokok Penyusun.

Dalam artikel ini, kami menjelajahi fitur masing-masing API ini dan terus mengembangkan aplikasi demo sederhana yang mengesahkan peraturan pengkodean Java tertentu pada sekumpulan fail kod sumber yang disediakan sebagai input. Utiliti ini juga menunjukkan mesej pelanggaran pengekodan serta lokasi kod sumber yang dilanggar sebagai output. Pertimbangkan kelas Java sederhana yang menggantikan kaedah sama dengan () kelas Objek. Peraturan pengekodan yang akan disahkan adalah bahawa setiap kelas yang menerapkan kaedah sama () juga harus mengganti kaedah hashcode () dengan tandatangan yang betul. Anda dapat melihat bahawa kelas TestClass di bawah tidak menentukan kaedah hashcode (), walaupun mempunyai kaedah sama ().

public class TestClass implements Serializable { int num; @Override public boolean equals(Object obj)  } 

Mari kita teruskan dan menganalisis kelas ini sebagai sebahagian daripada proses membina dengan bantuan ketiga-tiga API ini.

Memohon Compiler dari Code: Java Compiler API

Kita semua menggunakan javacalat baris perintah untuk menyusun fail sumber Java ke fail kelas. Lalu mengapa kita memerlukan API untuk menyusun fail Java? Jawapannya cukup mudah: seperti namanya, API standard baru ini membolehkan kita memanggil penyusun dari aplikasi Java kita sendiri; iaitu, anda dapat berinteraksi secara berkala dengan penyusun dan dengan itu menjadikan penyusunan sebagai sebahagian daripada perkhidmatan peringkat aplikasi. Beberapa kegunaan khas API ini disenaraikan di bawah.

  • API penyusun membantu pelayan aplikasi untuk meminimumkan masa yang diperlukan untuk menyebarkan aplikasi, misalnya, dengan mengelakkan overhead menggunakan penyusun luaran untuk menyusun sumber servlet yang dihasilkan dari halaman JSP.

  • Alat pembangun seperti IDE dan penganalisis kod dapat memanggil penyusun dari dalam editor atau membina alat yang dapat mengurangkan masa penyusunan dengan ketara.

Kelas penyusun Java dipakejkan di bawah javax.toolspakej. The ToolProviderkelas pakej ini menyediakan kaedah yang dipanggil getSystemJavaCompiler()pulangan berdasarkan sejenis kelas yang melaksanakan JavaCompilerantara muka. Contoh penyusun ini dapat digunakan untuk membuat tugas penyusunan yang akan melakukan penyusunan sebenarnya. Fail sumber Java yang akan disusun kemudian akan diserahkan ke tugas penyusunan. Untuk ini, API penyusun menyediakan pengabstrakan pengurus fail yang disebut JavaFileManager, yang membolehkan fail Java diambil dari pelbagai sumber, seperti sistem fail, pangkalan data, memori, dan sebagainya. Dalam sampel ini, kami menggunakan StandardFileManager, pengurus fail berdasarkan java.io.File. Pengurus fail standard boleh diperoleh dengan memanggil getStandardFileManager()kaedahJavaCompilercontoh. Coretan kod untuk langkah-langkah yang disebutkan di atas ditunjukkan di bawah:

//Get an instance of java compiler JavaCompiler compiler = ToolProvider.getSystemJavaCompiler(); //Get a new instance of the standard file manager implementation StandardJavaFileManager fileManager = compiler. getStandardFileManager(null, null, null); // Get the list of java file objects, in this case we have only // one file, TestClass.java Iterable compilationUnits1 = fileManager.getJavaFileObjectsFromFiles("TestClass.java"); 

Seorang pendengar diagnostik boleh diberikan kepada getStandardFileManager()kaedah untuk menghasilkan laporan diagnostik mengenai masalah yang tidak membawa maut. Dalam coretan kod ini, kami memberikan nullnilai, kerana kami tidak mengumpulkan diagnostik dari alat tersebut. Untuk perincian parameter lain yang diteruskan ke kaedah ini, rujuk API Java 6. The getJavaFileObjectsfromFiles()kaedah yang StandardJavaFileManagerpulangan semua JavaFileObjectcontoh-contoh yang sesuai dengan fail sumber Java dibekalkan.

Baca selebihnya artikel ini

Kisah ini, "Analisis Kod Sumber Menggunakan Java 6 API" pada awalnya diterbitkan oleh JavaWorld.