如何从Eclipse AST中的绑定中获得常量初始化?

时间:2014-02-17 10:49:04

标签: java eclipse parsing abstract-syntax-tree eclipse-jdt

我有这个Java源代码:

package org.test;

import java.text.SimpleDateFormat;
import java.util.Date;

public class GetDateFormat {

    private static final SimpleDateFormat DATE_FORMAT =
        new SimpleDateFormat("dd/MM/yyyy");

    public static void main(String[] args) {
        System.out.println("Date : " + DATE_FORMAT.format(new Date()) + " !");
    }

}

我使用Eclipse AST解析它。 我得到了DATE_FORMAT.format(new Date())方法调用的引用。 我想知道将使用什么日期格式。 我成功找到了DATE_FORMAT声明的引用,但我想进一步了解new SimpleDateFormat("dd/MM/yyyy")初始化声明,然后是构造函数的第一个参数:"dd/MM/yyyy"

怎么做?

这是我得到的最远的地方:

private static void getDateFormat(MethodInvocation methodInvocation) {
    // methodInvocation => DATE_FORMAT.format(new Date())
    // methodInvocation.getExpression() => DATE_FORMAT
    if (methodInvocation.getExpression() instanceof SimpleName) {
        // nameBinding => private static final java.text.SimpleDateFormat DATE_FORMAT
        IBinding nameBinding = ((SimpleName) methodInvocation.getExpression()).resolveBinding();
        if (nameBinding instanceof IVariableBinding) {
            IVariableBinding variableBinding = (IVariableBinding) nameBinding;
            // TODO And now what?! How to get the initialization?! : new SDF("dd/MM/yyyy")
        }
    }
}

在Eclipse中进行调试时,我发现nameBinding的类型为VariableBinding,并且其字段binding的字段为LocalVariableBinding,其字段为declaration输入值LocalDeclaration的{​​{1}}:

Debug tree of

所以Eclipse知道SimpleDateFormat DATE_FORMAT = new SimpleDateFormat("dd/MM/yyyy")是如何初始化的。但是字段DATE_FORMAT是私有的。如果不诉诸黑暗权力(内省以获得私人领域的价值),如何以一种干净的方式获得binding

0 个答案:

没有答案