Minor bug fix in ConflictTracker.java
[jpf-core.git] / src / main / gov / nasa / jpf / JPFClassLoader.java
1 /*
2  * Copyright (C) 2014, United States Government, as represented by the
3  * Administrator of the National Aeronautics and Space Administration.
4  * All rights reserved.
5  *
6  * The Java Pathfinder core (jpf-core) platform is licensed under the
7  * Apache License, Version 2.0 (the "License"); you may not use this file except
8  * in compliance with the License. You may obtain a copy of the License at
9  * 
10  *        http://www.apache.org/licenses/LICENSE-2.0. 
11  *
12  * Unless required by applicable law or agreed to in writing, software
13  * distributed under the License is distributed on an "AS IS" BASIS,
14  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15  * See the License for the specific language governing permissions and 
16  * limitations under the License.
17  */
18
19 package gov.nasa.jpf;
20
21 import java.io.File;
22 import java.net.URL;
23 import java.net.URLClassLoader;
24
25 /**
26  * classloader that is used by Config to instantiate from JPF configured
27  * paths. This is a standard parent-first loader to avoid multiple class
28  * instances when using our Run*.jar tools
29  *
30  * The main reason for having our own classloader is dynamically configured resource
31  * and library lookup
32  */
33 public class JPFClassLoader extends URLClassLoader {
34
35   String[] nativeLibs;
36
37
38   static {
39     //ClassLoader.registerAsParallelCapable(); // for jdk7
40   }
41   
42   public JPFClassLoader (URL[] urls){
43     super(urls);
44   }
45
46   public JPFClassLoader (URL[] urls, String[] libs, ClassLoader parent){
47     super(urls, parent);
48
49     nativeLibs = libs;
50   }
51
52   @Override
53   protected String findLibrary (String libBaseName){
54
55     if (nativeLibs != null){
56       String libName = File.separator + System.mapLibraryName(libBaseName);
57
58       for (String libPath : nativeLibs) {
59         if (libPath.endsWith(libName)) {
60           return libPath;
61         }
62       }
63     }
64
65     return null; // means VM uses java.library.path to look it up
66   }
67
68   /**
69    * we make it public since we add paths dynamically during JPF init
70    * 
71    * Note this is ignored according to the javadocs if the provided url is already in the classpath.
72    * We do rely on this feature since me might add jpf.jar several times during bootstrap
73    */
74   @Override
75   public void addURL (URL url){
76     if (url != null){
77       super.addURL(url);
78     }
79   }
80   
81   public void setNativeLibs (String[] libs){
82     nativeLibs = libs;
83   }
84 }