0

我正在开发一个 xtext 项目,我必须在其中自定义范围提供程序。我需要为范围添加一些可能的候选人。第一部分(getServiceInputs())工作正常,但第二部分(addAll(sub.GetSubRecipeParameters())不行。调试表明它们已从其原始源(sub)中删除,因此无法再次检索。当简单评论时在 addAll 行中,SubRecipeParameters 保留在 sub 中。真的不知道如何解决这个问题,已经尝试了一些解决方法。任何有想法的人?

public class AutomationServiceDslScopeProvider extends AbstractAutomationServiceDslScopeProvider {

    @Override
    public IScope getScope(EObject context, EReference reference) {
        if (context instanceof ServiceInvocationParameter
                && reference == AutomationServiceDslPackage.Literals.LITERAL) {
                ServiceInvocation serviceCall = (ServiceInvocation) invocationParameter.eContainer();
                ServiceDefinition calledService = serviceCall.getService();
                List<ServiceParameterDefinition> candidates= calledService.getServiceInputs();
                final EObject rootContainer = EcoreUtil.getRootContainer(context);
                List<SubRecipeDefinition> subs = EcoreUtil2.getAllContentsOfType(rootContainer, SubRecipeDefinition.class);
                for(SubRecipeDefinition sub:subs) {
                    for(RecipeStep step:sub.getRecipeSteps()) {
                        if(step.getName()==serviceCall.getName()) {
                            candidates.addAll(sub.getSubRecipeParameters());
                            }
                    }
                    
                    
                }
                
                return Scopes.scopeFor(candidates);

谢谢你的帮助!!

4

1 回答 1

0

如果您将元素从一个移动EList到另一个,这是正常的 EMF 行为。解决方案是创建一个新列表,例如new ArrayList<>()并在那里添加输入

List<ServiceParameterDefinition> candidates = new ArrayList<>();
candidates.addAll(calledService.getServiceInputs());
于 2021-07-14T12:40:13.440 回答