zelus
zelus

Reputation: 168

No completion for Xbase expressions when embedded in another Xtext DSL

I am building a Xtext DSL and I want to embed Xbase expressions in some specific places to interpret part of my models using the Xbase interpreter, but I am not able to have method completion in the generated editor.

I reused the examples provided here: https://www.eclipse.org/Xtext/documentation/201_sevenlang_introduction.html, and manage to integrate Xbase as part of my grammar. Keyword completion proposal is working fine (i.e. do, for, while ...), but I can't find a way to have completion for Java/Xbase methods (e.g. newArrayList, or myArray.add(X)). Clarification from comments below: if I write var x = newArrayList in the editor the method is not styled in italic but I don't have any error either.

This is a sample version of the grammar I am using:

grammar org.xtext.example.common2.Common2 with org.eclipse.xtext.xbase.Xbase

generate common2 "http://www.xtext.org/example/common2/Common2"
import "http://www.eclipse.org/xtext/xbase/Xbase"

Test returns Test:
    {Test}
    'test'
    expressions+=Script
;

Script returns XBlockExpression:
    {Script}
    '{'
    (expressions+=XExpressionOrVarDeclaration ';'?)*
    '}'
;

I found out that if I change my grammar to the following one I can have the completion as expected:

grammar org.xtext.example.common2.Common2 with org.eclipse.xtext.xbase.Xbase

generate common2 "http://www.xtext.org/example/common2/Common2"
import "http://www.eclipse.org/xtext/xbase/Xbase"

Test returns XBlockExpression:
    {Test}
    'test'
    expressions+=Script
;

Script returns XBlockExpression:
    {Script}
    '{'
    (expressions+=XExpressionOrVarDeclaration ';'?)*
    '}'
;

My guess is that all the tree must be composed of instances of XExpression to enable the completion, but I don't understand why? To me Test should not be a subclass of XBlockExpression (in my real-world use case Test has additional attributes/references), but it should contain an XBlockExpression.

Is there a way to achieve this? Any help/resource to look at would be much appreciated

Note I already checked this SO question How to embed XBase expressions in an Xtext DSL, I already have xbase.lib in my build path.

Upvotes: 0

Views: 70

Answers (0)

Related Questions