@@ -78,40 +78,40 @@ void loadModuleConfiguration() {
7878 });
7979 }
8080
81- // /**
82- // * Loads the class with the specified binary name.
83- // */
84- // @Override
85- // protected Class<?> loadClass(String cn, boolean resolve) throws ClassNotFoundException
86- // {
87- //
88- // synchronized (getClassLoadingLock(cn)) {
89- // // check if already loaded
90- // Class<?> c = findLoadedClass(cn);
91- //
92- // if (c == null) {
93- //
94- // LoadedModule loadedModule = findLoadedModule(cn);
95- //
96- // if (loadedModule != null) {
97- //
98- // // class is in module defined to this class loader
99- // c = defineClass(cn, loadedModule);
100- //
101- // } else {
102- // return getParent().loadClass(cn);
103- // }
104- // }
105- //
106- // if (c == null)
107- // throw new ClassNotFoundException(cn);
108- //
109- // if (resolve)
110- // resolveClass(c);
111- //
112- // return c;
113- // }
114- // }
81+ /**
82+ * Loads the class with the specified binary name.
83+ */
84+ @ Override
85+ protected Class <?> loadClass (String cn , boolean resolve ) throws ClassNotFoundException
86+ {
87+
88+ synchronized (getClassLoadingLock (cn )) {
89+ // check if already loaded
90+ Class <?> c = findLoadedClass (cn );
91+
92+ if (c == null ) {
93+
94+ LoadedModule loadedModule = findLoadedModule (cn );
95+
96+ if (loadedModule != null ) {
97+
98+ // class is in module defined to this class loader
99+ c = defineClass (cn , loadedModule );
100+
101+ } else {
102+ return getParent ().loadClass (cn );
103+ }
104+ }
105+
106+ if (c == null )
107+ throw new ClassNotFoundException (cn );
108+
109+ if (resolve )
110+ resolveClass (c );
111+
112+ return c ;
113+ }
114+ }
115115
116116 @ Override
117117 protected URL findResource (String moduleName , String name ) throws IOException {
@@ -167,30 +167,24 @@ private Class<?> defineClass(String cn, LoadedModule loadedModule) {
167167 return null ;
168168 }
169169
170- try {
171- return defineClass (cn , bb , loadedModule .getCodeSource ());
172- } finally {
173- reader .release (bb );
174- }
170+ if (transformers .containsClass (cn ))
171+ return transformers .getClazz (cn );
172+
173+ byte [] classbytes = bb .array ();
175174
176- // if (transformers.containsClass(cn))
177- // return transformers.getClazz(cn);
178- //
179- // byte[] classbytes = bb.array();
180- //
181- // byte[] classBytesModified = transformers.transform(cn, classbytes);
182- //
183- // if (classBytesModified != null) {
184- // Class<?> clz = defineClass(cn, classBytesModified, 0, classBytesModified.length, loadedModule.getCodeSource());
185- // transformers.add(cn, clz);
186- // return clz;
187- // } else {
188- // try {
189- // return defineClass(cn, bb, loadedModule.getCodeSource());
190- // } finally {
191- // reader.release(bb);
192- // }
193- // }
175+ byte [] classBytesModified = transformers .transform (cn , classbytes );
176+
177+ if (classBytesModified != null ) {
178+ Class <?> clz = defineClass (cn , classBytesModified , 0 , classBytesModified .length , loadedModule .getCodeSource ());
179+ transformers .add (cn , clz );
180+ return clz ;
181+ } else {
182+ try {
183+ return defineClass (cn , bb , loadedModule .getCodeSource ());
184+ } finally {
185+ reader .release (bb );
186+ }
187+ }
194188 } catch (IOException ioe ) {
195189 // TBD on how I/O errors should be propagated
196190 return null ;
0 commit comments