|
|
Re: [Xbase][Eclipse] Open Type on generated source link to the DSL source [message #1671069 is a reply to message #1661149] |
Fri, 13 March 2015 12:58 |
Anthony Ferrando Messages: 4 Registered: March 2015 |
Junior Member |
|
|
Thanks!
I tried to bind IURIEditorOpener to my subclass of DerivedMemberAwareEditorOpener, but none of the methods in there gets called.
It seems that it fails before that:
I generate java classes from a DSL located in different project (my projects are the following: xxx.project.dsl, xxx.project.client, xxx.project.server, xxx.project.common), all the DSLs are in the dsl project and generate classes in the common, client and server project.
When I try to access a generated class (via Open Type or ctrl+click on a link), it fails because eclipse is trying to look for the DSL in the project of the generated class rather than in the DSL project.
Somehow it fails before event calling IURIEditorOpener (even if my bindIURIEditorOpener () method is called)...
It looks like the binding to the URI of the DSL is done before, i assume I should update this?
Thanks a lot for your help,
Anthony
|
|
|
Re: [Xbase][Eclipse] Open Type on generated source link to the DSL source [message #1671079 is a reply to message #1671069] |
Fri, 13 March 2015 13:02 |
|
HI,
this makes no sense to me at all. here is the code xbase uses by default (taken from xtext 2.8.0)
public class DerivedMemberAwareEditorOpener extends LanguageSpecificURIEditorOpener implements IDerivedMemberAwareEditorOpener{
@Inject
private IJvmModelAssociations associations;
@Override
public IEditorPart open(URI uri, IMember member, boolean select) {
if (member != null) {
URI memberURI = new TypeURIHelper().getFullURI(member);
String identifier = memberURI.fragment();
URI uriWithQuery = uri.appendQuery(identifier);
super.open(uriWithQuery, select);
}
return open(uri, select);
}
@Override
protected EObject findEObjectByURI(URI uri, XtextResource resource) {
if (uri.query() != null) {
String identifier = uri.query();
TreeIterator<EObject> contents = EcoreUtil.<EObject>getAllContents(resource, true);
while(contents.hasNext()) {
EObject content = contents.next();
if (content instanceof JvmMember) {
String identifierFromResource = ((JvmIdentifiableElement) content).getIdentifier();
if (identifier.equals(identifierFromResource)) {
EObject sourceElement = associations.getPrimarySourceElement(content);
return sourceElement;
}
}
}
}
return super.findEObjectByURI(uri, resource);
}
}
it is bound like
public void configureLanguageSpecificURIEditorOpener(com.google.inject.Binder binder) {
if (org.eclipse.ui.PlatformUI.isWorkbenchRunning()) {
binder.bind(org.eclipse.xtext.ui.editor.IURIEditorOpener.class).annotatedWith(org.eclipse.xtext.ui.LanguageSpecific.class).to(org.eclipse.xtext.xbase.ui.jvmmodel.navigation.DerivedMemberAwareEditorOpener.class);
binder.bind(org.eclipse.xtext.common.types.ui.navigation.IDerivedMemberAwareEditorOpener.class).to(org.eclipse.xtext.xbase.ui.jvmmodel.navigation.DerivedMemberAwareEditorOpener.class);
};
}
this method should be overriden in the XXXUiModule
Twitter : @chrdietrich
Blog : https://www.dietrich-it.de
|
|
|
|
|
|
|
Powered by
FUDForum. Page generated in 0.05117 seconds