2017-02-12 4 views
0

В настоящее время я работаю над плагином Eclipse. Я хочу программно программировать класс Xtend как суперкласс класса Java. Если бы оба класса были классами Java, я бы сделал это с помощью JDT API. Проблема в том, что я не могу получить доступ к классам Xtend через Java AST или Java-модель.Программная установка класса Xtend как суперкласса класса Java

Это то, что я пытался получить доступ к классам Xtend:

  • с использованием ASTParser
  • использованием IJavaProject.findType()

Есть ли способ, чтобы установить класс Xtend как супер класс? Есть ли способ установить суперкласс со строкой (имя пакета + класса) без ссылки на IType или TypeDeclaration?

EDIT: И класс Java, и класс Xtend уже существуют.

ответ

1

Если вы уже знаете квалифицированное имя суперкласса, вам не нужно будет обращаться к нему через AST или Java Model, просто имя достаточно.

Когда вы говорите об установке суперкласса класса Java, неясно, создается ли этот класс (a) с нуля или (b) существует и изменяется. Тем не менее оба сценария могут быть выполнены с использованием публики AST (в случае (a) просто создайте AST и сериализуйте его, используя, например, ASTFlattener; в случае (b) вы должны использовать ASTRewrite).

В любом случае, API вы хотите использовать TypeDeclaration.setSuperclassType(Type), где аргумент, вероятно, SimpleType построен из QualifiedName:

void setSuperClass(TypeDeclaration typeDecl, String qualifiedName) { 
    AST ast = typeDecl.getAST(); 
    Name name = ast.newName(qualifiedName); 
    Type type = ast.newSimpleType(name); 
    typeDecl.setSuperclassType(type); 
} 
+0

Спасибо за ваш ответ! Это именно то, что я искал. Классы уже существуют. Я никогда раньше не использовал 'ASTRewrite', не могли бы вы рассказать мне, как это работает? – ConveniencePatterns

+1

Учитывая, что мы уже говорили о обучающих слайдах «Как обучить JDT Dragon», просто перейдите к слайду № 46 для введения. Кроме того, многое можно узнать из обзора реализации JDT/UI, где все быстрые исправления/передачи и рефакторинги реализованы с использованием перезаписи. –

+0

Спасибо за помощь! Я попробовал это со всеми вашими советами и другими примерами, но я изо всех сил стараюсь получить изменения, видимые в классах Java. Я написал здесь вопрос, потому что у меня кончились идеи: http://stackoverflow.com/questions/42279095/eclipse-ast-not-changing-class-files-when-changing-typedeclaration – ConveniencePatterns

Смежные вопросы