package com.redhat.ceylon.eclipse.code.correct; import org.eclipse.jface.text.IDocument; import org.eclipse.ltk.core.refactoring.Change; import com.redhat.ceylon.compiler.typechecker.tree.Tree; import com.redhat.ceylon.compiler.typechecker.tree.Tree.CompilationUnit; import com.redhat.ceylon.compiler.typechecker.tree.Tree.Term; import com.redhat.ceylon.eclipse.code.editor.CeylonEditor; import com.redhat.ceylon.ide.common.correct.QuickFixData; import com.redhat.ceylon.ide.common.correct.declareLocalQuickFix_; final class DeclareLocalProposal extends CorrectionProposal { private final QuickFixData data; private final Term term; private final CompilationUnit rootNode; private final CeylonEditor editor; private final Tree.BaseMemberExpression bme; DeclareLocalProposal(QuickFixData data, Change change, String desc, Tree.Term term, Tree.BaseMemberExpression bme, Tree.CompilationUnit rootNode, CeylonEditor editor) { super(desc, change, null); this.data = data; this.term = term; this.rootNode = rootNode; this.editor = editor; this.bme = bme; } public void apply(IDocument document) { super.apply(document); declareLocalQuickFix_.get_().enableLinkedMode(data, term); // Type type = term.getTypeModel(); // if (type!=null && editor!=null) { // LinkedModeModel linkedModeModel = new LinkedModeModel(); // ProposalPosition typePosition = // getTypeProposals(document, bme.getStartIndex(), 5, // type, rootNode, "value"); // // try { // LinkedMode.addLinkedPosition(linkedModeModel, typePosition); // LinkedMode.installLinkedMode(editor, document, linkedModeModel, // this, new DeleteBlockingExitPolicy(document), NO_STOP, -1); // } // catch (BadLocationException ble) { // ble.printStackTrace(); // } // } } // @Deprecated // DeclareLocalProposal(Change change, // Tree.Term term, // Tree.BaseMemberExpression bme, // Tree.CompilationUnit rootNode, // CeylonEditor editor) { // super("Declare local value '" + bme.getIdentifier().getText() + "'", // change, null); // this.term = term; // this.rootNode = rootNode; // this.editor = editor; // this.bme = bme; // } // // static void addDeclareLocalProposal(Tree.CompilationUnit rootNode, // Node node, Collection<ICompletionProposal> proposals, // IFile file, CeylonEditor editor) { // Tree.Statement st = Nodes.findStatement(rootNode, node); // if (st instanceof Tree.SpecifierStatement) { // Tree.SpecifierStatement sst = (Tree.SpecifierStatement) st; // Tree.SpecifierExpression se = sst.getSpecifierExpression(); // Tree.Term bme = sst.getBaseMemberExpression(); // if (bme==node && // bme instanceof Tree.BaseMemberExpression) { // Tree.Expression e = se.getExpression(); // if (e!=null && e.getTerm()!=null) { // final Tree.Term term = e.getTerm(); // TextFileChange change = // new TextFileChange("Declare Local Value", file); // change.setEdit(new InsertEdit(node.getStartIndex(), "value ")); // proposals.add(new DeclareLocalProposal(change, // term, (Tree.BaseMemberExpression) node, // rootNode, editor)); // } // } // } // } }