/** * 執行Quick Fix變更 * * @param activeEditor * @param document * @throws CoreException */ private void performChange(IEditorPart activeEditor, IDocument document, ASTRewrite rewrite) throws CoreException { Change change = null; IRewriteTarget rewriteTarget = null; try { change = getChange(actRoot, rewrite); if (change != null) { if (document != null) { LinkedModeModel.closeAllModels(document); } if (activeEditor != null) { rewriteTarget = (IRewriteTarget) activeEditor.getAdapter(IRewriteTarget.class); if (rewriteTarget != null) { rewriteTarget.beginCompoundChange(); } } change.initializeValidationData(new NullProgressMonitor()); RefactoringStatus valid = change.isValid(new NullProgressMonitor()); if (valid.hasFatalError()) { IStatus status = new Status( IStatus.ERROR, JavaPlugin.getPluginId(), IStatus.ERROR, valid.getMessageMatchingSeverity(RefactoringStatus.FATAL), null); throw new CoreException(status); } else { IUndoManager manager = RefactoringCore.getUndoManager(); manager.aboutToPerformChange(change); Change undoChange = change.perform(new NullProgressMonitor()); manager.changePerformed(change, true); if (undoChange != null) { undoChange.initializeValidationData(new NullProgressMonitor()); manager.addUndo("Quick Undo", undoChange); } } } } finally { if (rewriteTarget != null) { rewriteTarget.endCompoundChange(); } if (change != null) { change.dispose(); } } }
boolean addMatch(Match match, IMatchPresentation participant) { Object element = match.getElement(); if (fElementsToParticipants.get(element) != null) { // TODO must access the participant id / label to properly report the error. JavaPlugin.log( new Status( IStatus.WARNING, JavaPlugin.getPluginId(), 0, "A second search participant was found for an element", null)); //$NON-NLS-1$ return false; } fElementsToParticipants.put(element, participant); addMatch(match); return true; }
/* * @see ICompletionProposal#getAdditionalProposalInfo() */ @Override public String getAdditionalProposalInfo() { try { fContext.setReadOnly(true); TemplateBuffer templateBuffer; try { templateBuffer = fContext.evaluate(fTemplate); } catch (TemplateException e) { return null; } IDocument document = new Document(templateBuffer.getString()); IndentUtil.indentLines(document, new LineRange(0, document.getNumberOfLines()), null, null); return document.get(); } catch (BadLocationException e) { handleException( JavaPlugin.getActiveWorkbenchShell(), new CoreException( new Status( IStatus.ERROR, JavaPlugin.getPluginId(), IStatus.OK, "", e))); // $NON-NLS-1$ return null; } }