将 Xtext 范围限制到文件夹

问题描述

当在同一个项目中有两个 Xtext 模型但在不同的文件夹中对不同的对象使用相同的名称 (ID) 时,作用域无法按照我想要的方式工作。如何将范围限制在一个文件夹内而不是整个项目? 示例:

语法:

Model:
    persons+=Person*
    greetings+=Greeting*;
Greeting:
    'Hello' name=[Person] '!';
Person:
    'person' name=ID;

文件夹结构:

project
 |-folder1
   |-person1.mydsl
 |-folder2
   |-greeting.mydsl
   |-person2.mydsl

person1.mydsl 包含一个人(“Jane”),person2.mydsl 也包含一个人(“Jane”),而 greeting.mydsl 包含一个 Greeting(“Hello Jane!”),引用 person1.mydsl 中的人而不是person2.mydsl 中的人。

documentation 告诉我使用 StateBasedContainerManager,但我不明白在哪里以及如何使用。

解决方法

感谢@Christian 和 this,我找到了解决方案。所以先给 DefaultGlobalScopeProvider 添加一个过滤器

<ngx-charts-line-chart
    [legend]="true"
    [legendPosition]="'bottom'"
    [legendTitle]="''"
    [xAxis]="true"
    [xAxisLabel]="'Date'"
    [showXAxisLabel]="true"
    [yAxis]="true"
    [yAxisLabel]="'Number of Institutions'"
    [showYAxisLabel]="true"
    [results]="chartData"
    [xAxisTickFormatting]="xAxisTickFormatting"
>
    <ng-template #tooltipTemplate let-model="model">
        <div class="chart-tooltip">
            <span>Testing</span>
        </div>
    </ng-template>
    <ng-template #seriesTooltipTemplate let-model="model">
        <div class="chart-tooltip">
            testing
            <div *ngFor="let tooltipItem of model">
                {{ 'test' }}
            </div>
        </div>
   </ng-template>
</ngx-charts-line-chart>

然后告诉我的运行时模块改用我的提供程序

public class MyGlobalScopeProvider extends DefaultGlobalScopeProvider {
    @Override
    public IScope getScope(Resource resource,EReference reference,Predicate<IEObjectDescription> filter) {
        filter = new Predicate<IEObjectDescription>() {
            @Override
            public boolean apply(IEObjectDescription input) {
                // implement here
            }
        };
        return super.getScope(resource,reference,filter);
    }
}

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...