@@ -157,79 +157,90 @@ private void clearClassLoader() {
157157
158158 private void loadClassLoader () {
159159 Sources sources = ProjectUtils .getSources (project );
160- if (sources != null ) {
161- if (loader != null ) {
162- removeClassLoader (loader );
160+ if (sources == null ) {
161+ return ;
162+ }
163+
164+ if (loader != null ) {
165+ removeClassLoader (loader );
166+ }
167+ SourceGroup [] groups = sources .getSourceGroups (JavaProjectConstants .SOURCES_TYPE_JAVA );
168+ List <URL > urls = new LinkedList <URL >();
169+ for (SourceGroup sourceGroup : groups ) {
170+ ClassPath path = ClassPath .getClassPath (sourceGroup .getRootFolder (), ClassPath .EXECUTE );
171+ if (path == null ) {
172+ continue ;
163173 }
164- SourceGroup [] groups = sources .getSourceGroups (JavaProjectConstants .SOURCES_TYPE_JAVA );
165- List <URL > urls = new LinkedList <URL >();
166- for (SourceGroup sourceGroup : groups ) {
167- ClassPath path = ClassPath .getClassPath (sourceGroup .getRootFolder (), ClassPath .EXECUTE );
168- if (path != null ) {
169- classPaths .add (path );
170- path .addPropertyChangeListener (classPathListener );
171- FileObject [] roots = path .getRoots ();
172- for (FileObject fileObject : roots ) {
173- if (!fileObject .equals (getAssetFolder ())) {
174- fileObject .addRecursiveListener (listener );
175- logger .log (Level .FINE , "Add classpath:{0}" , fileObject );
176- classPathItems .add (new ClassPathItem (fileObject , listener ));
177- urls .add (fileObject .toURL ());
178- }
179- if (fileObject .toURL ().toExternalForm ().startsWith ("jar" )) {
180- logger .log (Level .FINE , "Add locator:{0}" , fileObject .toURL ());
181- jarItems .add (fileObject );
182- registerLocator (fileObject .toURL ().toExternalForm (),
183- "com.jme3.asset.plugins.UrlLocator" );
184- }
185- }
174+
175+ classPaths .add (path );
176+ path .addPropertyChangeListener (classPathListener );
177+ FileObject [] roots = path .getRoots ();
178+ for (FileObject fileObject : roots ) {
179+ if (!fileObject .equals (getAssetFolder ())) {
180+ fileObject .addRecursiveListener (listener );
181+ logger .log (Level .FINE , "Add classpath:{0}" , fileObject );
182+ classPathItems .add (new ClassPathItem (fileObject , listener ));
183+ urls .add (fileObject .toURL ());
184+ }
185+ if (fileObject .toURL ().toExternalForm ().startsWith ("jar" )) {
186+ logger .log (Level .FINE , "Add locator:{0}" , fileObject .toURL ());
187+ jarItems .add (fileObject );
188+ registerLocator (fileObject .toURL ().toExternalForm (),
189+ "com.jme3.asset.plugins.UrlLocator" );
186190 }
187191 }
188-
189- // Gradle
190- FileObject rootDir = FileUtil .toFileObject (GradleBaseProject .get (project ).getRootDir ());
191- Set <File > runtimeFiles = new HashSet <>();
192- try {
193- Project rootPrj = ProjectManager .getDefault ().findProject (rootDir );
194- GradleJavaProject rootGjp = GradleJavaProject .get (rootPrj );
195- for (GradleJavaSourceSet sourceSet : rootGjp .getSourceSets ().values ()) {
196- if (sourceSet .getName ().equals ("main" )) {
197- runtimeFiles = sourceSet .getRuntimeClassPath ();
198- }
199- }
200- } catch (IOException ex ) {
201- Exceptions .printStackTrace (ex );
202- } catch (IllegalArgumentException ex ) {
203- Exceptions .printStackTrace (ex );
192+ }
193+
194+ // Gradle
195+ GradleBaseProject gradleProject = GradleBaseProject .get (project );
196+ if (gradleProject == null ) {
197+
198+ // Not a Gradle project
199+ return ;
200+ }
201+
202+ FileObject rootDir = FileUtil .toFileObject (gradleProject .getRootDir ());
203+ Set <File > runtimeFiles = new HashSet <>();
204+ try {
205+ Project rootPrj = ProjectManager .getDefault ().findProject (rootDir );
206+ GradleJavaProject rootGjp = GradleJavaProject .get (rootPrj );
207+ for (GradleJavaSourceSet sourceSet : rootGjp .getSourceSets ().values ()) {
208+ if (sourceSet .getName ().equals ("main" )) {
209+ runtimeFiles = sourceSet .getRuntimeClassPath ();
210+ }
204211 }
205-
206- for (File file : runtimeFiles ) {
207- // logger.info(file.getName() + " : " + file.getAbsolutePath());
208- FileObject fo = FileUtil .toFileObject (file );
209- if (fo != null && !fo .isFolder ()) {
210- logger .info (fo .toURL ().toExternalForm ());
211- if (!fo .equals (getAssetFolder ())) {
212- fo .addRecursiveListener (listener );
213- logger .log (Level .FINE , "Add classpath:{0}" , fo );
214- classPathItems .add (new ClassPathItem (fo , listener ));
215- urls .add (fo .toURL ());
216- }
217- if (fo .toURL ().toExternalForm ().startsWith ("jar" )) {
218- logger .log (Level .FINE , "Add Gradle locator:{0}" , fo .toURL ());
219- jarItems .add (fo );
220- registerLocator (fo .toURL ().toExternalForm (),
221- "com.jme3.asset.plugins.UrlLocator" );
222- }
212+ } catch (IOException ex ) {
213+ Exceptions .printStackTrace (ex );
214+ } catch (IllegalArgumentException ex ) {
215+ Exceptions .printStackTrace (ex );
216+ }
217+
218+ for (File file : runtimeFiles ) {
219+ // logger.info(file.getName() + " : " + file.getAbsolutePath());
220+ FileObject fo = FileUtil .toFileObject (file );
221+ if (fo != null && !fo .isFolder ()) {
222+ logger .info (fo .toURL ().toExternalForm ());
223+ if (!fo .equals (getAssetFolder ())) {
224+ fo .addRecursiveListener (listener );
225+ logger .log (Level .FINE , "Add classpath:{0}" , fo );
226+ classPathItems .add (new ClassPathItem (fo , listener ));
227+ urls .add (fo .toURL ());
228+ }
229+ if (fo .toURL ().toExternalForm ().startsWith ("jar" )) {
230+ logger .log (Level .FINE , "Add Gradle locator:{0}" , fo .toURL ());
231+ jarItems .add (fo );
232+ registerLocator (fo .toURL ().toExternalForm (),
233+ "com.jme3.asset.plugins.UrlLocator" );
223234 }
224-
225-
226235 }
227-
228- loader = new URLClassLoader (urls .toArray (new URL [urls .size ()]), getClass ().getClassLoader ());
229- addClassLoader (loader );
230- logger .log (Level .FINE , "Updated {0} classpath entries and {1} url locators for project {2}" , new Object []{classPathItems .size (), jarItems .size (), project .toString ()});
236+
231237 }
238+
239+ loader = new URLClassLoader (urls .toArray (URL []::new ), getClass ().getClassLoader ());
240+ addClassLoader (loader );
241+ logger .log (Level .FINE , "Updated {0} classpath entries and {1} url locators for project {2}" , new Object []{classPathItems .size (), jarItems .size (), project .toString ()});
232242 }
243+
233244 FileChangeListener listener = new FileChangeListener () {
234245 public void fileFolderCreated (FileEvent fe ) {
235246 fireChange (fe );
@@ -258,6 +269,7 @@ private void fireChange(FileEvent fe) {
258269 updateClassLoader ();
259270 }
260271 };
272+
261273 private PropertyChangeListener classPathListener = new PropertyChangeListener () {
262274 public void propertyChange (PropertyChangeEvent evt ) {
263275 logger .log (Level .FINE , "Classpath event: {0}" , evt );
@@ -349,9 +361,8 @@ public FileObject getAssetFileObject(String name) {
349361 }
350362 synchronized (classPathItems ) {
351363 // TODO I need to find out if classPathItems contains all jars added to a project
352- Iterator <ClassPathItem > classPathItemsIter = classPathItems .iterator ();
353- while (classPathItemsIter .hasNext ()) {
354- ClassPathItem classPathItem = classPathItemsIter .next ();
364+
365+ for (ClassPathItem classPathItem : classPathItems ) {
355366 FileObject jarFile = classPathItem .object ;
356367
357368 Enumeration <FileObject > jarEntry = (Enumeration <FileObject >) jarFile .getChildren (true );
0 commit comments