package org.pdtextensions.core.ast.util; import org.eclipse.php.core.ast.nodes.ClassDeclaration; import org.eclipse.php.core.ast.nodes.FunctionDeclaration; import org.eclipse.php.core.ast.nodes.MethodDeclaration; import org.eclipse.php.core.ast.nodes.NamespaceDeclaration; import org.eclipse.php.core.ast.nodes.TraitDeclaration; /** * TODO: create another abstract super class, which stops visiting if we found * the desired ASTNode * * @author Alex * */ public class CoveringDeclarationFinder extends AbstractRangeFinder { private ClassDeclaration fCoveringClassDeclaration; private MethodDeclaration fCoveringMethodDeclaration; private NamespaceDeclaration fCoveringNamespaceDeclaration; private FunctionDeclaration fCoveringFunctionDeclaration; public boolean visit(ClassDeclaration declaration) { if(covers(declaration)) { fCoveringClassDeclaration = declaration; return true; } // php does not support classes in classes return false; } public boolean visit(TraitDeclaration declaration) { if(covers(declaration)) { fCoveringClassDeclaration = declaration; return true; } // php does not support traits in traits return false; } public boolean visit(MethodDeclaration declaration) { if(covers(declaration)) { fCoveringMethodDeclaration = declaration; return true; } // php does not support methods in methods return false; } public boolean visit(NamespaceDeclaration declaration) { if(covers(declaration)) { fCoveringNamespaceDeclaration = declaration; return true; } // php does not support namespaces in namepsaces return false; } public boolean visit(FunctionDeclaration declaration) { if(covers(declaration)) { fCoveringFunctionDeclaration = declaration; // this is the deepest node we're looking at. return false; } // php does not support function declarations in functions return false; } public ClassDeclaration getCoveringClassDeclaration() { return fCoveringClassDeclaration; } public MethodDeclaration getCoveringMethodDeclaration() { return fCoveringMethodDeclaration; } public NamespaceDeclaration getCoveringNamespaceDeclaration() { return fCoveringNamespaceDeclaration; } public FunctionDeclaration getCoveringFunctionDeclaration() { return fCoveringFunctionDeclaration; } }