A tartalomsegéd segítségével kontextusérzékeny tartalombefejezést biztosíthat felhasználói kérés alapján. Ezt a funkciót a platform szöveg keretrendszer valósítja meg az org.eclipse.jface.text.contentassist elemben. Az előugró ablakok (előugró súgó) felkínálják a lehetséges szövegválasztékot a kifejezés elkészítéséhez. A felhasználó kiválaszthatja ezeket a lehetőségeket a szövegbe beszúráshoz. A tartalomsegéd a környezetfüggő előugró súgót is támogatja annak érdekében, hogy a felhasználók a dokumentumban lévő aktuális pozícióval kapcsolatos információkat biztosítson.
A tartalomsegéd megvalósítása nem kötelező. Alapértelmezés szerint a SourceViewerConfiguration nem telepíti a tartalomsegédet, mivel nem ismeri az adott szerkesztőhöz használt dokumentummodellt, és nem rendelkezik általános jellemzőkkel a tartalomsegédhez.
A tartalomsegéd megvalósítása érdekében a szerkesztő forrásmegjelenítő konfigurációját úgy kell beállítani, hogy megadjon egy tartalomsegédet. Ez a Java szerkesztő példa JavaSourceViewerConfiguration elemében történik.
public IContentAssistant getContentAssistant(ISourceViewer sourceViewer) {
ContentAssistant assistant= new ContentAssistant();
assistant.setContentAssistProcessor(new JavaCompletionProcessor(), IDocument.DEFAULT_CONTENT_TYPE);
assistant.setContentAssistProcessor(new JavaDocCompletionProcessor(), JavaPartitionScanner.JAVA_DOC);
...
return assistant;
}
A tartalomsegéd jellemzőit a IContentAssistant adja meg. A tartalomsegéd beállítása hasonló a szintaxiskiemelés beállításához. A segédet különböző kifejezésbefejezési stratégiákkal kell konfigurálni a különböző dokumentum-tartalomtípusokkal. A befejezési stratégiák az IContentAssistProcessor segítségével kerülnek megvalósításra. A processzor befejezéseket ajánl fel és feldolgozza a kontextusinformációkat az adott tartalomtípuson belüli eltolásához.
Nem az összes tartalomtípus szükséges a tartalomtámogatáshoz. A Java példa szerkesztőben tartalomsegéd-processzorok biztosítottak az alapértelmezett tartalomtípushoz és a javadoc dokumentumhoz, de a többsoros megjegyzésekhez nem. Tekintsük meg ezeket a processzorokat.
A JavaCompletionProcessor meglehetősen egyszerű. Csak
kulcsszavakat ajánlhat befejezési lehetőségként. A kulcsszavak az
fgProposals mezőben vannak megadva, és ezek a kulcsszavak
mindig jelöltként jelennek meg:
public ICompletionProposal[] computeCompletionProposals(ITextViewer viewer, int documentOffset) {
ICompletionProposal[] result= new ICompletionProposal[fgProposals.length];
for (int i= 0; i < fgProposals.length; i++) {
IContextInformation info= new ContextInformation(fgProposals[i], MessageFormat.format(JavaEditorMessages.getString("CompletionProcessor.Proposal.ContextInfo.pattern"), new Object[] { fgProposals[i] })); //$NON-NLS-1$
result[i]= new CompletionProposal(fgProposals[i], documentOffset, 0, fgProposals[i].length(), null, fgProposals[i], info, MessageFormat.format(JavaEditorMessages.getString("CompletionProcessor.Proposal.hoverinfo.pattern"), new Object[] { fgProposals[i]})); //$NON-NLS-1$
}
return result;
}

