package com.redhat.ceylon.eclipse.code.correct;
import static com.redhat.ceylon.eclipse.code.correct.CorrectionUtil.collectUninitializedMembers;
import static com.redhat.ceylon.eclipse.code.correct.CorrectionUtil.getDescription;
import static com.redhat.ceylon.eclipse.util.Nodes.findDeclarationWithBody;
import java.util.Collection;
import java.util.List;
import org.eclipse.core.resources.IFile;
import org.eclipse.jface.text.Region;
import org.eclipse.jface.text.contentassist.ICompletionProposal;
import org.eclipse.jface.viewers.StyledString;
import org.eclipse.ltk.core.refactoring.TextChange;
import org.eclipse.ltk.core.refactoring.TextFileChange;
import org.eclipse.text.edits.InsertEdit;
import com.redhat.ceylon.compiler.typechecker.tree.Node;
import com.redhat.ceylon.compiler.typechecker.tree.Tree;
import com.redhat.ceylon.eclipse.util.Highlights;
import com.redhat.ceylon.model.typechecker.model.Declaration;
import com.redhat.ceylon.model.typechecker.model.TypedDeclaration;
class AddParameterListProposal extends CorrectionProposal {
AddParameterListProposal(int offset,
String desc, TextChange change) {
super(desc, change, new Region(offset, 0));
}
@Deprecated
static void addParameterListProposal(IFile file,
Collection<ICompletionProposal> proposals,
Node node, Tree.CompilationUnit rootNode,
boolean evenIfEmpty) {
if (node instanceof Tree.TypedDeclaration) {
node = findDeclarationWithBody(rootNode, node);
}
if (node instanceof Tree.ClassDefinition) {
Tree.ClassDefinition decNode =
(Tree.ClassDefinition) node;
Node n = CorrectionUtil.getBeforeParenthesisNode(decNode);
if (n!=null && decNode.getParameterList()==null) {
Declaration dec = decNode.getDeclarationModel();
List<TypedDeclaration> uninitialized =
collectUninitializedMembers(decNode.getClassBody());
if (evenIfEmpty || !uninitialized.isEmpty()) {
StringBuilder params = new StringBuilder().append("(");
for (TypedDeclaration ud: uninitialized) {
if (params.length()>1) {
params.append(", ");
}
params.append(ud.getName());
}
params.append(")");
TextFileChange change =
new TextFileChange("Add Parameter List", file);
int offset = n.getEndIndex();
change.setEdit(new InsertEdit(offset, params.toString()));
proposals.add(new AddParameterListProposal(offset+1,
"Add initializer parameters '" + params +
"' to " + getDescription(dec),
change));
}
}
}
}
@Override
public StyledString getStyledDisplayString() {
String hint =
CorrectionUtil.shortcut(
"com.redhat.ceylon.eclipse.ui.action.addParameterList");
return Highlights.styleProposal(getDisplayString(), false)
.append(hint, StyledString.QUALIFIER_STYLER);
}
}