package com.redhat.ceylon.eclipse.code.correct;
import static com.redhat.ceylon.eclipse.java2ceylon.Java2CeylonProxies.correctJ2C;
import static com.redhat.ceylon.eclipse.util.EditorUtil.getCurrentEditor;
import static com.redhat.ceylon.eclipse.util.Nodes.findDeclarationWithBody;
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.core.resources.IProject;
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.util.EditorUtil;
import com.redhat.ceylon.ide.common.correct.QuickFixData;
import com.redhat.ceylon.ide.common.correct.addParameterQuickFix_;
public class AddParameterListHandler extends AbstractHandler {
@Override
public Object execute(ExecutionEvent event)
throws ExecutionException {
IEditorPart editor = getCurrentEditor();
if (editor instanceof CeylonEditor) {
CeylonEditor ce = (CeylonEditor) editor;
Tree.CompilationUnit rootNode =
ce.getParseController().getTypecheckedRootNode();
if (rootNode!=null) {
IRegion selection = ce.getSelection();
int start = selection.getOffset();
int end = start + selection.getLength();
Node node = findDeclarationWithBody(rootNode,
findNode(rootNode, ce.getParseController().getTokens(), start, end));
List<ICompletionProposal> list =
new ArrayList<ICompletionProposal>();
IDocument doc =
ce.getCeylonSourceViewer()
.getDocument();
IProject project = EditorUtil.getProject(ce.getEditorInput());
QuickFixData data = correctJ2C().newData(rootNode, node, list,
ce, project, doc);
addParameterQuickFix_.get_().addParameterProposals(data);
if (!list.isEmpty()) {
ICompletionProposal proposal = list.get(0);
proposal.apply(doc);
Point point = proposal.getSelection(doc);
ce.getSelectionProvider().setSelection(new TextSelection(point.x, point.y));
}
}
}
return null;
}
}