cross-reference scoping from 2 different grammar/models [message #1797392] |
Tue, 30 October 2018 10:27  |
Eclipse User |
|
|
|
Hi,
I am looking for a way for one xtext model to refer from another model without any explicit import features within the grammar.
Similiar to https://stackoverflow.com/questions/41967361/reference-a-dsl-from-another-dsl-and-its-model but without 'import'
Here is simplified scenario of what I try to achieve.
I have 2 xtext grammars (MyDsl1 & MyDsl2).
MyDsl2 contains feature based on MyDsl1 's dataype
grammar org.xtext.example.mydsl.MyDsl2 with org.eclipse.xtext.common.Terminals
generate myDsl2 "http://www.xtext.org/example/mydsl/MyDsl2"
import "http://www.xtext.org/example/mydsl/MyDsl1" as mydsl1
Domainmodel2 :
(features+=Feature)*;
Feature:
name=ID ':' type=[mydsl1::Type];
MWE:
module org.xtext.example.mydsl.GenerateMyDsl2
import org.eclipse.xtext.xtext.generator.*
import org.eclipse.xtext.xtext.generator.model.project.*
var rootPath = ".."
Workflow {
bean = org.eclipse.emf.mwe.utils.StandaloneSetup {
platformUri = "../.."
scanClassPath = true
registerGeneratedEPackage = "org.xtext.example.mydsl.myDsl1.MyDsl1Package"
registerGenModelFile = "platform:/resource/org.xtext.example.mydsl1/model/generated/MyDsl1.genmodel"
}
component = XtextGenerator {
configuration = {
project = StandardProjectConfig {
baseName = "org.xtext.example.mydsl2"
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.mydsl.MyDsl2"
fileExtensions = "mydsl2"// referencedResource = "platform:/resource/org.xtext.example.mydsl1/model/generated/MyDsl1.genmodel"
fragment = scoping.ImportNamespacesScopingFragment2 auto-inject {}
serializer = {
generateStub = false
}
validator = {
// composedCheck = "org.eclipse.xtext.validation.NamesAreUniqueValidator"
// Generates checks for @Deprecated grammar annotations, an IssueProvider and a corresponding PropertyPage
generateDeprecationValidation = true
}
junitSupport = {
junitVersion = "5"
}
}
}
}
I was expecting to able get access to MyDsl1 root Eobject from getScope
class MyDsl2ScopeProvider extends AbstractMyDsl2ScopeProvider {
override getScope(EObject context, EReference reference) {
if (context instanceof Feature) {
if (reference == MyDsl2Package.Literals.FEATURE__TYPE) {
val rootElement = EcoreUtil2....
...
}
}
super.getScope(context, reference)
}
}
I not able to see such api from EcoreUtil2.
Perhaps the solution doesn't involve getScope() at all. But appreciate if can point the best way to deal with this.
Thanks.
[Updated on: Tue, 30 October 2018 10:30] by Moderator
|
|
|
|
|
|
Powered by
FUDForum. Page generated in 0.04450 seconds