Почему некоторые VariableDeclaration resolBinding возвращает ноль, а другие нет - PullRequest
1 голос
/ 18 мая 2011

Я разрабатываю плагин Eclipse для анализа исходного кода Java. Я просматриваю все дерево AST и пишу посетителю, чтобы посетить каждую переменнуюDeclartionStatement, я заметил, что для некоторых переменных «resolbinding» возвращает экземпляр IVariableBinding, а для других - нет. Я не могу их дифференцировать. Кстати, я установил ASTParser.setKind (K_COMPILATION_UNIT) и setResolveBindings (true). Мой код выглядит следующим образом:

@Override
public boolean visit(VariableDeclarationStatement vStatement) {
    Type theType = vStatement.getType();
    for(Iterator iterator = vStatement.fragments().iterator();iterator.hasNext();){
        VariableDeclarationFragment fragment = (VariableDeclarationFragment)iterator.next();
        IVariableBinding binding = fragment.resolveBinding();           
        if(binding !=null){
            ITypeBinding tBinding =  binding.getType();
            if(tBinding !=null){
                // if there is ArrayType, get the root type
                while(tBinding.getComponentType()!=null){
                    tBinding = tBinding.getComponentType();
                }
                System.out.println("USING BINDING VARIABLE CLASS IS: " + tBinding.getQualifiedName());  
            }

        }                       
    }
}

У меня вопрос: как я могу дифференцировать объявления переменных, которые могут разрешать привязки, с другими, которые не могут?

Большое спасибо заранее

1 Ответ

1 голос
/ 06 июня 2011

Из JavaDoc на VariableDeclarationFragment:

Фрагмент объявления переменной AST-узел тип, используемый в объявлениях полей, объявления локальных переменных и ForStatement инициализаторы. Это в отличие от SingleVariableDeclaration, фрагменты отсутствуют модификаторы и тому тип; они расположены в родительский узел фрагмента.

Попробуйте получить привязку типа от родителя VariableDeclarationFragment.

...