src/jdk/nashorn/internal/runtime/Context.java

changeset 587
7272ec90f2c6
parent 552
8b0914b25430
child 590
3470bc26128f
     1.1 --- a/src/jdk/nashorn/internal/runtime/Context.java	Mon Sep 30 12:06:43 2013 -0300
     1.2 +++ b/src/jdk/nashorn/internal/runtime/Context.java	Mon Sep 30 21:33:38 2013 +0530
     1.3 @@ -91,6 +91,11 @@
     1.4       */
     1.5      public static final String NASHORN_JAVA_REFLECTION = "nashorn.JavaReflection";
     1.6  
     1.7 +    // nashorn load psuedo URL prefixes
     1.8 +    private static final String LOAD_CLASSPATH = "classpath:";
     1.9 +    private static final String LOAD_FX = "fx:";
    1.10 +    private static final String LOAD_NASHORN = "nashorn:";
    1.11 +
    1.12      /* Force DebuggerSupport to be loaded. */
    1.13      static {
    1.14          DebuggerSupport.FORCELOAD = true;
    1.15 @@ -501,21 +506,26 @@
    1.16          // or a ScriptObject that has "name" and "source" (string valued) properties.
    1.17          if (src instanceof String) {
    1.18              final String srcStr = (String)src;
    1.19 -            final File file = new File(srcStr);
    1.20 -            if (srcStr.indexOf(':') != -1) {
    1.21 -                if ((source = loadInternal(srcStr, "nashorn:", "resources/")) == null &&
    1.22 -                    (source = loadInternal(srcStr, "fx:", "resources/fx/")) == null) {
    1.23 -                    URL url;
    1.24 -                    try {
    1.25 -                        //check for malformed url. if malformed, it may still be a valid file
    1.26 -                        url = new URL(srcStr);
    1.27 -                    } catch (final MalformedURLException e) {
    1.28 -                        url = file.toURI().toURL();
    1.29 +            if (srcStr.startsWith(LOAD_CLASSPATH)) {
    1.30 +                URL url = getResourceURL(srcStr.substring(LOAD_CLASSPATH.length()));
    1.31 +                source = (url != null)? new Source(url.toString(), url) : null;
    1.32 +            } else {
    1.33 +                final File file = new File(srcStr);
    1.34 +                if (srcStr.indexOf(':') != -1) {
    1.35 +                    if ((source = loadInternal(srcStr, LOAD_NASHORN, "resources/")) == null &&
    1.36 +                        (source = loadInternal(srcStr, LOAD_FX, "resources/fx/")) == null) {
    1.37 +                        URL url;
    1.38 +                        try {
    1.39 +                            //check for malformed url. if malformed, it may still be a valid file
    1.40 +                            url = new URL(srcStr);
    1.41 +                        } catch (final MalformedURLException e) {
    1.42 +                            url = file.toURI().toURL();
    1.43 +                        }
    1.44 +                        source = new Source(url.toString(), url);
    1.45                      }
    1.46 -                    source = new Source(url.toString(), url);
    1.47 +                } else if (file.isFile()) {
    1.48 +                    source = new Source(srcStr, file);
    1.49                  }
    1.50 -            } else if (file.isFile()) {
    1.51 -                source = new Source(srcStr, file);
    1.52              }
    1.53          } else if (src instanceof File && ((File)src).isFile()) {
    1.54              final File file = (File)src;
    1.55 @@ -803,6 +813,18 @@
    1.56          return Context.getContextTrusted();
    1.57      }
    1.58  
    1.59 +    private URL getResourceURL(final String resName) throws IOException {
    1.60 +        // try the classPathLoader if we have and then
    1.61 +        // try the appLoader if non-null.
    1.62 +        if (classPathLoader != null) {
    1.63 +            return classPathLoader.getResource(resName);
    1.64 +        } else if (appLoader != null) {
    1.65 +            return appLoader.getResource(resName);
    1.66 +        }
    1.67 +
    1.68 +        return null;
    1.69 +    }
    1.70 +
    1.71      private Object evaluateSource(final Source source, final ScriptObject scope, final ScriptObject thiz) {
    1.72          ScriptFunction script = null;
    1.73  

mercurial