Programiranje

Analiza izvorne kode z uporabo API-jev Java 6

avtor Seema Richard, Deepa Sobhana

Ste že kdaj pomislili, kako orodja, kot sta Checkstyle ali FindBugs, izvajajo statično analizo kode ali kako integrirana razvojna okolja (IDE), kot sta NetBeans ali Eclipse, izvajajo hitre popravke kode ali najdejo natančne sklice na polje, navedeno v vaši kodi? V mnogih primerih imajo IDE lastne API-je za razčlenitev izvorne kode in generiranje standardne drevesne strukture, imenovane Abstraktno sintaksno drevo (AST) ali "razčlenjevalno drevo", ki jo lahko uporabimo za poglobljeno analizo izvornih elementov. Dobra novica je, da je zdaj omenjene naloge in še veliko več mogoče doseči s pomočjo treh novih API-jev, uvedenih v Javi kot del izdaje Java Standard Edition 6. API-ji, ki bi lahko bili zanimivi za razvijalce aplikacij Java, ki morajo opraviti analizo izvorne kode, so API Java Compiler (JSR 199), API za obdelavo vtičnih zapisov (JSR 269) in API Compiler Tree.

V tem članku preučujemo značilnosti vsakega od teh API-jev in nadaljujemo z razvojem preproste predstavitvene aplikacije, ki preverja določena pravila kodiranja Java na naboru datotek izvorne kode, ki so na voljo kot vhod. Ta pripomoček kot izhod prikazuje tudi sporočila o kršitvi kodiranja in lokacijo kršene izvorne kode. Razmislite o preprostem razredu Java, ki preglasi metodo equals () razreda Object. Pravilo kodiranja, ki ga je treba preveriti, je, da mora vsak razred, ki izvaja metodo equals (), s pravilnim podpisom preglasiti tudi metodo hashcode (). Vidite lahko, da razred TestClass spodaj ne določa metode hashcode (), čeprav ima metodo equals ().

javni razred TestClass izvaja Serializable {int num; @Override public boolean equals (Object obj)} 

Nadaljujmo in analizirajmo ta razred kot del postopka gradnje s pomočjo teh treh API-jev.

Priklic prevajalnika iz kode: API prevajalnika Java

Vsi uporabljamo javac orodje ukazne vrstice za sestavljanje izvornih datotek Java v datoteke razredov. Zakaj potem potrebujemo API za sestavljanje datotek Java? No, odgovor je povsem preprost: kot opisuje ime, nam ta novi standardni API omogoča, da prevajalnik prikličemo iz lastnih aplikacij Java; torej lahko programsko komunicirate s prevajalnikom in s tem sestavite del storitve na ravni aplikacije. Nekatere tipične uporabe tega API-ja so navedene spodaj.

  • API prevajalnika pomaga strežnikom aplikacij, da zmanjšajo čas, potreben za razmestitev aplikacij, na primer z izogibanjem nepotrebnim stroškom uporabe zunanjega prevajalnika za prevajanje virov strežniških programčkov, ustvarjenih s strani JSP.

  • Orodja za razvijalce, kot so IDE-ji in analizatorji kode, lahko prikličejo prevajalnik znotraj urejevalnika ali izdelajo orodja, ki bistveno skrajšajo čas prevajanja.

Razredi prevajalnika Java so zapakirani pod javax.tools paket. The ToolProvider razred tega paketa ponuja metodo, imenovano getSystemJavaCompiler () ki vrne primerek nekega razreda, ki izvaja JavaCompiler vmesnik. Ta primerek prevajalnika lahko uporabite za izdelavo naloge prevajanja, ki bo izvedla dejansko prevajanje. Izvirne datoteke Java, ki jih je treba prevesti, bodo nato posredovane nalogi prevajanja. Za to API prevajalnika ponuja abstrakcijo upravitelja datotek, imenovano JavaFileManager, ki omogoča pridobivanje datotek Java iz različnih virov, kot so datotečni sistem, zbirke podatkov, pomnilnik itd. V tem vzorcu uporabljamo StandardFileManager, upravitelj datotek na osnovi java.io.File. Standardni upravitelj datotek lahko dobite s klicem getStandardFileManager () metoda JavaCompiler primer. Delček kode za zgoraj omenjene korake je prikazan spodaj:

// Pridobite primerek java prevajalnika JavaCompiler compiler = ToolProvider.getSystemJavaCompiler (); // Pridobite nov primerek izvajanja standardnega upravitelja datotek StandardJavaFileManager fileManager = prevajalnik. getStandardFileManager (null, null, null); // Pridobimo seznam datotek datotek java, v tem primeru imamo samo // eno datoteko, TestClass.java Iterable compilationUnits1 = fileManager.getJavaFileObjectsFromFiles ("TestClass.java"); 

Diagnostični poslušalec lahko poljubno pošljete na getStandardFileManager () metoda za izdelavo diagnostičnih poročil o kakršnih koli težavah, ki niso usodne. V tem delčku kode smo podali nič vrednosti, saj diagnostike ne zbiramo z orodjem. Za podrobnosti o drugih parametrih, posredovanih tem metodam, glejte Java 6 API. The getJavaFileObjectsfromFiles () metoda StandardJavaFileManager vrne vse JavaFileObject primerki, ki ustrezajo priloženim izvornim datotekam Java.

Preberite nadaljevanje tega članka

To zgodbo "Analiza izvorne kode z uporabo API-jev Java 6" je prvotno objavil JavaWorld.

$config[zx-auto] not found$config[zx-overlay] not found