Это некоторое время меня озадачивало ... Я провел исследование, много чего пробовал, но с треском провалился. Пришло время спросить здесь.
В моей грамматике есть это правило для определения типов:
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 в область видимости по умолчанию.
Итак, вопрос в том, как изменить это поведение? Мне нужно включить экземпляры MyTypeDeclaration (или, в более общем случае, классы Java с MySupertype в качестве суперкласса) в область действия XFeatureClass. Я посмотрел на тип компьютера, getLinkingCandidates и другие, но для меня это выглядит слишком загадочно.
Я использую версию 2.15, так как мне нужен GWT ...
Пожалуйста, помогите, так как я действительно застрял на этом этапе ...
Спасибо
Martin