gpt4 book ai didi

java - 在 Java 源代码中使用 ASTParser 提取 Catch 子句

转载 作者:太空宇宙 更新时间:2023-11-04 14:37:48 26 4
gpt4 key购买 nike

我正在使用 Java ASTParser 来解析我的 java 代码。我正在使用以下代码。使用此代码我可以提取“if”和“try”语句。但我无法提取“catch 条款”。有谁知道如何在此单独提取 catch 子句吗?以下代码没有给出任何错误,但它没有在 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
}

}

最佳答案

这是因为在访问您的 IfStatement 节点后,您返回 false,因此解析器不会在您的节点内部进行探索。

返回 true 就可以了。

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

关于java - 在 Java 源代码中使用 ASTParser 提取 Catch 子句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25340834/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com