package com.redhat.ceylon.eclipse.code.search; import static com.redhat.ceylon.eclipse.ui.CeylonPlugin.PLUGIN_ID; import java.util.Set; import org.eclipse.core.resources.IProject; import org.eclipse.jdt.core.search.IJavaSearchConstants; import org.eclipse.jface.viewers.ISelection; import org.eclipse.ui.IEditorPart; import com.redhat.ceylon.compiler.typechecker.tree.Node; import com.redhat.ceylon.compiler.typechecker.tree.Tree; import com.redhat.ceylon.ide.common.util.FindAssignmentsVisitor; import com.redhat.ceylon.model.typechecker.model.ClassOrInterface; import com.redhat.ceylon.model.typechecker.model.Declaration; import com.redhat.ceylon.model.typechecker.model.FunctionOrValue; import com.redhat.ceylon.model.typechecker.model.Referenceable; import com.redhat.ceylon.model.typechecker.model.TypeAlias; import com.redhat.ceylon.model.typechecker.model.TypeParameter; public class FindAssignmentsAction extends AbstractFindAction { private static final class Query extends FindSearchQuery { private Query(Declaration referencedDeclaration, IProject project) { super(referencedDeclaration, project); } @Override protected Set<Node> getNodes(Tree.CompilationUnit cu, Referenceable referencedDeclaration) { FindAssignmentsVisitor frv = new FindAssignmentsVisitor((Declaration) referencedDeclaration); cu.visit(frv); return frv.getAssignmentNodeSet(); } @Override int limitTo() { //this is understood by the impl of //JavaSearch.createSearchPattern() return IJavaSearchConstants.WRITE_ACCESSES; } @Override protected String labelString() { return "assigments to"; } } public FindAssignmentsAction() { super("Find Assignments"); setActionDefinitionId(PLUGIN_ID + ".action.findAssignments"); } public FindAssignmentsAction(CeylonSearchResultPage page, ISelection selection) { super("Find Assignments", page, selection); setActionDefinitionId(PLUGIN_ID + ".action.findAssignments"); } public FindAssignmentsAction(IEditorPart editor) { super("Find Assignments", editor); setActionDefinitionId(PLUGIN_ID + ".action.findAssignments"); } public FindAssignmentsAction(IEditorPart editor, Declaration dec) { super("Find Assignments", editor, dec); setActionDefinitionId(PLUGIN_ID + ".action.findAssignments"); } @Override boolean isValidSelection() { //TODO: invalid for getters with no matching setter return declaration instanceof FunctionOrValue || declaration instanceof ClassOrInterface || declaration instanceof TypeAlias || declaration instanceof TypeParameter; } @Override public FindSearchQuery createSearchQuery() { return new Query((Declaration) declaration, project); } }