2016-02-05 3 views
0

Я к новому в Xtext. Мне нужно расширить интерфейс с помощью интерфейса. Мне нужно что-то вроде этого:Xtend: расширение интерфейса с интерфейсом

import org.springframework.data.jpa.repository.JpaRepository; 

@Repository 
public interface PHRRepository extends 
     JpaRepository<PlantHireRequest, Long> { 

} 

Моя грамматика:

Repository: 
    'repo' name=ValidID ':' type=JvmTypeReference 
    body=XBlockExpression; 

Мой JVMinferrer код:

@Inject 
    private TypesFactory typesFactory; 

    @Inject 
    private TypeReferences references; 

    public static String REPOSITORY = "org.springframework.stereotype.Repository"; 
    public static String JPAREPOSITORY = "org.springframework.data.jpa.repository.JpaRepository"; 

    //repositories 
    def dispatch void infer(Repository repo, 
       IJvmDeclaredTypeAcceptor acceptor, 
       boolean isPrelinkingPhase) { 
     acceptor.accept(repo.toInterface(repo.name, null)) [  
      documentation = repo.documentation 
      annotations += annotationRef(REPOSITORY); 
    superTypes += JPAREPOSITORY.typeRef(repo.type.cloneWithProxies,Long.typeRef); 
    ] 
    } 

, который дает это:

@Repository 
public interface PHRRepository { 
} 

Может кто-нибудь помочь мне в это?

ответ

0

следующие прекрасно работает для меня

accept(entity.toInterface("I"+entity.name,[]))[ 
     superTypes += IEntity.typeRef 
    ] 

или

accept(entity.toInterface("I"+entity.name,[]))[ 
     if (entity.superType != null) //asuming entity.supertype is modeled to be an interface 
      superTypes += entity.superType.cloneWithProxies 
    ] 

если вы хотите дженериков вы можете использовать

JpaRepository.typeRef(PlantHireRequest.typeRef, Long.typeRef) 

или

"x.y.Z".typeRef("a.b.C".typeRef(), "java.lang.Long".typeRef()) 

смешивание в настоящее время не работает, так как обходной путь вы можете использовать

superTypes += "x.y.Z".typeRef(entity.superType.qualifiedName.typeRef(), "java.lang.Long".typeRef()) 
+0

Спасибо за ваш reply.But мне нужно продлить «JpaRepository ». Меня поразили. Я обновил свой вопрос. –

+0

добавил намеки на мой ответ –

+0

Спасибо. Обновление вашего ответа расширило JpaRepository. Но не аргументы «». Я снова обновил свой вопрос. Кроме того, внутри папки не создавались интерфейсы. Он генерируется внутри root. Как создать генерировать внутри папки. –