package com.redhat.ceylon.eclipse.code.correct;
import java.util.Collection;
import org.eclipse.core.resources.IFile;
import org.eclipse.jface.text.BadLocationException;
import org.eclipse.jface.text.IDocument;
import org.eclipse.jface.text.Region;
import org.eclipse.jface.text.contentassist.ICompletionProposal;
import org.eclipse.ltk.core.refactoring.TextChange;
import org.eclipse.ltk.core.refactoring.TextFileChange;
import org.eclipse.text.edits.MultiTextEdit;
import org.eclipse.text.edits.ReplaceEdit;
import com.redhat.ceylon.model.typechecker.model.Declaration;
import com.redhat.ceylon.model.typechecker.model.Value;
import com.redhat.ceylon.compiler.typechecker.tree.Tree;
import com.redhat.ceylon.compiler.typechecker.tree.Tree.SpecifierOrInitializerExpression;
@Deprecated
class ConvertToGetterProposal extends CorrectionProposal {
ConvertToGetterProposal(Declaration dec, int offset,
TextChange change) {
super("Convert '" + dec.getName() + "' to getter",
change, new Region(offset, 0));
}
static void addConvertToGetterProposal(IDocument doc,
Collection<ICompletionProposal> proposals, IFile file,
Tree.AttributeDeclaration decNode) {
Value dec = decNode.getDeclarationModel();
final SpecifierOrInitializerExpression sie =
decNode.getSpecifierOrInitializerExpression();
if (dec!=null && sie!=null) {
if (dec.isParameter()) return;
if (!dec.isVariable()) { //TODO: temp restriction, autocreate setter!
TextChange change = new TextFileChange("Convert to Getter", file);
change.setEdit(new MultiTextEdit());
Integer offset = sie.getStartIndex();
String space;
try {
space = doc.getChar(offset-1)==' ' ? "" : " ";
}
catch (BadLocationException e) {
e.printStackTrace();
return;
}
change.addEdit(new ReplaceEdit(offset, 1, "=>"));
// change.addEdit(new ReplaceEdit(offset, 1, space + "{ return" + spaceAfter));
// change.addEdit(new InsertEdit(decNode.getStopIndex()+1, " }"));
proposals.add(new ConvertToGetterProposal(dec,
offset + space.length() + 2 , change));
}
}
}
}