Skip to content

Commit 33b3d4d

Browse files
authored
Merge pull request #462 from tonihele/fix_npe
Fix NPE and reduce nesting
2 parents d19ca7f + d7425be commit 33b3d4d

File tree

1 file changed

+81
-68
lines changed

1 file changed

+81
-68
lines changed

jme3-core/src/com/jme3/gde/core/assets/ProjectAssetManager.java

Lines changed: 81 additions & 68 deletions
Original file line numberDiff line numberDiff line change
@@ -157,79 +157,92 @@ 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<>();
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+
loadGradleClassLoader(urls);
195+
196+
loader = new URLClassLoader(urls.toArray(URL[]::new), getClass().getClassLoader());
197+
addClassLoader(loader);
198+
logger.log(Level.FINE, "Updated {0} classpath entries and {1} url locators for project {2}", new Object[]{classPathItems.size(), jarItems.size(), project.toString()});
199+
}
200+
201+
private void loadGradleClassLoader(List<URL> urls) {
202+
GradleBaseProject gradleProject = GradleBaseProject.get(project);
203+
if (gradleProject == null) {
204+
205+
// Ant, Maven etc. project
206+
return;
207+
}
208+
209+
FileObject rootDir = FileUtil.toFileObject(gradleProject.getRootDir());
210+
Set<File> runtimeFiles = new HashSet<>();
211+
try {
212+
Project rootPrj = ProjectManager.getDefault().findProject(rootDir);
213+
GradleJavaProject rootGjp = GradleJavaProject.get(rootPrj);
214+
for (GradleJavaSourceSet sourceSet : rootGjp.getSourceSets().values()) {
215+
if (sourceSet.getName().equals("main")) {
216+
runtimeFiles = sourceSet.getRuntimeClassPath();
217+
}
204218
}
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-
}
219+
} catch (IOException ex) {
220+
Exceptions.printStackTrace(ex);
221+
} catch (IllegalArgumentException ex) {
222+
Exceptions.printStackTrace(ex);
223+
}
224+
225+
for (File file : runtimeFiles) {
226+
// logger.info(file.getName() + " : " + file.getAbsolutePath());
227+
FileObject fo = FileUtil.toFileObject(file);
228+
if (fo != null && !fo.isFolder()) {
229+
logger.info(fo.toURL().toExternalForm());
230+
if (!fo.equals(getAssetFolder())) {
231+
fo.addRecursiveListener(listener);
232+
logger.log(Level.FINE, "Add classpath:{0}", fo);
233+
classPathItems.add(new ClassPathItem(fo, listener));
234+
urls.add(fo.toURL());
235+
}
236+
if (fo.toURL().toExternalForm().startsWith("jar")) {
237+
logger.log(Level.FINE, "Add Gradle locator:{0}", fo.toURL());
238+
jarItems.add(fo);
239+
registerLocator(fo.toURL().toExternalForm(),
240+
"com.jme3.asset.plugins.UrlLocator");
223241
}
224-
225-
226242
}
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()});
231243
}
232244
}
245+
233246
FileChangeListener listener = new FileChangeListener() {
234247
public void fileFolderCreated(FileEvent fe) {
235248
fireChange(fe);
@@ -258,6 +271,7 @@ private void fireChange(FileEvent fe) {
258271
updateClassLoader();
259272
}
260273
};
274+
261275
private PropertyChangeListener classPathListener = new PropertyChangeListener() {
262276
public void propertyChange(PropertyChangeEvent evt) {
263277
logger.log(Level.FINE, "Classpath event: {0}", evt);
@@ -349,9 +363,8 @@ public FileObject getAssetFileObject(String name) {
349363
}
350364
synchronized (classPathItems) {
351365
// 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();
366+
367+
for (ClassPathItem classPathItem : classPathItems) {
355368
FileObject jarFile = classPathItem.object;
356369

357370
Enumeration<FileObject> jarEntry = (Enumeration<FileObject>) jarFile.getChildren(true);

0 commit comments

Comments
 (0)