package org.eclipse.dltk.testing; import org.eclipse.core.runtime.CoreException; import org.eclipse.debug.core.ILaunchConfiguration; import org.eclipse.dltk.ast.ASTNode; import org.eclipse.dltk.ast.declarations.Declaration; import org.eclipse.dltk.ast.declarations.ModuleDeclaration; import org.eclipse.dltk.core.DLTKCore; import org.eclipse.dltk.core.IModelElement; import org.eclipse.dltk.core.IScriptProject; import org.eclipse.dltk.core.ISourceModule; import org.eclipse.dltk.core.ISourceRange; import org.eclipse.dltk.core.ModelException; import org.eclipse.dltk.core.SourceParserUtil; public abstract class AbstractTestingElementResolver implements ITestingElementResolver { public AbstractTestingElementResolver() { super(); } @Override public ISourceRange resolveRange(IScriptProject project, ILaunchConfiguration config, String name, ISourceModule module, IModelElement element, String method) { ModuleDeclaration decl; try { decl = parseModule(module); } catch (ModelException e) { if (DLTKCore.DEBUG) { e.printStackTrace(); } return null; } catch (CoreException e) { if (DLTKCore.DEBUG) { e.printStackTrace(); } return null; } final ASTNode node = findNode(name, decl, method); if (node != null) { return new ISourceRange() { @Override public int getLength() { if (node instanceof Declaration) { Declaration decl = (Declaration) node; return decl.getNameEnd() - decl.getNameStart(); } return node.sourceEnd() - node.sourceStart(); } @Override public int getOffset() { if (node instanceof Declaration) { return ((Declaration) node).getNameStart(); } return node.sourceStart(); } }; } return null; } protected abstract ASTNode findNode(String name, ModuleDeclaration decl, String method); @Override public IModelElement resolveElement(IScriptProject project, ILaunchConfiguration config, ISourceModule module, String name) { return module; } private ModuleDeclaration parseModule(ISourceModule module) throws CoreException, ModelException { return SourceParserUtil.getModuleDeclaration(module); } }