Java-koodin käännös

JDT-lisäosat sisältävät vaiheittaisen ja erämuotoisen Java-kääntäjän Javan .class-tiedostojen lähdekoodista luomista varten. Kääntäjässä ei ole suoraa sovellusohjelmaliittymää. Se asennetaan luontitoimintona Java-projekteihin. Käännös liipaistaan tavanomaisilla ympäristön koontitoimilla.

Ympäristön koontitoimintamalli on kuvattu yksityiskohtaisesti ohjeaiheessa Projektien vaiheittaiset luontitoiminnot .

Koodin käännös

Voit kääntää projektin Java-lähdetiedostot ohjelmallisesti koontisovellusohjelmaliittymän avulla.

   IProject myProject;
   IProgressMonitor myProgressMonitor;
   myProject.build(IncrementalProjectBuilder.INCREMENTAL_BUILD, myProgressMonitor);

Java-projektissa tämä toteuttaa Java-projektin vaiheittaisen luontitoiminnon (yhdessä muiden mahdollisesti projektin koontimäärityksiin lisättyjen projektin luontitoimintojen kanssa). Muodostetut .class-tiedostot kirjoitetaan määritettyyn tulostuskansioon. Myös muita resurssitiedostoja kopioidaan tulostuskansioon. 

Jos kyseessä on täysi eräkoonti, kaikki tulostuskansion .class-tiedostot voidaan 'puhdistaa' ja näin varmistaa, ettei vanhentuneita tiedostoja ole. Tätä ohjataan JDT-ydinluontitoiminnon vaihtoehdolla(CORE_JAVA_BUILD_CLEAN_OUTPUT_FOLDER).  Tämän vaihtoehdon oletusarvona on tulostuskansioiden siivous.  Ellei tätä vaihtoehtoa palauteta, on varmistettava, että kaikki .class-tiedostot, joilla ei ole vastaavia lähdetiedostoja, ovat erillisessä luokkatiedostokansiossa luokkapolussa tulostuskansion sijaan.

Vaiheittaiset ja eräluontitoiminnot voi määrittää muilla vaihtoehdoilla, jotka ohjaavat, mitä resursseja kopioidaan tulostuskansioon.  Seuraava esimerkki kuvaa, miten asetetaan resurssisuodatin niin, että tiedostoja, joiden lopussa on '.ignore', ja kansioita, joiden nimi on 'META-INF', ei kopioida tulostuskansioon:

   Hashtable options = JavaCore.getOptions();
   options.put(JavaCore.CORE_JAVA_BUILD_RESOURCE_COPY_FILTER, "*.ignore,META-INF/");
   JavaCore.setOptions(options);

Tiedostojen nimet suodatetaan, jos ne vastaavat jotakin annetuista malleista. Kokonaiset kansiot suodatetaan, jos niiden nimi vastaa jotakin annetuista kansioiden nimistä, jotka päättyvät polun erottimeen.

Vaiheittaiset ja eräluontitoiminnot voidaan määrittää myös muodostamaan vain yksi virhe, jos .classpath-tiedostossa on virheitä. Tämä vaihtoehto on käytössä oletuksena, ja se poistaa lukuisat virheet.  Täydellinen luettelo luontitoimintoihin liittyvistä vaihtoehdoista ja niiden oletusarvoista on ohjeaiheessa JDT-ydinosan luontitoiminnon vaihtoehdot.

Kääntäjän kokoonpanon voi määrittää myös JavaCore-vaihtoehtojen avulla.  Voit esimerkiksi määrittää vakavuuden, jota käytetään erilaisille käännöksen yhteydessä löytyville häiriöille.  Täydellinen luettelo kääntäjään liittyvistä vaihtoehdoista ja niiden oletusarvoista on ohjeaiheessa JDT-ydinosan kääntäjän vaihtoehdot.

Kun luontitoiminnon tai kääntäjän vaihtoehtoja määritetään ohjelmallisesti, on määritettävä vaihtoehdon toiminta-alue.  Esimerkiksi resurssisuodattimen asetus voi koskea vain tiettyä projektia:

   
   Hashtable options = myProject.getOptions(false);  // hae vain tässä projektissa asetetut vaihtoehdot
   options.put(JavaCore.CORE_JAVA_BUILD_RESOURCE_COPY_FILTER, "*.ignore,META-INF/");
   myProject.setOptions(options);

