Xtext交叉引用不再起作用?

时间:2018-08-18 19:12:00

标签: xtext

我已经使用Xtext多年了,并且始终能够从一种语法交叉引用到另一种语法。但是今天,在Eclipse Photon上,通常的方法不再有效。

在同一工作区中,使用默认选项org.xtext.example.adsl.ADsl

创建两个Xtext项目。
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希望通过注释掉的导入语句ADsl导入import "http://www.xtext.org/example/adsl/ADsl" as 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'

肯定会找到该基因模型,因为如果找不到该文件,则会产生完全不同的错误。

这是怎么回事?

  • 我犯了一些愚蠢的错误吗?
  • 这与this bug有关吗?如果是这样,是否可以解决?

[...我知道该示例没有实际的交叉引用。我故意以最简单的方式导致了错误。 ...]

1 个答案:

答案 0 :(得分:1)

确保以实际可以解析的方式引用引用的基因模型。常用参考看起来像platform:/resource/project/model/Some.genmodel,所以在您的情况下referencedResource = "platform:/resource/org.xtext.example.adsl/model/generated/ADsl.genmodel"