Eclipse JDT ASTVisitor - 如何判断方法中是否读取或写入字段?

发布于 2024-08-07 21:52:02 字数 141 浏览 6 评论 0原文

我正在编写一个 Eclipse ASTVisitor。如何判断方法中是否读取或写入字段?

提供的想法是“您需要访问分配节点。写入左侧的字段,同时读取右侧表达式的字段。”

当我访问作业并获得左右都是表达式时,如何判断表达式是否包含该字段?

I am writing a Eclipse ASTVisitor. How to tell if a field is read or written in a method?

The idea provided was "You need to vist Assignment node. Field on the LHS is written, while fields on the RHS expression is read."

After I visit the assignment and get the LHS and RHS which are both of Expression, how do I tell if the Expression contains the field?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

生生漫 2024-08-14 21:52:02

如果您正在进行 AST 工作,我建议使用 AST View 插件。它是理解 JDT AST 的一个非常方便的工具。

你的方法将会奏效。我在访问者内部使用一个变量来指示我正在执行任务。

    public boolean visit(final Assignment node) {
    inVariableAssignment = true;
    node.getLeftHandSide().accept(this);
    inVariableAssignment = false;
    node.getRightHandSide().accept(this);
    return false;
}

现在,当访问 SimpleNameQualifiedName 时,我会执行以下操作:

    public boolean visit(final SimpleName node) {
    if (!node.isDeclaration()) {
        final IBinding nodeBinding = node.resolveBinding();
        if (nodeBinding instanceof IVariableBinding) {
            ...
        }
    }
    return false;
}

省略号 (...) 将被替换为根据值处理字段访问的代码您的inVariableAssignment。这将帮助您开始。

哦,别忘了 PostfixExpressionPrefixExpression...

If you are doing AST work, I suggest working with the AST View plugin. It is a very handy tool for understanding the JDT AST.

Your approach will work. I use a variable inside the visitor to indicate I'm in an assignment.

    public boolean visit(final Assignment node) {
    inVariableAssignment = true;
    node.getLeftHandSide().accept(this);
    inVariableAssignment = false;
    node.getRightHandSide().accept(this);
    return false;
}

Now, when visiting a SimpleName or a QualifiedName I do something like:

    public boolean visit(final SimpleName node) {
    if (!node.isDeclaration()) {
        final IBinding nodeBinding = node.resolveBinding();
        if (nodeBinding instanceof IVariableBinding) {
            ...
        }
    }
    return false;
}

The ellipsis (...) will be replaced by a code which handles the field access according to the value of your inVariableAssignment. This will get you started.

Oh, don't forget PostfixExpression and PrefixExpression...

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文