package tide.syntaxtree;
import snow.utils.gui.NamedAction;
import java.awt.event.ActionEvent;
import snow.datatransfer.ClipboardUtils;
import javaparser.*;
import java.util.*;
import javax.swing.Action;
public final class ActionsForNode
{
private ActionsForNode()
{
}
/** These actions copies some text to clipboard...
*/
public static List<Action> generateActionsForNode(ParserTreeNode tn)
{
List<Action> actions = new ArrayList<Action>();
if(tn instanceof FieldNode)
{
final FieldNode fn = (FieldNode) tn;
actions.add(new NamedAction("Create getter and setter for "+fn.name+" (CTRL+V to paste it)"){
public void actionPerformed(ActionEvent ae) {
generateGetSetCodeToClipboard(fn, true, true);
}
});
actions.add(new NamedAction("Create getter for "+fn.name+" (CTRL+V to paste it)"){
public void actionPerformed(ActionEvent ae) {
generateGetSetCodeToClipboard(fn, true, false);
}
});
actions.add(new NamedAction("Create setter for "+fn.name+" (CTRL+V to paste it)"){
public void actionPerformed(ActionEvent ae) {
generateGetSetCodeToClipboard(fn, false, true);
}
});
actions.add(new NamedAction("Copy name (CTRL+V to paste it)"){
public void actionPerformed(ActionEvent ae) {
ClipboardUtils.copyToClipboard(fn.name);
}
});
}
if(tn instanceof MethodNode)
{
MethodNode mn = (MethodNode) tn;
// ?
}
else if(tn instanceof EnumNode)
{
// not very useful in this syntax
final EnumNode fn = (EnumNode) tn;
actions.add(new NamedAction("Create enum switch for "+fn.name+" (CTRL+V to paste it)"){
public void actionPerformed(ActionEvent ae) {
//generateCodeToClipboard(fn, true, true);
StringBuilder sb = new StringBuilder(" switch (xxx) {\n");
for(int i=0; i<fn.getChildCount(); i++)
{
if(fn.getChildNodeAt(i) instanceof EnumConstantNode)
{
sb.append("\n case "+fn.getChildNodeAt(i)+": break;"); // usually break or return...
}
}
sb.append("\n default: break; // ");
sb.append("\n }");
ClipboardUtils.copyToClipboard(sb.toString());
}
});
}
return actions;
}
/** Getter and/or setter.
*/
private static void generateGetSetCodeToClipboard(FieldNode field, boolean getter, boolean setter)
{
String nameUp = field.name;
if(Character.isLowerCase(nameUp.charAt(0)))
{
nameUp = Character.toUpperCase(nameUp.charAt(0)) + nameUp.substring(1);
}
StringBuilder sb = new StringBuilder();
if(getter)
{
sb.append(" public ");
if(field.isStatic()) sb.append("static "); // static is already final
else sb.append("final "); // added Oct2007
sb.append(field.type+" get"+nameUp+"() { return "+field.name+"; }\r\n");
}
if(setter)
{
sb.append(" public ");
if(field.isStatic()) sb.append("static ");
else sb.append("final "); // added Oct2007
sb.append("void set"+nameUp+"("+field.type+" a) { this."+field.name+" = a; }");
}
ClipboardUtils.copyToClipboard(sb.toString().trim());
}
}
|