Xtext и Xtend: интерфейсы внутри папки

Я видел, что классы генерируются внутри отдельной папки/пакета. Но файлы интерфейса генерируются в корневой папке, а не внутри конкретного пакета.

Вот код для JVM Inferrer:

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

Вот модель:

import dsltest.models.Plant
import dsltest.models.Customer

package dsltest.repositories {

 repo PlantRepository : Plant {}
 repo CustomerRepository : Customer {}
}

Вот сгенерированные файлы:

скриншот src-gen

Как сделать так, чтобы интерфейс генерировался внутри dsltest-> respositories -> CustomerRepository.java


person Vinod John    schedule 08.02.2016    source источник


Ответы (1)


первый параметр метода toInterface должен быть квалифицированным именем, например.

accept(entity.toInterface(entity.fullyQualifiedName,[]))[
...
]

or

accept(entity.toInterface(EcoreUtil2.getContainerOfType(entity,  Package).name+"."+entity.name,[]))[
...
]
person Christian Dietrich    schedule 08.02.2016
comment
toInterface (строка, инициализатор). Итак, несоответствие типов: невозможно преобразовать QualifiedName в String. Второй: Несоответствие границ: аргумент типа ‹Package› не является допустимой заменой для параметра ограниченного типа ‹T extends EObject› метода getContainerOfType(EObject, Class‹T›) - person Vinod John; 09.02.2016
comment
Я уже пробовал это раньше. Не удалось решить это. Есть ли другой способ сделать это? - person Vinod John; 09.02.2016
comment
Можете ли вы поделиться полной грамматикой и выводом, который я могу скопировать и вставить - person Christian Dietrich; 09.02.2016
comment
Это очень долго. Здесь трудно поделиться. Проблема в том, что я не смог добавить fullQualifiedName в качестве типа параметра toInterface(). Он принимает только строки. - person Vinod John; 10.02.2016
comment
Есть ли способ создать классы в разных пакетах, изменив имена пакетов в JvmInferrer? - person Vinod John; 10.02.2016
comment
я не понимаю, что я предложил accept(entity.toInterface("a"+".b"+".I"+entity.name,[]))[ - person Christian Dietrich; 10.02.2016