|
Re: IScope provider Question [message #660863 is a reply to message #660845] |
Tue, 22 March 2011 07:01 |
|
Hi,
yes this should be possible.
you may then have two scoping methods (due lazy init. of Context)
public IScope scope_Context _contextReference(Context c, EReference r) {
}
public IScope scope_Context _contextReference(ValidationRuleDef vrd, EReference r) {
}
Please note that you should add the neccesary information to the EObjectDescriptions (UserData) of your Records to be able to access it fast within the scoping rule.
Just add the stuff within you IResourceServiceProvider at the place where you create the EObjectDescriptions.
~Christian
Twitter : @chrdietrich
Blog : https://www.dietrich-it.de
|
|
|
Re: IScope provider Question [message #660897 is a reply to message #660845] |
Tue, 22 March 2011 09:31 |
romeh Messages: 35 Registered: February 2011 |
Member |
|
|
Hi Christian,
Thanks a lot for your answer, i have 2 questions here:
1- From your method signature, the contextReference will be reachable only from Conetext Rule or Validation rule, so i how i can get mainNode Reference , that defined into the root rule (DomainModel ), as i need to refer to it, then use it, to get all model::Record defined within it, from the ecore instance
2- Can i access the parser tree into the scope method, to get DomainModel root Node from the constructed tree, then access its references, which in my concern , will be the mainNode reference, then use it to fetch all model::record eStructural features defined with in it?
Thanks again for your support,
|
|
|
Re: IScope provider Question [message #660904 is a reply to message #660897] |
Tue, 22 March 2011 09:52 |
|
Hi,
i'd just walk up the tree (ask for eContainer()) until i find a DomainModel and ask it for it's mainNode and then the Mainnode for its Records
PseudoCode:
public IScope scope_Context _contextReference(ValidationRuleDef vrd, EReference r) {
DomainModel dm = (DomainModel)vrd.eContainer();
return Scopes.scopeFor(dm.getMainNode.getRecords());
}
~Christian
Twitter : @chrdietrich
Blog : https://www.dietrich-it.de
|
|
|
|
|
|
|
|
Re: IScope provider Question [message #661051 is a reply to message #660845] |
Tue, 22 March 2011 22:26 |
romeh Messages: 35 Registered: February 2011 |
Member |
|
|
Hi Christian,
i am facing a new problem, i have implemented the scope provider and it is working fine, the problem now , i have changed my grammar to be :
DomainModel : (imports+=Import)* (mainNode=[model::Node])(elements += Rule)*;
Import :'import' importURI=STRING;
Rule :ValidationRuleDef | actionRule ;
ValidationRuleDef : context=Context 'validationRule';
actionRule :context=Context 'actionRule';
Context : 'Context:' contextReference = [model::Record];
now , the we have 2 rules , referring to context, the scope provider was working with only ValidationRuleDef being used,
after adding the actionRule, it dose not work as the tree was not fully construced waiting for which Rule Type will be created, while i am using Xtext editor, so how i can to force to limit the contextReference whatever Rule type, is there is any global scoping for contextReference ?
Thanks a lot
|
|
|
|
Powered by
FUDForum. Page generated in 0.04597 seconds