X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=bundles%2Forg.simantics.scl.ui%2Fsrc%2Forg%2Fsimantics%2Fscl%2Fui%2Feditor2%2FOpenSCLDefinition.java;h=bb8332a390bd6cb0b3c92e12a0ac3e3bdaa46ea0;hb=9712014e959584157b02e594be8719c151b8f5b0;hp=bc7f9feac702b7951de422c3a254469eeea78cac;hpb=0ae2b770234dfc3cbb18bd38f324125cf0faca07;p=simantics%2Fplatform.git diff --git a/bundles/org.simantics.scl.ui/src/org/simantics/scl/ui/editor2/OpenSCLDefinition.java b/bundles/org.simantics.scl.ui/src/org/simantics/scl/ui/editor2/OpenSCLDefinition.java index bc7f9feac..bb8332a39 100644 --- a/bundles/org.simantics.scl.ui/src/org/simantics/scl/ui/editor2/OpenSCLDefinition.java +++ b/bundles/org.simantics.scl.ui/src/org/simantics/scl/ui/editor2/OpenSCLDefinition.java @@ -3,15 +3,20 @@ package org.simantics.scl.ui.editor2; import org.eclipse.core.commands.AbstractHandler; import org.eclipse.core.commands.ExecutionEvent; import org.eclipse.core.commands.ExecutionException; +import org.eclipse.swt.widgets.Display; import org.eclipse.ui.IWorkbenchPage; import org.eclipse.ui.PartInitException; import org.eclipse.ui.PlatformUI; import org.simantics.scl.compiler.elaboration.modules.SCLValue; import org.simantics.scl.compiler.errors.Locations; import org.simantics.scl.ui.browser.SCLDefinitionSelectionDialog; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; public class OpenSCLDefinition extends AbstractHandler { + private static final Logger LOGGER = LoggerFactory.getLogger(OpenSCLDefinition.class); + @Override public Object execute(ExecutionEvent event) throws ExecutionException { SCLDefinitionSelectionDialog dialog = new SCLDefinitionSelectionDialog( @@ -19,30 +24,36 @@ public class OpenSCLDefinition extends AbstractHandler { if(dialog.open() == SCLDefinitionSelectionDialog.OK) { SCLValue value = (SCLValue)dialog.getFirstResult(); if(value != null) - openDefinition(value); + scheduleOpenDefinition(value.getName().module, value.definitionLocation); } return null; } - + public static void openDefinition(SCLValue value) { openDefinition(value.getName().module, value.definitionLocation); } - - public static void openDefinition(String moduleName, long location) { - IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage(); - if(page == null) - return; - SCLModuleEditorInput input = new StandardSCLModuleEditorInput(moduleName); - try { - SCLModuleEditor2 editor = (SCLModuleEditor2)page.openEditor(input, "org.simantics.scl.ui.editor2"); - if(location != Locations.NO_LOCATION) { - int begin = Locations.beginOf(location); - int end = Locations.endOf(location); - editor.selectAndReveal(begin, end-begin); + + public static Runnable openDefinition(String moduleName, long location) { + return () -> { + IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage(); + if(page == null) + return; + SCLModuleEditorInput input = new StandardSCLModuleEditorInput(moduleName); + try { + SCLModuleEditor2 editor = (SCLModuleEditor2)page.openEditor(input, "org.simantics.scl.ui.editor2"); //$NON-NLS-1$ + if(location != Locations.NO_LOCATION) { + int begin = Locations.beginOf(location); + int end = Locations.endOf(location); + editor.selectAndReveal(begin, end-begin); + } + } catch (PartInitException e) { + LOGGER.error("", e); //$NON-NLS-1$ } - } catch (PartInitException e) { - e.printStackTrace(); - } + }; + } + + public static void scheduleOpenDefinition(String moduleName, long location) { + Display.getCurrent().asyncExec(openDefinition(moduleName, location)); } }