问题描述
当在同一个项目中有两个 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);
}
}