package de.ovgu.cide.astview; import java.util.List; import org.eclipse.jface.action.Action; import cide.gast.ASTVisitor; import cide.gast.IASTNode; import cide.gast.IASTVisitor; import de.ovgu.cide.ASTColorChangedEvent; import de.ovgu.cide.CIDECorePlugin; import de.ovgu.cide.features.IFeature; import de.ovgu.cide.features.source.ColoredSourceFile; import de.ovgu.cide.features.source.SourceFileColorManager; /** * cleans all colors from the selected (sub-)tree(s) * * @author cKaestner * */ public class CleanASTColorsAction extends Action { private List<IASTNode> nodes; private ColoredSourceFile file; public CleanASTColorsAction(List<IASTNode> nodes, ColoredSourceFile file) { super(); assert nodes != null; this.nodes = nodes; this.setEnabled(!nodes.isEmpty()); this.file = file; this.setText("Clean colors"); } boolean haveColor(List<IASTNode> nodes, IFeature feature) { return file.getColorManager().hasColor(nodes.get(0), feature); } public void run() { super.run(); this.setChecked(!this.isChecked()); SourceFileColorManager colorManager = file.getColorManager(); colorManager.beginBatch(); IASTVisitor colorRemover = new ColorRemover(colorManager); for (IASTNode node : nodes) node.accept(colorRemover); colorManager.endBatch(); CIDECorePlugin.getDefault().notifyListeners( new ASTColorChangedEvent(this, nodes, file)); } public static final class ColorRemover extends ASTVisitor { private SourceFileColorManager colorManager; public ColorRemover(SourceFileColorManager colorManager) { this.colorManager = colorManager; } public boolean visit(IASTNode node) { colorManager.clearColor(node); return super.visit(node); } } }