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 {
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
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);
}