package org.eclipse.dltk.tcl.testing.internal.tcltest; import org.eclipse.core.runtime.CoreException; import org.eclipse.dltk.ast.ASTNode; import org.eclipse.dltk.ast.ASTVisitor; import org.eclipse.dltk.ast.declarations.ModuleDeclaration; import org.eclipse.dltk.ast.expressions.Expression; import org.eclipse.dltk.ast.references.SimpleReference; import org.eclipse.dltk.core.DLTKCore; import org.eclipse.dltk.tcl.ast.TclStatement; import org.eclipse.dltk.testing.AbstractTestingElementResolver; import org.eclipse.dltk.testing.ITestingElementResolver; public class TcltestMemberResolver extends AbstractTestingElementResolver implements ITestingElementResolver { protected ASTNode findNode(final String testName, ModuleDeclaration decl, String method) { final ASTNode[] nde = new ASTNode[] { null }; try { decl.traverse(new ASTVisitor() { public boolean visitGeneral(ASTNode node) throws Exception { if (node instanceof TclStatement && ((TclStatement) node).getCount() > 2) { TclStatement st = (TclStatement) node; Expression cmd = st.getAt(0); if (cmd instanceof SimpleReference) { String cmdName = ((SimpleReference) cmd).getName(); if (cmdName.startsWith("::")) { cmdName = cmdName.substring(2); } if ("test".equals(cmdName) || "tcltest::test".equals(cmdName)) { // List findLevelsTo = findLevelsTo(decl, node); Expression name = st.getAt(1); if (name instanceof SimpleReference) { String nameValue = ((SimpleReference) name) .getName(); if (testName.equals(nameValue)) { nde[0] = st; } } } } } return true; } }); } catch (CoreException e) { if (DLTKCore.DEBUG) { e.printStackTrace(); } } catch (Exception e) { if (DLTKCore.DEBUG) { e.printStackTrace(); } } return nde[0]; } }