2017-02-12 15 views
0

현재 Eclipse 플러그인을 작성 중입니다. Xtend 클래스를 프로그래밍 방식으로 Java 클래스의 수퍼 클래스로 설정하려고합니다. 두 클래스가 모두 Java 클래스 인 경우 JDT API를 사용하여이를 수행합니다. 문제는 Java AST 또는 Java 모델을 통해 Xtend 클래스에 액세스 할 수 없다는 것입니다.프로그래밍 방식으로 Xtend 클래스를 Java 클래스의 수퍼 클래스로 설정

이 내가 Xtend 클래스에 접근을 시도 것입니다 : 슈퍼 클래스로 Xtend 클래스를 설정하는 방법이 있나요 IJavaProject.findType()

사용하여 ASTParser

  • 를 사용

    • 를? IType 또는 TypeDeclaration에 대한 참조없이 문자열 (패키지 + 클래스 이름)을 사용하여 수퍼 클래스를 설정할 수 있습니까?

      EDIT : Java 클래스와 Xtend 클래스가 이미 있습니다.

  • 답변

    1

    수퍼 클래스의 정규화 된 이름을 이미 알고 있다면 AST 또는 Java Model을 통해 액세스 할 필요가 없습니다. 이름만으로 충분합니다.

    자바 클래스의 수퍼 클래스 설정에 대해 이야기 할 때 클래스 (a)가 처음부터 만들어 지거나 (b) 존재하고 수정 중인지 확실하지 않습니다. 여전히 두 시나리오는 공개 AST 을 사용하여 수행 할 수 있습니다 ((a) AST를 작성한 후 ASTFlattener을 사용하여 직렬화하고, (b)의 경우 ASTRewrite)을 사용해야합니다.

    어느 쪽이든, 당신은 사용하고자하는 API가 TypeDeclaration.setSuperclassType(Type)이며, 인수 아마 QualifiedName에서 구성된 SimpleType입니다 : 귀하의 답변에 대한

    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 드래곤을 훈련시키는 방법"에 대해 이야기 했으므로 # 46 슬라이드로 건너 뜁니다. 또한 JDT/UI의 구현을 탐색하여 많은 재 작업을 배울 수 있습니다. JDT/UI에서는 모든 빠른 수정/지원 및 리팩토링이 재 작성을 사용하여 구현됩니다. –

    +0

    지금까지 도와 주셔서 감사합니다! 모든 팁과 다른 예제로 시도했지만 Java 클래스에서 변경 사항을 볼 수 없도록 노력하고 있습니다. 내가 아이디어가 부족하기 때문에 나는 여기에 질문을 썼다 : http://stackoverflow.com/questions/42279095/eclipse-ast-not-changing-class-files-when-changing-typedeclaration – ConveniencePatterns