Eräkääntäjän käyttö

Eräkääntäjän haku

Eräkääntäjäluokka sijaitsee JDT Core -lisäosan sisäisissä luokissa. Luokan nimi on org.eclipse.jdt.internal.compiler.batch.Main. Se on paketissa plugins/org.eclipse.jdt.core_3.2.0.jar. Versiosta 3.2 alkaen luokan on voinut myös noutaa erikseen. Noudettavan tiedoston nimi on ecj.jar. Sitä vastaava lähde on myös käytettävissä. Jos haluat ladata kyseiset tiedostot, siirry lataussivulle ja hae sieltä osio JDT Core -eräkääntäjä. Tämä JAR-tiedosto sisältää eräkääntäjän ja Javac Ant -sovittimen.

Sitä voi näin ollen käyttää erillisenä sovelluksena ja Eclipsen ulkopuolisessa Ant-koonnissa.

Eräkääntäjän ajo

Mitkä vaihtoehdot ovat käytettävissä?

Oranssilla taustalöla nämä ovat ehdotetut vaihtoehdot.

Nimi Käyttö
Luokkapolun vaihtoehdot
-bootclasspath <dir 1>;<dir 2>;...;<dir P> Tämä on luettelo hakemistoista tai jar-tiedostoista, joita käytetään kääntäjän käyttämien luokkatiedostojen käynnistykseen. Ajossa olevan näennäiskoneen kirjastot ovat oletuksena käytössä. Merkinnät erotetaan ympäristön polkuerottimella.
Jokainen hakemisto tai tiedosto voi määrittää tyyppien saantisäännöt merkkien [ ja ] väliin.
-cp
-classpath <dir 1>;<dir 2>;...;<dir P>
Tämä on luettelo hakemistoista tai jar-tiedostoista, joita käytetään lähdetiedostojen käännökseen. Oletusarvo on ominaisuuden "java.class.path" arvo. Merkinnät erotetaan ympäristön polkuerottimella.
Jokainen hakemisto tai tiedosto voi määrittää tyyppien saantisäännöt merkkien [ ja ] väliin (esim. [-X] kiellä tyypin X käyttö, [~X] älä suosittele tyypin X käyttöä, [+p/X:-p/*] kiellä paketin p kaikkien tyyppien käyttö, mutta salli p/X:n käyttö).
-extdirs <dir 1>;<dir 2>;...;<dir P> Tämä on luettelo hakemistoista, joita käytetään zip- tai jar-tunnisteisten tiedostojen sijainnin määritykseen. Merkinnät erotetaan ympäristön polkuerottimella.
-endorseddirs <dir 1>;<dir 2>;...;<dir P> Tämä on luettelo hakemistoista, joita käytetään zip- tai jar-tunnisteisten tiedostojen sijainnin määritykseen. Merkinnät erotetaan ympäristön polkuerottimella.
-sourcepath <dir 1>;<dir 2>;...;<dir P> Tämä on luettelo hakemistoista, joita käytetään lähdetiedostojen määritykseen. Merkinnät erotetaan ympäristön polkuerottimella.
Jokainen hakemisto voi määrittää tyyppien saantisäännöt merkkien [ ja ] väliin.
-d <dir 1>|none Tätä käytetään määrittämään, mihin hakemistoon muodostetut .class-tiedostot tulee vedostaa. Jos se jätetään pois, paketin hakemistorakennetta ei luoda.
Jos et halua muodostaa .class-tiedostoja, käytä vaihtoehtoa -d none.
-encoding <koodauksen nimi> Määritä lähteen oletuskoodausmuoto (mukautetun koodauksen voi määrittää myös tiedostokohtaisesti lisäämällä kunkin annetun lähdetiedoston tai -kansion nimeen loppuliitteen [<koodauksen nimi>], esimerkiksi X.java[utf8]).
Yhdeensopivuusvaihtoehdot
-target 1.1|1.2|1.3|1.4|1.5|5|5.0|1.6|6|6.0 Tämä määrittää .class-tiedoston kohdeasetuksen. Mahdolliset arvot ovat seuraavat:
  • 1.1 (pääversio: 45 alaversio: 3)
  • 1.2 (pääversio: 46 alaversio: 0)
  • 1.3 (pääversio: 47 alaversio: 0)
  • 1.4 (pääversio: 48 alaversio: 0)
  • 1.5, 5 tai 5.0 (pääversio: 49 alaversio: 0)
  • 1.6, 6 tai 6.0 (pääversio: 50 alaversio: 0)
Oletusarvot ovat seuraavat:
  • 1.1 tilassa -1.3
  • 1.2 tilassa -1.4
  • 1.5 tilassa -1.5
  • 1.6 tilassa -1.6
-1.3 Aseta yhteensopivuustasoksi 1.3. Implisiittinen -source 1.3 -target 1.1.
-1.4 Aseta yhteensopivuustasoksi 1.4. Implisiittinen -source 1.3 -target 1.2.
-1.5 Aseta yhteensopivuustasoksi 1.5. Implisiittinen -source 1.5 -target 1.5.
-1.6 Aseta yhteensopivuustasoksi 1.6. Implisiittinen -source 1.6 -target 1.6.
-source 1.3|1.4|1.5|5|5.0|1.6|6|6.0 Tämän valinnan avulla määritetään lähteen taso, jota kääntäjä odottaa.
Mahdolliset arvot ovat seuraavat:
  • 1.3
  • 1.4
  • 1.5, 5 tai 5.0
  • 1.6, 6 tai 6.0
Oletusarvot ovat seuraavat:
  • 1.3 tilassa -1.3
  • 1.3 tilassa -1.4
  • 1.5 tilassa -1.5
  • 1.6 tilassa -1.6
1.4-tilassa assert käsitellään avainsanana. 1.5- ja 1.6-tilassa enum ja assert käsitellään avainsanoina.
Varoitusvaihtoehdot
-warn:
allDeprecation
allJavadoc
assertIdentifier
boxing
charConcat
conditionAssign
constructorName
dep-ann
deprecation
discouraged
emptyBlock
enumSwitch
fallthrough
fieldHiding
finalBound
finally
forbidden
hiding
incomplete-switch
indirectStatic
intfAnnotation
intfNonInherited
javadoc
localHiding
maskedCatchBlocks
nls
noEffectAssign
null
over-ann
paramAssign
pkgDefaultMethod
raw
semicolon
serial
specialParamHiding
static-access
staticReceiver
suppress
synthetic-access
syntheticAccess
tasks(<task1>|...|<taskN>)
typeHiding
unchecked
unnecessaryElse
unqualified-field-access
unqualifiedField
unused
unusedArgument
unusedImport
unusedLabel
unusedLocal
unusedPrivate
unusedThrown
uselessTypeCheck
varargsCast
warningToken
Aseta varoitustaso.
esim. -warn:unusedLocal,deprecation

Oletusasetukset ovat punaisella.

    -warn:none                               kaikkien varoitusten poisto käytöstä
    -warn:<varoitukset, erottimena ,>    lueteltujen varoitusten ottaminen käyttöön
    -warn:+<varoitukset, erottimena ,>   lisävaroitusten ottaminen käyttöön
    -warn:-<varoitukset, erottimena ,>   tiettyjen varoitusten poistaminen käytöstä
allDeprecation vanhentuminen myös vanhentuneen koodin sisällä
allJavadoc virheellinen tai puuttuva javadoc
assertIdentifier assert-lauseketta käytetään tunnuksena
boxing automaattisen lokeroinnin muunto
charConcat kun char-taulukkoa käytetään merkkijonon liitostuksessa muuntamatta eksplisiittisesti merkkijonoksi
conditionAssign mahdollinen tahaton looginen osoitus
constructorName metodilla on konstruktorin nimi
dep-ann puuttuva @Deprecated-huomautus
deprecation vanhentuneen tyypin tai jäsenen käyttö vanhentuneen koodin ulkopuolella
discouraged ei-suositeltua saantisääntöä vastaavien tyyppien käyttö
emptyBlock dokumentoimaton tyhjä lohko
enumSwitch,
incomplete-switch
epätäydellinen enum-kytkin
fallthrough mahdollinen toteutumaton case-haara
fieldHiding kenttä piilottaa toisen muuttujan
finalBound tyypin parametri, jossa on lopullinen raja
finally finally-lohko, joka ei pääty normaalisti
forbidden kiellettyä saantisääntöä vastaavien tyyppien käyttö
hiding fieldHiding-, localHiding-, typeHiding- ja maskedCatchBlock-makro
indirectStatic epäsuora viite staattiseen jäseneen
intfAnnotation huomautustyyppiä käytetään super-rajapintana
intfNonInherited rajapinnan ei-perityn metodin yhteensopivuus
javadoc virheellinen javadoc
localHiding paikallismuuttuja piilottaa toisen muuttujan
maskedCatchBlocks piilotettu catch-lohko
nls ei-nls-merkkijonoliteraalit (tunnisteet //$NON-NLS-<n> puuttuvat)
noEffectAssign osoitus, jolla ei ole vaikutusta
null puuttuva tai tarpeeton null-tarkistus
over-ann puuttuva @Override-huomautus
paramAssign osoitus parametriin
pkgDefaultMethod yritys ohittaa paketin oletusmetodi
raw muotoilemattoman tyypin käyttö (parametroidun tyypin sijaan)
semicolon tarpeeton puolipiste tai tyhjä lause
serial puuttuva serialVersionUID
specialParamHiding konstruktori tai asetusparametri piilottaa toisen kentän
static-access indirectStatic- ja staticReceiver-makro
staticReceiver käytetäänkö ei-staattista vastaanottajaa staattisen kentän hakuun tai staattisen metodin kutsuun
suppress ota @SuppressWarnings käyttöön
syntheticAccess,
synthetic-access
kun käytetään sisäluokkaa synteettisesti
tasks ota lähdekoodin tehtävätunnisteiden tuki käyttöön
typeHiding tyypin parametri piilottaa toisen tyypin
unchecked tarkistamattoman tyypin käyttö
unnecessaryElse tarpeeton else-lause
unqualified-field-access,
unqualifiedField
tarkentamaton viite kenttään
unused unusedArgument-, unusedImport-, unusedLabel-, unusedLocal-, unusedPrivate- ja unusedThrown-makro
unusedArgument käyttämätön metodin argumentti
unusedImport käyttämätön tuontiviite
unusedLabel käyttämätön nimiö
unusedLocal käyttämätön paikallismuuttuja
unusedPrivate käyttämätön yksityisen jäsenen esittely
unusedThrown käyttämätön esitelty aiheutettu poikkeus
uselessTypeCheck tarpeeton cast/instanceof-toiminto
varargsCast varargs-argumentti edellyttää eksplisiittistä lajinvaihtoa
warningToken käsittelemätön varoitussanake @SuppressWarnings-huomautuksessa

-nowarn Ei varoitusta (vastaava kuin -warn:none)
-deprecation Vastaava kuin -warn:deprecation.
Vianmäärityksen asetukset
-g[:none|:lines,vars,source] Aseta vianmäärityksen määritteiden taso
-g Kaikki vianmääritystiedot (vastaava kuin -g:lines,vars,source)
-g:none Ei vianmääritystietoja
-g:[lines,vars,source] Valitut vianmääritystiedot
-preserveAllLocals Pyydä kääntäjää nimenomaisesti säilyttämään kaikki paikallismuuttujat (vianmääritystä varten). Jos tämä jätetään pois, kääntäjä poistaa käyttämättömät paikallismuuttujat.
Ohitetut asetukset (Javac-asetusten kanssa yhteensopivuutta varten)
-J<asetus> välitä asetus näennäiskoneelle
-X<asetus> määritä standardista poikkeava asetus. -Xemacs-vaihtoehtoa ei ohiteta.
-X tulosta standardista poikkeavat asetukset ja lopeta
-O optimoi toteutuksen ajaksi
Lisävaihtoehdot
@<file> Lue komentorivin argumentit tiedostosta
-maxProblems <n> Häiriöiden enimmäismäärä käännösyksikköä kohti (oletuksena on 100)
-log <filename> Määritä lokitiedosto, johon kaikki kääntäjän tuloste vedostetaan. Tämä on erittäin hyödyllistä, jos haluat tehdä vianmäärityksen eräkääntäjälle tai saada tiedoston, jossa on kaikki virheet ja varoitukset eräkoonnista. Jos tunniste on .xml, muodostettu loki on xml-tiedosto.
-Xemacs Emacs-tyylin avulla voi esittää virheiden ja varoitusten sijainteja konsolissa ja normaaleissa tekstilokeissa. Tämä vaihtoehto ei vaikuta XML-lokeihin. Kun tämä vaihtoehto on käytössä, sanoma:
2. VAROITUS kohteessa /workspace/X.java
(rivillä 8)...

esitetään seuraavassa muodossa:
/workspace/X.java:8: varoitus: Metodi...
-proceedOnError Jatka kääntöä virheistä huolimatta, ongelmallisia metodeja tai tyyppejä sisältävät luokkatiedostot vedostetaan. Tämä vaihtoehto on suositeltava vain, jos haluat ajaa sovelluksen jäljellä olevista virheistä huolimatta.
-verbose Tulosta käytetyt/käsitellyt käännösyksiköt konsoliin tai lokitiedostoon, jos se on määritetty.
-referenceInfo Laske viitetiedot. Tämä on hyödyllistä vain, jos luontitoimintoon on yhteys. Muuten viitetiedot ovat hyödyttömiä.
-progress Näytä tilannetiedot (vain -log-tilassa).
-time Näytä nopeustiedot.
-noExit Älä kutsu kohdetta System.exit(n) käännöksen lopussa (n=0, jos virheitä ei ole).
-repeat <n> Toista käännöskäsittely <n> kertaa (suoritustehon analyysi).
-inlineJSR Muunna JSR-tavukoodi koodiksi (implisiittinen, jos kohde >= 1.5).
-enableJavadoc Ota javadocin sisällä olevat viitteet huomioon.
Ohjeen vaihtoehdot
-? -help Näytä ohjesanoma.
-v -version Näytä kääntäjän koontinumero. Tämä on erittäin hyödyllistä vian ilmoituksessa.
-showversion Näytä kääntäjän koontinumero ja jatka. Tämä on erittäin hyödyllistä vian ilmoituksessa.

Esimerkkejä

d:\temp -classpath rt.jar -time -g -d d:/tmp Kääntää kaikki lähdetiedostot, jotka ovat hakemistossa d:\temp ja sen alikansioissa. Luokkapolku on yksinkertaisesti rt.jar. Se luo kaikki vianmääritysmääritteet, ja kaikki muodostetut .class-tiedostot vedostetaan hakemistoon d:\tmp. Kääntäjän nopeus tulee näyttöön, kun eräkäsittely on valmis.
d:\temp\Test.java -classpath d:\temp;rt.jar -g:none Kääntää ainoastaan Test.java-tiedoston ja sen mahdolliset alisteiset tiedostot, jotka noudetaan hakemistosta d:\temp. Luokkapolku on d:\temp, jota seuraa rt.jar, eli kaikkia tarpeellisia luokkia etsitään ensin hakemistosta d:\temp ja sitten tiedostosta rt.jar. Se ei muodosta vianmäärityksen määritteitä, ja kaikki muodostetut .class-tiedostot vedostetaan hakemistoon d:\temp.

Ant-javac-sovittimen käyttö

Eclipse-kääntäjää voidaan käyttää Ant-komentosarjan sisällä javac-sovittimen avulla. Eclipse-kääntäjän käyttöä varten tarvitsee vain määrittää komentosarjaan ominaisuus build.compiler. Seuraavassa on pieni esimerkki.
<?xml version="1.0" encoding="UTF-8"?>
<project name="compile" default="main" basedir="../.">

	<property name="build.compiler" value="org.eclipse.jdt.core.JDTCompilerAdapter"/>

	<property name="root" value="${basedir}/src"/>

	<property name="destdir" value="d:/temp/bin" />

	<target name="main">
		<javac srcdir="${root}" destdir="${destdir}" debug="on" nowarn="on" extdirs="d:/extdirs" source="1.4">
		    <classpath>
		      <pathelement location="${basedir}/../org.eclipse.jdt.core/bin"/>
		    </classpath>
		</javac>		
	</target>
</project>
Javac Ant -tehtävässä käytetty syntaksi on esitelty Ant javac -tehtävän dokumentaatiossa. Nykyinen sovitin tukee Javac Ant -tehtävien versioita 1.4.1 - 1.6.5.

Jos käytössä on versiota 1.5.0 uudempi versio, voit käyttää sisäkkäistä kääntäjän argumenttielementtiä määrittämään kääntäjäkohtaiset vaihtoehdot.

...
<javac srcdir="${root}" destdir="${destdir}" debug="on" nowarn="on" extdirs="d:/extdirs" source="1.4">
    <classpath>
      <pathelement location="${basedir}/../org.eclipse.jdt.core/bin"/>
    </classpath>
    <compilerarg compiler="org.eclipse.jdt.core.JDTCompilerAdapter" line="-1.5 -warn:+boxing"/>
</javac>		
...

Kääntäjästä riippuvien komentosarjojen välttämiseksi on suositeltavaa valita kääntäjäargumentiksi org.eclipse.jdt.core.JDTCompilerAdapter. Jos tätä ei aseteta, komentosarjaa voi käyttää vain Eclipse-kääntäjän kanssa. Jos se asetetaan, sisäkkäinen kääntäjäargumentti ohitetaan, jos nimi on eri kuin ominaisuuden build.compiler määrittämä kääntäjän nimi.

Vianmääritys

JDT-ydinosassa on määritetty erityinen merkki (merkkityyppi "org.eclipse.jdt.core.problem"), joka ilmaisee kääntäjähäiriöitä. Jotta kääntäjän tunnitamat häiriöt voisi löytää ohjelmallisesti, tulee käyttää standardinmukaista ympäristön merkkikäytäntöä. Tiivistelmä merkintöjen käytöstä on ohjeaiheessa Resurssimerkinnät.

Seuraava katkelma etsii kaikki käännösyksikön Java-häiriömerkinnät.

   public IMarker[] findJavaProblemMarkers(ICompilationUnit cu) 
      throws CoreException {
      IResource javaSourceFile = cu.getUnderlyingResource();
      IMarker[] markers = 
         javaSourceFile.findMarkers(IJavaModelMarker.JAVA_MODEL_PROBLEM_MARKER,
            true, IResource.DEPTH_INFINITE);
   }

Java-projektin luontitoiminto pitää yllä Java-häiriömerkintöjä, ja ne poistetaan automaattisesti, kun häiriöt korjataan ja Java-lähde käännetään uudelleen.

Häiriön tunnusarvoksi asetetaan jokin rajapinnassa IProblem määritetyistä vakioista. Häiriön tunnus on luotettava, mutta sanoma on lokalisoitu, joten se voi muuttua oletuspaikallistunnuksen mukaan. IProblem -rajapinnassa määritetyt vakiot ovat itseään kuvaavia.

IProblemRequestor -toteutus tulee määrittää keräämään Java-toiminnan aikana tunnistetut häiriöt. Työskentelykopiot voi täsmäyttää häiriöiden tunnistuksella, jos IProblemRequestor on toimitettu työskentelykopioiden luomiseen. Tämän voi tehdä käyttämällä reconcile-metodia. Esimerkki:

  ICompilationUnit unit = ..; // hae jokin käännösyksikkö
			
  // luo pyytäjä tunnistettujen häiriöiden keräystä varten
  IProblemRequestor problemRequestor = new IProblemRequestor() {
    public void acceptProblem(IProblem problem) {
      System.out.println(problem.getID() + ": " + problem.getMessage());
    }
    public void beginReporting() {}
    public void endReporting() {}
    public boolean isActive() {	return true; } // tunnistaa häiriöt, jos käytössä
  };
    
  // käytä työskentelykopiota pidättämään lähde, jossa on virhe
  ICompilationUnit workingCopy = unit.getWorkingCopy(new WorkingCopyOwner() {}, problemRequestor, null);
  ((IOpenable)workingCopy).getBuffer().setContents("public class X extends Zork {}");

  // liipaisimen täsmäytys
  workingCopy.reconcile(NO_AST, true, null, null);
Voit lisätä ilmoitettujen häiriöiden toiminnon acceptProblem(IProblem)-metodiin. Tässä esimerkissä ilmoitettu häiriö on se, että Zork ei ole tulkittavissa tai se ei ole kelvollinen yliluokka ja sen tunnus on IProblem.SuperclassNotFound.

SuppressWarnings-metodia käyttävien varoitusten poissulkeminen

Java 5.0:ssa käyttäjä voi halutessaan poistaa käytöstä käännösyksikön osajoukkoon suhteessa olevat käännösvaroitukset käyttämällä huomautusta java.lang.SuppressWarning.

	@SuppressWarning("unused") public void foo() {
		String s;
	}

Jos huomautusta ei käytetä, kääntäjä varoittaisi, että paikallismuuttujaa s ei käytetä missään. Kun huomautusta käytetään, kääntäjä ohittaa kyseisen varoituksen paikallisesti foo-metodiin. Tämän ansiosta varoitukset voi säilyttää saman käännösyksikön tai projektin eri sijainneissa.

SuppressWarning-huomautuksessa voi käyttää seuraavia sanakkeita: