fTemplateEngine.complete(viewer, offset, unit);
fTemplateEngine.complete(viewer, offset, unit, fEditor);
	public ICompletionProposal[] computeCompletionProposals(ITextViewer viewer, int offset) {		ICompilationUnit unit= fManager.getWorkingCopy(fEditor.getEditorInput());		IDocument document= viewer.getDocument();				try {			if (unit != null) {								fCollector.reset(unit.getJavaProject(), unit);				Point selection= viewer.getSelectedRange();				if (selection.y > 0)					fCollector.setReplacementLength(selection.y);								unit.codeComplete(offset, fCollector);			}		} catch (JavaModelException x) {			Shell shell= viewer.getTextWidget().getShell();			ErrorDialog.openError(shell, JavaTextMessages.getString("CompletionProcessor.error.accessing.title"), JavaTextMessages.getString("CompletionProcessor.error.accessing.message"), x.getStatus()); //$NON-NLS-2$ //$NON-NLS-1$		}						ICompletionProposal[] results= fCollector.getResults();		try {			fTemplateEngine.reset();			fTemplateEngine.complete(viewer, offset, unit);		} catch (JavaModelException x) {			Shell shell= viewer.getTextWidget().getShell();			ErrorDialog.openError(shell, JavaTextMessages.getString("CompletionProcessor.error.accessing.title"), JavaTextMessages.getString("CompletionProcessor.error.accessing.message"), x.getStatus()); //$NON-NLS-2$ //$NON-NLS-1$		}								ICompletionProposal[] templateResults= fTemplateEngine.getResults();		// concatenate arrays		ICompletionProposal[] total= new ICompletionProposal[results.length + templateResults.length];		System.arraycopy(templateResults, 0, total, 0, templateResults.length);		System.arraycopy(results, 0, total, templateResults.length, results.length);				return total;	}