Codehulp voor Java-code gebruiken

Met de JDT-API kunnen andere plugins codehulp uitvoeren of code selecteren voor sommige Java-elementen. Voor elementen waarvoor dergelijke bewerkingen zijn toegestaan, moet u ICodeAssist implementeren.

Er zijn twee soorten bewerkingen:

In het Java-model zijn er twee elementen die deze interface implementeren: IClassFile en ICompilationUnit.  Codeaanvulling en codeselectie leveren alleen resultaten op voor een klassenbestand waaraan broncode gekoppeld is.

Codeaanvulling

Codeaanvulling uitvoeren

U kunt codeaanvulling onder meer programmatisch uitvoeren door ICodeAssist.codeComplete aan te roepen. U geeft de offset in de compilatie-eenheid op waarna de codeaanvulling gewenst is. U moet ook een instance van CompletionRequestor verstrekken om de mogelijke aanvullingen te accepteren.

De methode in CompletionRequestor.accept accepteert alle soorten suggesties voor code-aanvulling. De methoden van CompletionProposal geven informatie die het voorgestelde element beschrijft (naam, declarerend type, enzovoort), de voorgestelde invoegpositie in de compilatie-eenheid en de relevantie.   

Een aanvullingsopvrager accepteert een groot aantal verschillende aanvullingssoorten. De soort wordt opgevraagd met CompletionProposal.getKind.

Een lijst van een aantal mogelijke aanvullingssoorten (de volledige lijst van aanvullingssoorten vindt u in CompletionProposal):

De aanvullingsopvrager moet ook compilatiefouten accepteren.   

Relevantie aanvulling

Omdat er veel verschillende aanvullingen mogelijk zijn, wordt het begrip 'relevantie' gebruikt om de relevantie van een voorgestelde aanvulling ten opzichte van andere suggesties te bepalen. De relevantie wordt aangegeven met een positief geheel getal. De waarde heeft geen impliciete betekenis en dient uitsluitend ter vergelijking met waarden van andere suggesties. De relevantie van een beschikbare codeaanvulling kan worden beïnvloed door het verwachte type van de expressie, aangezien deze gerelateerd is aan de typen in de omliggende code (zoals variabeletypen, casttypen, retourtypen enzovoort). De aanwezigheid van een verwacht prefix of suffix in een aanvulling is ook van invloed op de relevantie ervan.

Codeaanvullingsopties

In de JDT-plugin zijn opties gedefinieerd waarmee het gedrag voor codeaanvulling wordt bestuurd. \Deze opties kunnen door andere plugins worden gewijzigd.   

Via aanvullende opties kunt u prefixen en suffixen opgeven voor de voorgestelde aanvullingen voor velden, statische velden, lokale variabelen en methode-argumenten.   

Zie JDT-opties voor codehulp voor meer informatie over de opties en standaardwaarden voor codehulp.

Codeselectie

Codeselectie uitvoeren

Codeselectie wordt gebruikt om het Java-element binnen een bepaald tekstbereik (meestal de geselecteerde tekst) in een compilatie-eenheid te vinden. Om codeselectie programmatisch uit te voeren, moet u ICodeAssist.codeSelect aanroepen. U moet de beginindexlocatie van de selectie en de lengte opgeven. Het resultaat is een reeks Java-elementen. Meestal bevat de reeks slechts één element, maar als de selectie niet eenduidig is, worden alle mogelijke elementen geretourneerd.

In het onderstaande voorbeeld wordt codeselectie aangeroepen voor een compilatie-eenheid.

   // Compilatie-eenheid ophalen
   ICompilationUnit unit = ...;
   
   // Offset en lengte ophalen
   int offset = ...;
   int length = ...;
   
   // selectie uitvoeren
   IJavaElement[] elements = unit.codeSelect(offset, length);
   System.out.println("het geselecteerde element is " + element[0].getElementName());

Selectie op cursorlocatie

Wanneer de opgegeven lengte voor de selectie nul (0) is, wordt een selectie berekend door te zoeken naar het volledige token van de opgegeven offset. Bekijk de volgende voorbeeldmethode:

   public void fooMethod(Object) {
   }

Als u een offset opgeeft na het eerste teken van fooMethod en u geeft een lengte van 0 op, wordt het hele token fooMethod in de selectie opgenomen. Als u een lengte van 5 tekens opgeeft, wordt de selectie ooMet.