package com.redhat.ceylon.eclipse.code.correct;
import static com.redhat.ceylon.eclipse.code.correct.PrintProposal.addPrintProposal;
import static com.redhat.ceylon.eclipse.util.EditorUtil.getCurrentEditor;
import static com.redhat.ceylon.eclipse.util.Nodes.findNode;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.core.commands.AbstractHandler;
import org.eclipse.core.commands.ExecutionEvent;
import org.eclipse.core.commands.ExecutionException;
import org.eclipse.jface.text.IDocument;
import org.eclipse.jface.text.IRegion;
import org.eclipse.jface.text.TextSelection;
import org.eclipse.jface.text.contentassist.ICompletionProposal;
import org.eclipse.swt.graphics.Point;
import org.eclipse.ui.IEditorPart;
import com.redhat.ceylon.compiler.typechecker.tree.Node;
import com.redhat.ceylon.compiler.typechecker.tree.Tree;
import com.redhat.ceylon.eclipse.code.editor.CeylonEditor;
import com.redhat.ceylon.eclipse.code.parse.CeylonParseController;
public class PrintHandler extends AbstractHandler {
@Override
public Object execute(ExecutionEvent event)
throws ExecutionException {
IEditorPart editor = getCurrentEditor();
if (editor instanceof CeylonEditor) {
CeylonEditor ce = (CeylonEditor) editor;
CeylonParseController controller =
ce.getParseController();
Tree.CompilationUnit rootNode =
controller.getTypecheckedRootNode();
if (rootNode!=null) {
IRegion selection = ce.getSelection();
int start = selection.getOffset();
int end = start + selection.getLength();
Node node =
findNode(rootNode,
controller.getTokens(),
start, end);
List<ICompletionProposal> list =
new ArrayList<ICompletionProposal>();
addPrintProposal(rootNode, list, node, start);
if (!list.isEmpty()) {
IDocument doc =
ce.getCeylonSourceViewer()
.getDocument();
ICompletionProposal proposal =
list.get(0);
proposal.apply(doc);
Point point = proposal.getSelection(doc);
ce.getSelectionProvider()
.setSelection(new TextSelection(
point.x, point.y));
}
}
}
return null;
}
}