]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.scl.ui/src/org/simantics/scl/ui/editor2/OpenDeclaration.java
Externalize strings in org.simantics.scl.ui
[simantics/platform.git] / bundles / org.simantics.scl.ui / src / org / simantics / scl / ui / editor2 / OpenDeclaration.java
index cd59c874d61c93ab6c27825170882a34a249d704..baa7020c5f4a78a21434234e90230d0627b92f7d 100644 (file)
@@ -9,10 +9,18 @@ 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;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 public class OpenDeclaration extends AbstractHandler {
 
+    private static final Logger LOGGER = LoggerFactory.getLogger(OpenDeclaration.class);
+
     private static boolean isIdentifierPart(char c) {
         return Character.isJavaIdentifierPart(c) || c=='.';
     }
@@ -27,7 +35,7 @@ public class OpenDeclaration extends AbstractHandler {
         return text.substring(startPos, endPos);
     }
     
-    private static final String SYMBOL_CHARS = "!$%&*+/<=>?@\\^|-:~.";
+    private static final String SYMBOL_CHARS = "!$%&*+/<=>?@\\^|-:~."; //$NON-NLS-1$
     
     private static boolean isSymbolPart(char c) {
         for(int i=0;i<SYMBOL_CHARS.length();++i)
@@ -80,11 +88,19 @@ public class OpenDeclaration extends AbstractHandler {
         
         // Find the line where the caret is
         String lineAtCaret = extractLineAt(text, caretOffset);
-        if(lineAtCaret.startsWith("import ") || lineAtCaret.startsWith("include ")) {
+        if(lineAtCaret.startsWith("import ") || lineAtCaret.startsWith("include ")) { //$NON-NLS-1$ //$NON-NLS-2$
             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.scheduleOpenModule(moduleName);
+                }
+            } catch (InvalidModulePathException e) {
+                LOGGER.error("Could not open declaration {} {}", input.getModuleName(), lineAtCaret, e); //$NON-NLS-1$
+            }
         }
         else {
             // Try to find an identifier at caret
@@ -94,8 +110,9 @@ 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);
+                OpenSCLDefinition.scheduleOpenDefinition(value.getName().module, value.definitionLocation);
         }
         return null;
     }