Я хочу извлечь все блоки catch из java-кода. Я могу извлечь нормальный блок try-catch, но если блоки catch будут вложены в некоторые другие типы блоков, такие как «if», мой код сможет их обнаружить.Извлечение вложенных блоков Catch в код Java
Ниже приводится код, который я написал, используя AST парсер:
public static void methodVisitor(String content)
{
ASTParser metparse = ASTParser.newParser(AST.JLS3);
metparse.setSource(content.toCharArray());
metparse.setKind(ASTParser.K_STATEMENTS);
Block block = (Block) metparse.createAST(null);
block.accept(new ASTVisitor()
{
public boolean visit(VariableDeclarationFragment var)
{
return false;
}
public boolean visit(SimpleName node)
{
return false;
}
public boolean visit(IfStatement myif)
{
System.out.println("myif=" + myif.toString());
return false;
}
public boolean visit(TryStatement mytry)
{
System.out.println("mytry=" + mytry.toString());
List catchClauses = mytry.catchClauses();
CatchClause clause = (CatchClause) catchClauses.get(0);
SingleVariableDeclaration exception = clause.getException();
Type type = exception.getType();
System.out.println("catch=" + catchClauses.toString());
return false;
}
public boolean visit(CatchClause mycatch)
{
System.out.println("mycatch=" + mycatch.toString());
return false;
}
});
}
Этот код не может извлечь пункт улова в следующих условиях:
if (base != null && base.getClass().isArray())
{
context.setPropertyResolved(base, property);
try
{
int idx = coerce(property);
checkBounds(base, idx);
}
catch (IllegalArgumentException e)
{
}
}
ли кто-нибудь знает, как извлечь вложенное улов блоки. Спасибо! заранее!!
«АСТ парсер» часть того, что набор инструментов? Моя догадка (я не знаю ваш набор инструментов) заключается в том, что ваши «посетители» собираются вместе, чтобы ходить по дереву, и что «visit (IfStmt ..)», возвращающий «false», приводит к тому, что дерево останавливается, когда if утверждение. Это предотвратило бы рекурсию вниз в подчасти «if», где скрывается ваше вложенное предложение «try». Попробуйте сделать "vist (IfStmt ...)" return "true" (возможно, вам нужно будет посещать своих детей?). –
Спасибо! Работал :-) – Sangeeta