Skip to content

Commit

Permalink
build file is allowed to be null in the model.
Browse files Browse the repository at this point in the history
  • Loading branch information
kelemen committed Aug 19, 2012
1 parent a6c1d6c commit 6cd139d
Show file tree
Hide file tree
Showing 4 changed files with 42 additions and 46 deletions.
25 changes: 12 additions & 13 deletions src/org/netbeans/gradle/project/model/GradleModelCache.java
Original file line number Diff line number Diff line change
Expand Up @@ -42,19 +42,18 @@ public void removeChangeListener(ChangeListener listener) {
public void addToCache(NbGradleModel model) {
if (model == null) throw new NullPointerException("model");

File buildFile = FileUtil.toFile(model.getBuildFile());
File projectDir = FileUtil.toFile(model.getProjectDir());

FileObject settingsFileObj = model.getSettingsFile();
File settingsFile = settingsFileObj != null
? FileUtil.toFile(settingsFileObj)
: null;
if (buildFile == null || (settingsFile == null && settingsFileObj != null)) {
// This can be null if the build file has been deleted as
// FileUtil.toFile returns null in this case.

if (projectDir == null || (settingsFile == null && settingsFileObj != null)) {
return;
}

CacheKey key = new CacheKey(buildFile, settingsFile);
CacheKey key = new CacheKey(projectDir, settingsFile);

cacheLock.lock();
try {
Expand All @@ -74,8 +73,8 @@ public void addToCache(NbGradleModel model) {
}
}

public NbGradleModel tryGet(File buildFile, File settingsFile) {
CacheKey key = new CacheKey(buildFile, settingsFile);
public NbGradleModel tryGet(File projectDir, File settingsFile) {
CacheKey key = new CacheKey(projectDir, settingsFile);
cacheLock.lock();
try {
return cache.get(key);
Expand All @@ -85,19 +84,19 @@ public NbGradleModel tryGet(File buildFile, File settingsFile) {
}

private static class CacheKey {
private final File buildFile;
private final File projectDir;
private final File settingsFile;

public CacheKey(File buildFile, File settingsFile) {
if (buildFile == null) throw new NullPointerException("buildFile");
this.buildFile = buildFile;
public CacheKey(File projectDir, File settingsFile) {
if (projectDir == null) throw new NullPointerException("buildFile");
this.projectDir = projectDir;
this.settingsFile = settingsFile;
}

@Override
public int hashCode() {
int hash = 7;
hash = 89 * hash + this.buildFile.hashCode();
hash = 89 * hash + this.projectDir.hashCode();
hash = 89 * hash + (this.settingsFile != null ? this.settingsFile.hashCode() : 0);
return hash;
}
Expand All @@ -114,7 +113,7 @@ public boolean equals(Object obj) {
return false;
}
final CacheKey other = (CacheKey)obj;
if (this.buildFile != other.buildFile && (!this.buildFile.equals(other.buildFile))) {
if (this.projectDir != other.projectDir && (!this.projectDir.equals(other.projectDir))) {
return false;
}
if (this.settingsFile != other.settingsFile && (this.settingsFile == null || !this.settingsFile.equals(other.settingsFile))) {
Expand Down
36 changes: 14 additions & 22 deletions src/org/netbeans/gradle/project/model/GradleModelLoader.java
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,6 @@
import org.gradle.tooling.model.ExternalDependency;
import org.gradle.tooling.model.GradleProject;
import org.gradle.tooling.model.GradleTask;
import org.gradle.tooling.model.HierarchicalElement;
import org.gradle.tooling.model.Model;
import org.gradle.tooling.model.idea.IdeaContentRoot;
import org.gradle.tooling.model.idea.IdeaDependency;
Expand Down Expand Up @@ -60,22 +59,19 @@ public static void removeCacheChangeListener(ChangeListener listener) {
}

private static NbGradleModel tryGetFromCache(FileObject projectDir) {
try {
File buildFile = FileUtil.toFile(NbGradleModel.getBuildFile(projectDir));
FileObject settingFileObj = NbGradleModel.findSettingsGradle(projectDir);
File settingsFile = settingFileObj != null
? FileUtil.toFile(settingFileObj)
: null;

return buildFile != null
? CACHE.tryGet(buildFile, settingsFile)
: null;
} catch (IOException ex) {
LOGGER.log(Level.WARNING,
"Failure to read project directory while attempting to"
+ " retrieve the model from the cache: " + projectDir, ex);
File projectDirFile = FileUtil.toFile(projectDir);
FileObject settingFileObj = NbGradleModel.findSettingsGradle(projectDir);
File settingsFile = settingFileObj != null
? FileUtil.toFile(settingFileObj)
: null;
if (settingsFile == null && settingFileObj != null) {
LOGGER.log(Level.WARNING, "Settings file of the project disappeared: {0}", settingFileObj);
return null;
}

return projectDirFile != null
? CACHE.tryGet(projectDirFile, settingsFile)
: null;
}

public static void tryGetModelFromCache(
Expand Down Expand Up @@ -385,13 +381,9 @@ private static NbGradleModel parseFromIdeaModel(
for (NbGradleModule module: parsedModules.values()) {
if (module != null && module != parsedMainModule) {
FileObject moduleDir = FileUtil.toFileObject(module.getModuleDir());
try {
if (moduleDir != null) {
NbGradleModel model = new NbGradleModel(moduleDir, settings, module);
CACHE.addToCache(model);
}
} catch (IOException ex) {
LOGGER.log(Level.INFO, "Gradle project without build.gradle: {0}", module.getUniqueName());
if (moduleDir != null) {
NbGradleModel model = new NbGradleModel(moduleDir, settings, module);
CACHE.addToCache(model);
}
}
}
Expand Down
23 changes: 13 additions & 10 deletions src/org/netbeans/gradle/project/model/NbGradleModel.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package org.netbeans.gradle.project.model;

import java.io.IOException;
import org.netbeans.gradle.project.GradleProjectConstants;
import org.openide.filesystems.FileObject;

Expand All @@ -19,30 +18,34 @@ public final class NbGradleModel {

public NbGradleModel(
FileObject projectDir,
NbGradleModule mainModule) throws IOException {
NbGradleModule mainModule) {
this(projectDir, findSettingsGradle(projectDir), mainModule);
}

public NbGradleModel(
FileObject projectDir,
FileObject settingsFile,
NbGradleModule mainModule) throws IOException {
NbGradleModule mainModule) {
this(projectDir, getBuildFile(projectDir), settingsFile, mainModule);
}

public NbGradleModel(
FileObject projectDir,
FileObject buildFile,
FileObject settingsFile,
NbGradleModule mainModule) {
if (projectDir == null) throw new NullPointerException("projectDir");
if (mainModule == null) throw new NullPointerException("mainModule");

this.projectDir = projectDir;
this.mainModule = mainModule;

this.buildFile = getBuildFile(projectDir);
this.buildFile = buildFile;
this.settingsFile = settingsFile;
}

public static FileObject getBuildFile(FileObject projectDir) throws IOException {
FileObject buildFile = projectDir.getFileObject(GradleProjectConstants.BUILD_FILE_NAME);
if (buildFile == null) {
throw new IOException("Missing build.gradle in the project directory: " + projectDir);
}
return buildFile;
public static FileObject getBuildFile(FileObject projectDir) {
return projectDir.getFileObject(GradleProjectConstants.BUILD_FILE_NAME);
}

public static FileObject findSettingsGradle(FileObject projectDir) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -131,7 +131,9 @@ public Image getOpenedIcon(int type) {
private void addProjectFiles(List<SingleNodeFactory> toPopulate) throws DataObjectNotFoundException {
NbGradleModel model = project.getCurrentModel();
FileObject buildGradle = model.getBuildFile();
addGradleFile(buildGradle, toPopulate);
if (buildGradle != null) {
addGradleFile(buildGradle, toPopulate);
}

FileObject settingsGradle = model.getSettingsFile();
if (settingsGradle != null) {
Expand Down

0 comments on commit 6cd139d

Please sign in to comment.