/**
* Copyright (c) 2005-2011 by Appcelerator, Inc. All Rights Reserved.
* Licensed under the terms of the Eclipse Public License (EPL).
* Please see the license.txt included with this distribution for details.
* Any modifications to this file must keep this entire header intact.
*/
package com.python.pydev.refactoring.tdd;
import java.util.List;
import org.eclipse.jface.text.DocumentEvent;
import org.eclipse.jface.text.IDocument;
import org.eclipse.jface.text.ITextViewer;
import org.eclipse.jface.text.contentassist.IContextInformation;
import org.eclipse.jface.text.templates.TemplateProposal;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.graphics.Point;
import org.python.pydev.core.MisconfigurationException;
import org.python.pydev.core.docutils.PySelection;
import org.python.pydev.core.log.Log;
import org.python.pydev.editor.PyEdit;
import org.python.pydev.refactoring.core.base.RefactoringInfo;
/**
* This is the proposal that goes outside. It only creates the proposal that'll actually do something later, as
* creating that proposal may be slower.
*/
public final class TddRefactorCompletion extends AbstractTddRefactorCompletion {
private TemplateProposal executed;
private int locationStrategy;
private List<String> parametersAfterCall;
private AbstractPyCreateAction pyCreateAction;
private PySelection ps;
TddRefactorCompletion(String replacementString, Image image, String displayString,
IContextInformation contextInformation, String additionalProposalInfo, int priority, PyEdit edit,
int locationStrategy, List<String> parametersAfterCall, AbstractPyCreateAction pyCreateAction,
PySelection ps) {
super(edit, replacementString, 0, 0, 0, image, displayString, contextInformation, additionalProposalInfo,
priority);
this.locationStrategy = locationStrategy;
this.parametersAfterCall = parametersAfterCall;
this.pyCreateAction = pyCreateAction;
this.ps = ps;
}
@Override
public void apply(IDocument document) {
Log.log("This apply should not be called as it implements ICompletionProposalExtension2.");
}
@Override
public boolean isAutoInsertable() {
return false;
}
@Override
public Point getSelection(IDocument document) {
TemplateProposal executed2 = getExecuted();
if (executed2 != null) {
return executed2.getSelection(document);
}
return null;
}
public void apply(ITextViewer viewer, char trigger, int stateMask, int offset) {
if (edit != null) {
//We have to reparse to make sure that we'll have an accurate AST.
edit.getParser().reparseDocument();
}
TemplateProposal executed2 = getExecuted();
if (executed2 != null) {
executed2.apply(viewer, trigger, stateMask, 0);
forceReparseInBaseEditorAnd();
}
}
private TemplateProposal getExecuted() {
if (executed == null) {
pyCreateAction.setActiveEditor(null, edit);
try {
RefactoringInfo refactoringInfo = new RefactoringInfo(edit, ps.getTextSelection());
executed = (TemplateProposal) pyCreateAction.createProposal(refactoringInfo, this.fReplacementString,
this.locationStrategy, parametersAfterCall);
} catch (MisconfigurationException e) {
Log.log(e);
}
}
return executed;
}
public void selected(ITextViewer viewer, boolean smartToggle) {
}
public void unselected(ITextViewer viewer) {
}
public boolean validate(IDocument document, int offset, DocumentEvent event) {
return false;
}
}