]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.scl.ui/src/org/simantics/scl/ui/editor2/OpenDeclaration.java
(refs #7386) Minor SCL tools improvements
[simantics/platform.git] / bundles / org.simantics.scl.ui / src / org / simantics / scl / ui / editor2 / OpenDeclaration.java
index cd59c874d61c93ab6c27825170882a34a249d704..378840397759e1fbdbdc3714b2c3c930c01fa32b 100644 (file)
@@ -9,6 +9,11 @@ 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.errors.Locations;
+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 +88,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
@@ -94,6 +107,7 @@ public class OpenDeclaration extends AbstractHandler {
             SCLTextEditorEnvironment editorEnvironment = moduleEditor.getSCLTextEditorEnvironment();
             editorEnvironment.updateEnvironment(moduleEditor.getDocument());
             SCLValue value = editorEnvironment.getValue(identifierAtCaret);
+            System.out.println("identifierAtCaret = " + identifierAtCaret + " [" + Locations.beginOf(value.definitionLocation) + ", " + Locations.endOf(value.definitionLocation) + "]");
             if(value != null)
                 OpenSCLDefinition.openDefinition(value);
         }