Analisis Kode Sumber Menggunakan Java 6 API

oleh Seema Richard, Deepa Sobhana

Pernahkah Anda memikirkan bagaimana alat seperti Checkstyle atau FindBugs melakukan analisis kode statis, atau bagaimana Integrated Development Environments (IDEs) seperti NetBeans atau Eclipse menjalankan perbaikan kode cepat atau menemukan referensi yang tepat dari bidang yang dinyatakan dalam kode Anda? Dalam banyak kasus, IDE memiliki API sendiri untuk mengurai kode sumber dan menghasilkan struktur pohon standar, yang disebut Pohon Sintaks Abstrak (AST) atau "pohon parse", yang dapat digunakan untuk analisis elemen sumber lebih dalam. Kabar baiknya adalah bahwa sekarang dimungkinkan untuk menyelesaikan tugas-tugas tersebut ditambah lebih 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 kode sumber adalah Java Compiler API (JSR 199),API Pemrosesan Anotasi Pluggable (JSR 269), dan API Pohon Kompilator.

Dalam artikel ini, kami menjelajahi fitur dari masing-masing API ini dan melanjutkan untuk mengembangkan aplikasi demo sederhana yang memverifikasi aturan pengkodean Java tertentu pada sekumpulan file kode sumber yang disediakan sebagai input. Utilitas ini juga menampilkan pesan pelanggaran pengkodean serta lokasi kode sumber yang dilanggar sebagai keluaran. Pertimbangkan kelas Java sederhana yang menimpa metode equals () dari kelas Object. Aturan pengkodean yang akan diverifikasi adalah bahwa setiap kelas yang mengimplementasikan metode equals () juga harus mengganti metode hashcode () dengan tanda tangan yang tepat. Anda dapat melihat bahwa kelas TestClass di bawah ini tidak mendefinisikan metode hashcode (), meskipun ia memiliki metode equals ().

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

Mari kita lanjutkan dan analisis kelas ini sebagai bagian dari proses pembangunan dengan bantuan tiga API ini.

Memanggil Kompilator dari Kode: Java Compiler API

Kita semua menggunakan javacalat baris perintah untuk menyusun file sumber Java ke file kelas. Lalu mengapa kita membutuhkan API untuk mengkompilasi file Java? Jawabannya cukup sederhana: seperti yang dijelaskan oleh namanya, API standar baru ini memungkinkan kita memanggil kompilator dari aplikasi Java kita sendiri; yaitu, Anda dapat berinteraksi secara terprogram dengan kompilator dan karenanya menjadikan kompilasi sebagai bagian dari layanan tingkat aplikasi. Beberapa penggunaan umum API ini tercantum di bawah ini.

  • Compiler API membantu server aplikasi meminimalkan waktu yang dibutuhkan untuk menyebarkan aplikasi, misalnya, dengan menghindari penggunaan kompilator eksternal untuk mengompilasi sumber servlet yang dihasilkan dari halaman JSP.

  • Alat pengembang seperti IDE dan penganalisis kode dapat memanggil compiler dari dalam editor atau alat build yang secara signifikan mengurangi waktu kompilasi.

Kelas kompilator Java dikemas di bawah javax.toolspaket. The ToolProviderkelas paket ini menyediakan metode yang disebut getSystemJavaCompiler()bahwa return sebuah contoh dari beberapa kelas yang mengimplementasikan tersebut JavaCompilerantarmuka. Instance compiler ini dapat digunakan untuk membuat tugas kompilasi yang akan melakukan kompilasi sebenarnya. File sumber Java yang akan dikompilasi kemudian diteruskan ke tugas kompilasi. Untuk ini, Compiler API menyediakan abstraksi pengelola file yang dipanggil JavaFileManager, yang memungkinkan file Java diambil dari berbagai sumber, seperti sistem file, database, memori, dan sebagainya. Dalam contoh ini, kami menggunakan StandardFileManager, pengelola file berdasarkan java.io.File. Manajer file standar dapat diperoleh dengan memanggil getStandardFileManager()metode fileJavaCompilercontoh. Potongan kode untuk langkah-langkah yang disebutkan di atas ditampilkan di bawah ini:

//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"); 

Pendengar diagnostik dapat secara opsional diteruskan ke getStandardFileManager()metode untuk menghasilkan laporan diagnostik dari setiap masalah non-fatal. Dalam potongan kode ini, kami meneruskan nullnilai, karena kami tidak mengumpulkan diagnostik dari alat tersebut. Untuk detail tentang parameter lain yang diteruskan ke metode ini, lihat Java 6 API. The getJavaFileObjectsfromFiles()metode dari StandardJavaFileManagerhasil semua JavaFileObjectkasus yang sesuai dengan file sumber Java yang disediakan.

Baca sisa artikel ini

Artikel ini, "Analisis Kode Sumber Menggunakan Java 6 API" awalnya diterbitkan oleh JavaWorld.