首页 > 解决方案 > 扩展 XFeatureCall 范围

问题描述

这让我困惑了一段时间……我做了研究,尝试了很多东西,但惨遭失败。到了这里问的时候了。

我的语法有这个规则来定义类型:

MyTypeDeclaration returns XExpression:
    =>({MyTypeDeclaration} type=JvmTypeReference name=ValidID '(')
    (params+=FullJvmFormalParameter (',' params+=FullJvmFormalParameter)*)?
  ')' block=XBlockExpression
;

当然,在推断器中,我将其映射到一个类(使用超类型 MySupertype 以区别于其他 Java 类)

    members += f.toClass(f.fullyQualifiedName) [
      superTypes += typeRef(MySupertype)
      ...

      members += f.toConstructor [
        for (p : f.params)
          parameters += p.toParameter(p.name, p.parameterType)
        body = f.block
      ]
      ...
    ]

我需要的是调用这个类作为一个函数,例如使用XFeatureCall。XFeatureCall::feature 是一个 JvmIdentifiableElement,映射时 MyTypeDeclaration 也是如此(在编译器中,我将添加一个“新”前缀来调用类构造函数)。但是,很自然地,XFeatureClass 在其默认范围内不包括 Java 类。

所以问题是,如何改变这种行为?我需要在 XFeatureClass 范围内包含 MyTypeDeclaration 实例(或更一般地说,将 MySupertype 作为超类的 Java 类)。我查看了类型计算机、getLinkingCandidates 等,但它看起来对我来说太神秘了。

我使用 2.15 版本,因为我需要 GWT ......

请帮忙,因为我真的被困在这一点上......

谢谢,

马丁

标签: xtext

解决方案


推荐阅读