]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.scl.ui/src/org/simantics/scl/ui/editor/completion/SCLTextEditorEnvironment.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 / editor / completion / SCLTextEditorEnvironment.java
index 9006f3cc2bd12d4d2d3dc98d654940dd209533cb..de335f0f944c3ba7135b5ba6900398f6cd91b4c5 100644 (file)
@@ -18,7 +18,9 @@ import org.simantics.scl.compiler.errors.Failable;
 import org.simantics.scl.compiler.internal.parsing.exceptions.SCLSyntaxErrorException;
 import org.simantics.scl.compiler.internal.parsing.parser.SCLParserImpl;
 import org.simantics.scl.compiler.module.ImportDeclaration;
+import org.simantics.scl.compiler.module.InvalidModulePathException;
 import org.simantics.scl.compiler.module.Module;
+import org.simantics.scl.compiler.module.ModuleUtils;
 import org.simantics.scl.compiler.module.repository.ImportFailureException;
 import org.simantics.scl.compiler.types.TCon;
 import org.simantics.scl.osgi.SCLOsgi;
@@ -103,44 +105,18 @@ public class SCLTextEditorEnvironment {
     private ArrayList<ImportDeclaration> processRelativeImports(List<ImportDeclaration> relativeImports) {
         ArrayList<ImportDeclaration> absoluteImports = new ArrayList<ImportDeclaration>(relativeImports.size());
         for(ImportDeclaration relativeImport : relativeImports) {
-            if(relativeImport.moduleName.startsWith(".")) {
-                String absoluteModuleName = convertRelativeModulePath(relativeImport.moduleName);
-                if(absoluteModuleName != null)
-                    absoluteImports.add(new ImportDeclaration(
-                            absoluteModuleName, relativeImport.localName,
-                            relativeImport.reexport, relativeImport.spec));
-            }
-            else
-                absoluteImports.add(relativeImport);
+                       try {
+                               String absoluteModuleName = ModuleUtils.resolveAbsolutePath(moduleName, relativeImport.moduleName);
+                absoluteImports.add(new ImportDeclaration(
+                        absoluteModuleName, relativeImport.localName,
+                        relativeImport.reexport, relativeImport.spec));
+                       } catch (InvalidModulePathException e) {
+               // Nothing to do
+                       }
         }
         return absoluteImports;
     }
 
-    private String convertRelativeModulePath(String relativeModuleName) {
-        String originalRelativeModuleName = relativeModuleName;
-        int p = moduleName.lastIndexOf('/');
-        String parentPackage = p < 0 ? "" : moduleName.substring(0, p);
-        while(relativeModuleName.startsWith(".")) {
-            if(relativeModuleName.startsWith("./")) {
-                relativeModuleName = relativeModuleName.substring(2);
-            }
-            else if(relativeModuleName.startsWith("../")) {
-                relativeModuleName = relativeModuleName.substring(3);
-                if(parentPackage.isEmpty()) {
-                    System.err.println("Couldn't resolve the relative module name " + originalRelativeModuleName + " when the current module name is " + moduleName + ".");
-                    return null;
-                }
-                p = parentPackage.lastIndexOf('/');
-                parentPackage = p < 0 ? "" : parentPackage.substring(0, p);
-            }
-            else {
-                System.err.println("Couldn't resolve the relative module name " + originalRelativeModuleName + ". It has an invalid syntax.");
-                return null;
-            }
-        }
-        return parentPackage + "/" + relativeModuleName;
-    }
-
     private static final Comparator<SCLCompletionProposal> COMPARATOR = new Comparator<SCLCompletionProposal>() {
 
         @Override