cross-reference with modified name [message #1799466] |
Fri, 07 December 2018 05:19  |
Eclipse User |
|
|
|
Hi,
How do we make a language cross-reference to an object from another language/model with slightly different label?
Let me try to describe this further by giving a simplified scenario:
1. I have language A with Definition as one of a class.
2. My language B cross-reference the definition from model A.
3. My language C also cross-reference the definition from model A.
4. All above are working well. However, there is further requirements that B and C should display the definition slightly differently. e.g
a. Say language A has definition 'Def1', 'Def2' and 'Def3'
b. Now language B need to cross-reference as all in uppercase i.e 'DEF1', 'DEF2' and 'DEF3'
c. Now language C need to cross-reference as all in lowercase i.e 'def1', 'def2' and 'def3'
I am open to any suggestion. Thanks.
|
|
|
|
|
|
|
|
|
|
Re: cross-reference with modified name [message #1799605 is a reply to message #1799599] |
Mon, 10 December 2018 19:47  |
Eclipse User |
|
|
|
Thanks Christian, that explained it.
In my case, since context does not have to be fixed - I able just to skip the check. i.e this works.
class LangBScopeProvider extends AbstractLangBScopeProvider {
override getScope(EObject context, EReference reference) {
if (context instanceof Use1) {
if (reference == LangBPackage.Literals.USE1__NAME) {
val scope = super.getScope(context, reference)
println("USE1__NAME")
val defs = scope.allElements.map([ d |
new AliasedEObjectDescription(QualifiedName.create(d.name.firstSegment.toUpperCase), d)
]).map([d|d as IEObjectDescription])
return new SimpleScope(defs)
}
}
// if (context instanceof UseRef) {
// if (reference == LangBPackage.Literals.USE_REF__NAME) {
// val scope = super.getScope(context, reference)
// println("USE_REF__NAME")
// val defs = scope.allElements.map([ d |
// new AliasedEObjectDescription(QualifiedName.create(d.name.firstSegment.toUpperCase), d)
// ]).map([d|d as IEObjectDescription])
// return new SimpleScope(defs)
// }
// }
if (reference == LangBPackage.Literals.USE_REF__NAME) {
val scope = super.getScope(context, reference)
println("none UseRef USE_REF__NAME")
val defs = scope.allElements.map([ d |
new AliasedEObjectDescription(QualifiedName.create(d.name.firstSegment.toUpperCase), d)
]).map([d|d as IEObjectDescription])
return new SimpleScope(defs)
}
super.getScope(context, reference)
}
}
|
|
|
Powered by
FUDForum. Page generated in 0.08280 seconds