]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.scl.osgi/src/org/simantics/scl/osgi/internal/BundleModuleSource.java
New SCL completion implementation
[simantics/platform.git] / bundles / org.simantics.scl.osgi / src / org / simantics / scl / osgi / internal / BundleModuleSource.java
index 3213cf9b5419e7d501fdba77afd93218babc0c9e..af6af0872163a8e3ec6be21461becc5c90199c68 100644 (file)
@@ -1,13 +1,12 @@
 package org.simantics.scl.osgi.internal;
 
+import java.io.File;
 import java.io.IOException;
 import java.io.InputStream;
-import java.net.URISyntaxException;
 import java.net.URL;
 import java.nio.charset.Charset;
 import java.nio.file.Files;
 import java.nio.file.Path;
-import java.nio.file.Paths;
 import java.security.MessageDigest;
 import java.security.NoSuchAlgorithmException;
 import java.util.Arrays;
@@ -55,7 +54,7 @@ public class BundleModuleSource extends EncodedTextualModuleSource implements Up
     }
 
     @Override
-    protected ImportDeclaration[] getBuiltinImports(UpdateListener listener) {
+    public ImportDeclaration[] getBuiltinImports(UpdateListener listener) {
         if(bundle.getSymbolicName().equals("org.simantics.scl.runtime"))
             return DEFAULT_IMPORTS_FOR_STANDARD_LIBRARY;
         else
@@ -126,15 +125,24 @@ public class BundleModuleSource extends EncodedTextualModuleSource implements Up
             }
         }
     }
-    
-    private Path getPath() throws IOException {
-        try {
-            return Paths.get(FileLocator.toFileURL(url).toURI());
-        } catch (URISyntaxException e) {
-            throw new IOException(e);
+
+    /*
+     * This code is a copy from org.simantics.utils.ui.BundleUtils
+     */
+    public static File resolveWritableBundleFile(URL url) throws IOException {
+        // This returns file, jar, http etc. - essentially resolves the bundle protocol
+        URL resolved = FileLocator.resolve(url);
+        if (resolved.getProtocol().equals("file")) {
+            return new File(resolved.getPath());
         }
+        return null;
     }
-    
+
+    private Path getPath() throws IOException {
+        File file = resolveWritableBundleFile(url);
+        return file != null ? file.toPath() : null;
+    }
+
     @Override
     public boolean isUpdateable() {
         try {