A befejezést aktiválhatják a felhasználói kérések vagy automatikusan aktiválhatók a "(" vagy "." karakter beírásával:
public char[] getCompletionProposalAutoActivationCharacters() {
return new char[] { '.', '(' };
}
A befejezések ajánlásán kívül a JavaCompletionProcessor a felhasználók által kért kontextusinformációkat is megad. A kontextusinformációk tartalmazzák az adott kontextusban rendelkezésre álló információdarabok leírását és a részletes információs üzeneteket.
A Java szerkesztő példában az információk igazán környezetfüggők. Öt hasonló kontextusinformációs objektumot tartalmazó tömb kerül feldolgozásra az aktuális eltoláshoz, amikor a felhasználó kontextusinformációkat kér. Minden kontextusinformációs objektum megad egy kontextust, amely öt karaktert tartalmaz az eltolás előtt és ötöt utána.Az öt ajánlás egyikének kiválasztásakor a kurzor mellett megjelennek a részletes információk, és addig láthatók maradnak, amíg a kurzor az eltolás körüli öt karakter kontextusában belül helyezkedik el.
public IContextInformation[] computeContextInformation(ITextViewer viewer, int documentOffset) {
IContextInformation[] result= new IContextInformation[5];
for (int i= 0; i < result.length; i++)
result[i]= new ContextInformation(
MessageFormat.format(JavaEditorMessages.getString("CompletionProcessor.ContextInfo.display.pattern"), new Object[] { new Integer(i), new Integer(documentOffset) }),
MessageFormat.format(JavaEditorMessages.getString("CompletionProcessor.ContextInfo.value.pattern"), new Object[] { new Integer(i), new Integer(documentOffset - 5), new Integer(documentOffset + 5)}));
return result;
}

Ez a tartalomkontextus-információk automatikusan megjelennek, amikor a "#" karakter beírásra kerül:
public char[] getContextInformationAutoActivationCharacters() {
return new char[] { '#' };
}
A tartalomsegéd megjelenése és viselkedése a IContentAssistant segítségével beállítható. Az automatikus aktiválási időkorlát, az információs popupok színe és tájolása is beállítható.
public IContentAssistant getContentAssistant(ISourceViewer sourceViewer) {
ContentAssistant assistant= new ContentAssistant();
...
assistant.enableAutoActivation(true);
assistant.setAutoActivationDelay(500);
assistant.setProposalPopupOrientation(IContentAssistant.PROPOSAL_OVERLAY);
assistant.setContextInformationPopupOrientation(IContentAssistant.CONTEXT_INFO_ABOVE);
assistant.setContextInformationPopupBackground(JavaEditorEnvironment.getJavaColorProvider().getColor(new RGB(150, 150, 0)));
return assistant;
}
Annak lehetővé tétele érdekében, hogy a felhasználó meghívhassa a tartalomsegédet, létre kell hozni és be kell
állítani egy tevékenységet. Ez normális esetben az AbstractTextEditor.createActions() alosztály
megvalósításában történik:
protected void createActions() {
...
IAction action= new ContentAssistAction(aResourceBundle, "ContentAssistProposal.", this); //$NON-NLS-1$
action.setActionDefinitionId(ITextEditorActionDefinitionIds.CONTENT_ASSIST_PROPOSALS);
setAction(actionId, action); //$NON-NLS-1$
markAsStateDependentAction(actionId, true); //$NON-NLS-1$
PlatformUI.getWorkbench().getHelpSystem().setHelp(action, helpContextId);
...
}
A szerkesztő műveletsor-közreadót ki kell terjeszteni ahhoz, hogy a tevékenység megjelenjen a fő menüben:
...
private RetargetTextEditorAction fContentAssist;
public MyEditorActionContributor() {
fContentAssist= new RetargetTextEditorAction();
String commandId= ITextEditorActionDefinitionIds.CONTENT_ASSIST_PROPOSALS;
fContentAssist.setActionDefinitionId(commandId);
}
public void contributeToMenu(IMenuManager menu) {
IMenuManager editMenu= menu.findMenuUsingPath(M_EDIT);
editMenu.appendToGroup(MB_ADDITIONS, fContentAssist);
}
public void setActiveEditor(IEditorPart part) {
IAction editorAction= getAction(part, "ContentAssist");
fContentAssist.setAction(editorAction);
}
...