Linking in external file [message #1784344] |
Tue, 27 March 2018 03:09  |
Eclipse User |
|
|
|
Hello,
I am trying to open a model file using File->Open file from menu.
File is in C:\Temp\test.MyDsl
File opened in editor.
But linking is not working.
If I click on reference, its not going to definition.
Sample grammar.
Clicking on Test under group is not going to its definition.
virag 1
Test 2
Group{
Test
}
Kindly help me with this.
I am expecting these cross reference should work.
Thanks in advance.
Best regards,
Virag Purnam
|
|
|
|
|
|
Re: Linking in external file [message #1784363 is a reply to message #1784353] |
Tue, 27 March 2018 05:14   |
Eclipse User |
|
|
|
yes you need to customize the opener
import org.apache.log4j.Logger;
import org.eclipse.core.filesystem.EFS;
import org.eclipse.core.filesystem.IFileStore;
import org.eclipse.core.runtime.Path;
import org.eclipse.emf.common.util.URI;
import org.eclipse.emf.common.util.WrappedException;
import org.eclipse.emf.ecore.EReference;
import org.eclipse.ui.IEditorPart;
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.PartInitException;
import org.eclipse.ui.ide.FileStoreEditorInput;
import org.eclipse.ui.ide.IDE;
import org.eclipse.xtext.ui.editor.LanguageSpecificURIEditorOpener;
import org.eclipse.xtext.ui.editor.utils.EditorUtils;
import com.google.inject.Inject;
public class MyDslLanguageSpecificURIEditorOpener extends LanguageSpecificURIEditorOpener {
private static final Logger logger = Logger.getLogger(MyDslLanguageSpecificURIEditorOpener.class);
@Inject(optional = true)
private IWorkbench workbench;
@Override
public IEditorPart open(URI uri, EReference crossReference, int indexInList, boolean select) {
IEditorPart result = super.open(uri, crossReference, indexInList, select);
if (result == null && uri.isFile()) {
try {
IFileStore fileStore = EFS.getLocalFileSystem().getStore(new Path(uri.toFileString()));
FileStoreEditorInput editorInput = new FileStoreEditorInput(fileStore);
IWorkbenchPage activePage = workbench.getActiveWorkbenchWindow().getActivePage();
final IEditorPart editor = IDE.openEditor(activePage, editorInput, getEditorId());
selectAndReveal(editor, uri, crossReference, indexInList, select);
return EditorUtils.getXtextEditor(editor);
} catch (WrappedException e) {
logger.error("Error while opening editor part for EMF URI '" + uri + "'", e.getCause());
} catch (PartInitException partInitException) {
logger.error("Error while opening editor part for EMF URI '" + uri + "'", partInitException);
}
}
return result;
}
}
class MyDslUiModule extends AbstractMyDslUiModule {
override void configureLanguageSpecificURIEditorOpener(com.google.inject.Binder binder) {
if(PlatformUI.isWorkbenchRunning()) binder.bind(IURIEditorOpener).annotatedWith(LanguageSpecific).to(
MyDslLanguageSpecificURIEditorOpener)
}
}
|
|
|
|
|
|
|
|
|
Powered by
FUDForum. Page generated in 0.06159 seconds