Skip to content

Commit ebf6555

Browse files
committed
Fix NPE and reduce nesting
1 parent 1647119 commit ebf6555

File tree

1 file changed

+79
-68
lines changed

1 file changed

+79
-68
lines changed

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

Lines changed: 79 additions & 68 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)