Xtext 交叉引用不再有效?
Xtext crossreferencing no longer working?
我使用 Xtext 多年,一直能够从一种语法交叉引用到另一种语法。但是今天,在Eclipse Photon上,通常的方法不再有效了。
在同一个工作区中,我使用默认选项创建了两个 Xtext 项目,org.xtext.example.adsl.ADsl
grammar org.xtext.example.adsl.ADsl with org.eclipse.xtext.common.Terminals
generate aDsl "http://www.xtext.org/example/adsl/ADsl"
AModel:
agreetings+=AGreeting*;
AGreeting:
'AHello' name=ID '!';
和org.xtext.example.bdsl.BDsl
,
grammar org.xtext.example.bdsl.BDsl with org.eclipse.xtext.common.Terminals
generate bDsl "http://www.xtext.org/example/bdsl/BDsl"
//import "http://www.xtext.org/example/adsl/ADsl" as adsl
ModelB:
bgreetings+=BGreeting*;
BGreeting:
'BHello' name=ID '!';
其中 BDsl
想通过注释掉的导入语句 import "http://www.xtext.org/example/adsl/ADsl" as adsl
导入 ADsl
以用于交叉引用。
过去,在取消注释该导入之前,我必须将资源引用 referencedResource = "../org.xtext.example.adsl/model/generated/ADsl.genmodel"
添加到 GenerateBDsl.mwe2
。
module org.xtext.example.bdsl.GenerateBDsl
import org.eclipse.xtext.xtext.generator.*
import org.eclipse.xtext.xtext.generator.model.project.*
var rootPath = ".."
Workflow {
component = XtextGenerator {
configuration = {
project = StandardProjectConfig {
baseName = "org.xtext.example.bdsl"
rootPath = rootPath
runtimeTest = {
enabled = true
}
eclipsePlugin = {
enabled = true
}
eclipsePluginTest = {
enabled = true
}
createEclipseMetaData = true
}
code = {
encoding = "UTF-8"
lineDelimiter = "\n"
fileHeader = "/*\n * generated by Xtext ${version}\n */"
}
}
language = StandardLanguage {
name = "org.xtext.example.bdsl.BDsl"
referencedResource = "../org.xtext.example.adsl/model/generated/ADsl.genmodel"
fileExtensions = "bdsl"
serializer = {
generateStub = false
}
validator = {
// composedCheck = "org.eclipse.xtext.validation.NamesAreUniqueValidator"
}
}
}
}
但是当我为 BDsl
生成 Xtext 工件时,我现在收到以下错误(导入仍然被注释掉)。
434 [main] ERROR xt.generator.XtextGeneratorLanguage - Error loading 'ADsl.ecore'
确实找到了 genmodel,因为如果找不到该文件,则会生成完全不同的错误。
这是怎么回事?
- 我是不是犯了一些愚蠢的错误?
- 这与this bug有关吗?如果是这样,是否有变通办法?
[... 我知道该示例不包含实际的交叉引用。我故意以最简单的方式引发错误。 ...]
确保以实际可以解析的方式引用引用的 genmodel。通常的参考看起来像 platform:/resource/project/model/Some.genmodel
所以在你的情况下 referencedResource = "platform:/resource/org.xtext.example.adsl/model/generated/ADsl.genmodel"
我使用 Xtext 多年,一直能够从一种语法交叉引用到另一种语法。但是今天,在Eclipse Photon上,通常的方法不再有效了。
在同一个工作区中,我使用默认选项创建了两个 Xtext 项目,org.xtext.example.adsl.ADsl
grammar org.xtext.example.adsl.ADsl with org.eclipse.xtext.common.Terminals
generate aDsl "http://www.xtext.org/example/adsl/ADsl"
AModel:
agreetings+=AGreeting*;
AGreeting:
'AHello' name=ID '!';
和org.xtext.example.bdsl.BDsl
,
grammar org.xtext.example.bdsl.BDsl with org.eclipse.xtext.common.Terminals
generate bDsl "http://www.xtext.org/example/bdsl/BDsl"
//import "http://www.xtext.org/example/adsl/ADsl" as adsl
ModelB:
bgreetings+=BGreeting*;
BGreeting:
'BHello' name=ID '!';
其中 BDsl
想通过注释掉的导入语句 import "http://www.xtext.org/example/adsl/ADsl" as adsl
导入 ADsl
以用于交叉引用。
过去,在取消注释该导入之前,我必须将资源引用 referencedResource = "../org.xtext.example.adsl/model/generated/ADsl.genmodel"
添加到 GenerateBDsl.mwe2
。
module org.xtext.example.bdsl.GenerateBDsl
import org.eclipse.xtext.xtext.generator.*
import org.eclipse.xtext.xtext.generator.model.project.*
var rootPath = ".."
Workflow {
component = XtextGenerator {
configuration = {
project = StandardProjectConfig {
baseName = "org.xtext.example.bdsl"
rootPath = rootPath
runtimeTest = {
enabled = true
}
eclipsePlugin = {
enabled = true
}
eclipsePluginTest = {
enabled = true
}
createEclipseMetaData = true
}
code = {
encoding = "UTF-8"
lineDelimiter = "\n"
fileHeader = "/*\n * generated by Xtext ${version}\n */"
}
}
language = StandardLanguage {
name = "org.xtext.example.bdsl.BDsl"
referencedResource = "../org.xtext.example.adsl/model/generated/ADsl.genmodel"
fileExtensions = "bdsl"
serializer = {
generateStub = false
}
validator = {
// composedCheck = "org.eclipse.xtext.validation.NamesAreUniqueValidator"
}
}
}
}
但是当我为 BDsl
生成 Xtext 工件时,我现在收到以下错误(导入仍然被注释掉)。
434 [main] ERROR xt.generator.XtextGeneratorLanguage - Error loading 'ADsl.ecore'
确实找到了 genmodel,因为如果找不到该文件,则会生成完全不同的错误。
这是怎么回事?
- 我是不是犯了一些愚蠢的错误?
- 这与this bug有关吗?如果是这样,是否有变通办法?
[... 我知道该示例不包含实际的交叉引用。我故意以最简单的方式引发错误。 ...]
确保以实际可以解析的方式引用引用的 genmodel。通常的参考看起来像 platform:/resource/project/model/Some.genmodel
所以在你的情况下 referencedResource = "platform:/resource/org.xtext.example.adsl/model/generated/ADsl.genmodel"