[
Date Prev][
Date Next][
Thread Prev][
Thread Next][
Date Index][
Thread Index]
[
List Home]
Re: [cdt-dev] How to open a file at a particular function
|
Hi Derek,
Below you will find some code to find a method name in project files. I am not a CDT expert, so maybe it's not the best way to do it.
Regards,
Mariot
*****************************************************
public class MyVisitor extends ASTVisitor {
{
shouldVisitDeclarations = true;
}
public static final String LINE_NUMBER = "org.yourcompany.line_number
"; //$NON-NLS-1$
public static final String FILE = "org.yourcompany.file"; //$NON-NLS-1$
public static final String FUNCTION = "org.yourcompany.function"; //$NON-NLS-1$
private ArrayList result = new ArrayList();
private String input;
public ArrayList getResult() {
return result;
}
public setInput(String input) {
this.input
= input;
}
public int visit(IASTDeclaration decl) {
try {
if (decl instanceof IASTFunctionDefinition) {
String function_signature =
decl.getRawSignature();
//check if the input is in the function_signature
if (function_signature.indexOf(input) > 0) {
//save the needed informations
Map b = new HashMap ();
b.put(MyVisitor.LINE_NUMBER,String.valueOf(decl.getFileLocation().getStartingLineNumber()));
b.put(MyVisitor.FILE,decl.getContainingFilename
());
b.put(MyVisitor.FUNCTION,((IASTFunctionDefinition) decl).getDeclarator().getRawSignature());
this.result.add(b);
}
}
return PROCESS_CONTINUE;
} catch (Throwable e) {
return PROCESS_ABORT;
}
};
}and in an another class :
private void visitFolders(ICContainer folders[], ASTVisitor astVisitor) throws CoreException {
for (int i=0; i<folders.length; i++) {
ITranslationUnit files[] = folders[i].getTranslationUnits();
for (int j=0;j<files.length;j++) {
IASTTranslationUnit ast = files[j].getAST();
if (ast !=null) ast.accept(astVisitor);
}
this.visitFolders(folders[i].getCContainers(), astVisitor);
}
}
....
MyVisitor myVisitor = new MyVisitor();
myVisitor.set("the method name you search");
this.visitFolders(project.getSourceRoots(), myVisitor);
// then you get the results
...
--
Mariot Chauvin