Я определил этот запрос,Acceleo Коллекция Коллекции
[query public genCascadePath(aCSharpResourceModel : CSharpResourceModel) : Sequence(Sequence(CSharpResourceModel)) =
aCSharpResourceModel.hasRelatedCSharpRMManager->collect(rmm | rmm.hasRelatedCSharpRModel->asSequence()->prepend(aCSharpResourceModel))
/]
То, что я на самом деле сделать это:
получить последовательность из "aCSharpModel"
для каждого элемента в этом последовательность, я определяю ее как последовательность и добавляю другой элемент (
rmm.hasRelatedCSharpRModel
внутри сборника не имеет значения, это всего лишь соотношение 1 к 1)
Так что мне нужно что-то вроде этого:
{element} -> {{element , element1},{element, element2}}
Но когда я пытаюсь получить доступ к каждой из внутренних последовательностей в результате из шаблона, экс:
[for (path :Sequence(CSharpResourceModel) | aCSharpResourceModelManager.hasRelatedCSharpRModel.genCascadePath()) separator(' -> \n')]
[/for]
я получаю ошибка:
org.eclipse.acceleo.engine.AcceleoEvaluationException: Неверный тип для итерации по строке 18 в модуле TODODbResourceRepositoryCSharpFile для блока для (genCascadePath (aCSharpResourceModelManager.hasRelatedCSharpRModel)) separator ('->'). org.eclipse.emf.ecore.impl.DynamicEObjectImpl не был экземпляром последовательности (CSharpResourceModel).
Если я пытаюсь сделать то же самое для цикла, но с итератором как тип CSharpResourceModel
вместо Sequence(CSharpResourceModel)
, это не приводит к ошибке, но он рассматривает результат моего запроса в качестве одной последовательности, сплющенных один ,
Дело в том, что мне нужно иметь поведение, которое я описал в начале.
Как я могу это достичь?
спасибо.
О, боже, спасибо. Они должны четко указать, что сбор сглаживает результат в документации, хотя ... Тем не менее, вы решили мою проблему –