cu.discardWorkingCopy();
if (cu != null) cu.discardWorkingCopy();
	private ICompletionProposal[] internalComputeCompletionProposals(int documentOffset, String input) {		String cuString= fCompletionContextRequestor.getBeforeString() + input + fCompletionContextRequestor.getAfterString();		ICompilationUnit cu= null;		try {			/*			 * Explicitly create a new non-shared working copy.			 * 			 * The WorkingCopy cannot easily be shared between calls, since IContentAssistProcessor			 * has no dispose() lifecycle method. A workaround could be to pass in a WorkingCopyOwner			 * and dispose the owner's working copies from the caller's dispose().			 */			cu= fCompletionContextRequestor.getOriginalCu().getWorkingCopy(new WorkingCopyOwner() {/*subclass*/}, null, new NullProgressMonitor());			cu.getBuffer().setContents(cuString);			int cuPrefixLength= fCompletionContextRequestor.getBeforeString().length();			fCompletionRequestor.setOffsetReduction(cuPrefixLength);			cu.codeComplete(cuPrefixLength + documentOffset, fCompletionRequestor);						JavaCompletionProposal[] proposals= fCompletionRequestor.getResults();			if (proposals.length == 0) {				String errorMsg= fCompletionRequestor.getErrorMessage();				if (errorMsg == null || errorMsg.trim().length() == 0)					errorMsg= RefactoringMessages.JavaTypeCompletionProcessor_no_completion;  				fErrorMessage= errorMsg;			} else {				fErrorMessage= fCompletionRequestor.getErrorMessage();			}			return proposals;		} catch (JavaModelException e) {			JavaPlugin.log(e);			return null;		} finally {			try {				cu.discardWorkingCopy();			} catch (JavaModelException e) {				JavaPlugin.log(e);			}		}	}