Извлечение предложения уловов с использованием ASTParser в Java Исходный код

61
7

Я использую Java ASTParser для анализа моего java-кода. Я использую следующий код. Используя этот код, я могу извлечь заявления "if" и "try". Но я не могу извлечь "catch clause". Есть ли у кого-нибудь какое-либо представление о том, как отдельно выделять catch-clause. Следующий код не дает никаких ошибок, но его не печатает ничего в catch.

public static void methodVisitor(String content) 
{
//debug("entering met visitor", "1");
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(IfStatement myif) {
System.out.println("myif="+myif.toString());
return false;
}

public boolean visit(TryStatement mytry) {
System.out.println("mytry="+mytry.toString());
return false;
}

public boolean visit(CatchClause mycatch) {
System.out.println("mycatch="+mycatch.toString());
return false;
}

});
}

Ниже приведен пример кода, который я пытаюсь выполнить:

     public class Clock2 extends Applet implements Runnable {
private static final long serialVersionUID = 1L;
Thread timer; // The thread that displays clock
int lastxs, lastys, lastxm,
lastym, lastxh, lastyh; // Dimensions used to draw hands
SimpleDateFormat formatter; // Formats the date displayed
String lastdate; // String to hold date displayed
Font clockFaceFont; // Font for number display on clock
Date currentDate; // Used to get date to display
Color handColor; // Color of main hands and dial
Color numberColor; // Color of second hand and numbers

@Override
public void init() {
lastxs = lastys = lastxm = lastym = lastxh = lastyh = 0;
formatter = new SimpleDateFormat ("EEE MMM dd hh:mm:ss yyyy", Locale.getDefault());
currentDate = new Date();
lastdate = formatter.format(currentDate);
clockFaceFont = new Font("Serif", Font.PLAIN, 14);
handColor = Color.blue;
numberColor = Color.darkGray;

try {
setBackground(new Color(Integer.parseInt(getParameter("bgcolor"),16)));
} catch (Exception e) {
// Ignore
}
try {
handColor = new Color(Integer.parseInt(getParameter("fgcolor1"),16));
} catch (Exception e) {
// Ignore
}
try {
numberColor = new Color(Integer.parseInt(getParameter("fgcolor2"),16));
} catch (Exception e) {
// Ignore
}
resize(300,300); // Set clock window size
}

}

спросил(а) 2014-08-16T16:54:00+04:00 6 лет, 6 месяцев назад
1
Решение
96

это потому, что после посещения вашего узла IfStatement вы возвращаете false, поэтому анализатор не исследует внутри вашего узла.

return true, и он будет работать.

  public boolean visit(IfStatement myif) {          
System.out.println("myif="+myif.toString());
return true;
}

ответил(а) 2014-10-15T18:56:00+04:00 6 лет, 4 месяца назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема