]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.scl.ui/src/org/simantics/scl/ui/editor2/OpenDeclaration.java
Not possible to open declaration of SCL module from relative path (F3)
[simantics/platform.git] / bundles / org.simantics.scl.ui / src / org / simantics / scl / ui / editor2 / OpenDeclaration.java
index cd59c874d61c93ab6c27825170882a34a249d704..4b6818ab7b805587bfe6306a9f1154e48ac0e3ad 100644 (file)
@@ -9,6 +9,10 @@ import org.eclipse.swt.widgets.Control;
 import org.eclipse.ui.IEditorPart;
 import org.eclipse.ui.PlatformUI;
 import org.simantics.scl.compiler.elaboration.modules.SCLValue;
+import org.simantics.scl.compiler.module.InvalidModulePathException;
+import org.simantics.scl.compiler.module.ModuleUtils;
+import org.simantics.scl.compiler.source.ModuleSource;
+import org.simantics.scl.osgi.SCLOsgi;
 import org.simantics.scl.ui.editor.completion.SCLTextEditorEnvironment;
 
 public class OpenDeclaration extends AbstractHandler {
@@ -83,8 +87,16 @@ public class OpenDeclaration extends AbstractHandler {
         if(lineAtCaret.startsWith("import ") || lineAtCaret.startsWith("include ")) {
             int p1 = lineAtCaret.indexOf('"', 6);
             int p2 = lineAtCaret.indexOf('"', p1+1);
-            String moduleName = lineAtCaret.substring(p1+1, p2);
-            OpenSCLModule.openModule(moduleName);
+            SCLModuleEditorInput input = (SCLModuleEditorInput)moduleEditor.getEditorInput();
+            try {
+                   String moduleName = ModuleUtils.resolveAbsolutePath(input.getModuleName(), lineAtCaret.substring(p1+1, p2));
+               ModuleSource source = SCLOsgi.SOURCE_REPOSITORY.getModuleSource(moduleName, null);
+                if (source != null) {
+                       OpenSCLModule.openModule(moduleName);
+                }
+            } catch (InvalidModulePathException e) {
+               // Nothing to do
+            }
         }
         else {
             // Try to find an identifier at caret