如何在AST中获取节点的完全限定名称?

时间:2018-03-08 17:28:58

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

我使用ASTParser解析一些代码,我需要完全限定的节点名称。我尝试了以下内容,但它无法正常工作。它仍然只给我一个简单的名字。

@Service
public class TopicService {

    @Autowired
    private TopicRepository topicRepository;

    public List<Topic> getAllTopics()
    {
        List<Topic> topics = new ArrayList<>();
        topicRepository.findAll()
                .forEach(topics::add);
        return topics;
    }

    public Topic getTopic(String id)
    {
        return topicRepository.findById(id).get();
    }


    public void addTopic(Topic topic) {
        topicRepository.save(topic);
    }

    public void updateTopic(String id, Topic topic) {
        topicRepository.save(topic);
    }

    public void deleteTopic(String id) {
        topicRepository.deleteById(id);
    }
}

有什么想法?谢谢!

1 个答案:

答案 0 :(得分:2)

类型org.eclipse.jdt.core.dom.Name是AST结构的一部分,因此只知道源代码中的内容。如果源代码包含一个简单的名称,那么该节点将包含该名称。

要获取已解决类型的限定名称,您需要使用以下

之一请求绑定
  • org.eclipse.jdt.core.dom.AbstractTypeDeclaration.resolveBinding()
  • org.eclipse.jdt.core.dom.Name.resolveBinding()
  • ...

在生成的ITypeBinding上,getQualifiedName()应该会显示您要查找的名称。

我发现你已经打电话给parser.setResolveBindings(true);,所以你应该全力以赴。