Fixed ClassLoader problems.
authortzezula
Wed, 02 Oct 2013 22:32:57 +0200
changeset 1325f7f25ea1bbec
parent 1324 263482b074e9
child 1326 8ae6a6c42b5f
Fixed ClassLoader problems.
dew/src/main/java/org/apidesign/bck2brwsr/dew/ClassLoaderFileManager.java
dew/src/main/java/org/apidesign/bck2brwsr/dew/ClassLoaderJavaFileObject.java
dew/src/main/java/org/apidesign/bck2brwsr/dew/Compile.java
     1.1 --- a/dew/src/main/java/org/apidesign/bck2brwsr/dew/ClassLoaderFileManager.java	Wed Oct 02 21:00:24 2013 +0200
     1.2 +++ b/dew/src/main/java/org/apidesign/bck2brwsr/dew/ClassLoaderFileManager.java	Wed Oct 02 22:32:57 2013 +0200
     1.3 @@ -9,7 +9,9 @@
     1.4  import java.io.BufferedReader;
     1.5  import java.io.File;
     1.6  import java.io.IOException;
     1.7 +import java.io.InputStream;
     1.8  import java.io.InputStreamReader;
     1.9 +import java.net.URL;
    1.10  import java.util.ArrayList;
    1.11  import java.util.Collections;
    1.12  import java.util.EnumSet;
    1.13 @@ -61,7 +63,7 @@
    1.14      @Override
    1.15      public ClassLoader getClassLoader(Location location) {
    1.16          if (canClassLoad(location)) {
    1.17 -            return getClass().getClassLoader();
    1.18 +            return new SafeClassLoader(getClass().getClassLoader());
    1.19          } else {
    1.20              return null;
    1.21          }
    1.22 @@ -328,4 +330,33 @@
    1.23          return res;
    1.24      }
    1.25  
    1.26 +    private static final class SafeClassLoader extends ClassLoader {
    1.27 +        private final ClassLoader delegate;
    1.28 +
    1.29 +        SafeClassLoader(final ClassLoader delegate) {
    1.30 +            this.delegate = delegate;
    1.31 +
    1.32 +        }
    1.33 +
    1.34 +        @Override
    1.35 +        public URL getResource(String name) {
    1.36 +            return delegate.getResource(name);
    1.37 +        }
    1.38 +
    1.39 +        @Override
    1.40 +        public InputStream getResourceAsStream(String name) {
    1.41 +            return delegate.getResourceAsStream(name);
    1.42 +        }
    1.43 +
    1.44 +        @Override
    1.45 +        public Enumeration<URL> getResources(String name) throws IOException {
    1.46 +            return delegate.getResources(name);
    1.47 +        }
    1.48 +
    1.49 +        @Override
    1.50 +        public Class<?> loadClass(String name) throws ClassNotFoundException {
    1.51 +            return delegate.loadClass(name);
    1.52 +        }
    1.53 +    }
    1.54 +
    1.55  }
     2.1 --- a/dew/src/main/java/org/apidesign/bck2brwsr/dew/ClassLoaderJavaFileObject.java	Wed Oct 02 21:00:24 2013 +0200
     2.2 +++ b/dew/src/main/java/org/apidesign/bck2brwsr/dew/ClassLoaderJavaFileObject.java	Wed Oct 02 22:32:57 2013 +0200
     2.3 @@ -30,9 +30,7 @@
     2.4      public InputStream openInputStream() throws IOException {
     2.5          final InputStream in = getClass().getClassLoader().getResourceAsStream(path.substring(1));
     2.6          if (in == null) {
     2.7 -            getClass().getClassLoader().getResourceAsStream(path.substring(1));
     2.8              throw new FileNotFoundException(path);
     2.9 -
    2.10          }
    2.11          return in;
    2.12      }
     3.1 --- a/dew/src/main/java/org/apidesign/bck2brwsr/dew/Compile.java	Wed Oct 02 21:00:24 2013 +0200
     3.2 +++ b/dew/src/main/java/org/apidesign/bck2brwsr/dew/Compile.java	Wed Oct 02 22:32:57 2013 +0200
     3.3 @@ -108,11 +108,9 @@
     3.4          };
     3.5  
     3.6          final Boolean res = ToolProvider.getSystemJavaCompiler().getTask(null, jfm, this, /*XXX:*/Arrays.asList("-source", "1.7", "-target", "1.7"), null, Arrays.asList(file)).call();
     3.7 -
     3.8 -
     3.9          Map<String, byte[]> result = new HashMap<>();
    3.10          for (MemoryFileObject generated : clfm.getGeneratedFiles(Kind.CLASS)) {
    3.11 -            result.put(generated.infer(), generated.getContent());
    3.12 +            result.put(generated.getName().substring(1), generated.getContent());
    3.13          }
    3.14          return result;
    3.15      }