Issue 159642: using standard project system SPIs for storing profiler configuration. Do not rely on "nbproject" being a meaningful directory name inside a project. diff --git a/profiler/nbproject/project.xml b/profiler/nbproject/project.xml --- a/profiler/nbproject/project.xml +++ b/profiler/nbproject/project.xml @@ -280,7 +280,7 @@ 1 - 1.17 + 1.26 diff --git a/profiler/src/org/netbeans/modules/profiler/utils/IDEUtils.java b/profiler/src/org/netbeans/modules/profiler/utils/IDEUtils.java --- a/profiler/src/org/netbeans/modules/profiler/utils/IDEUtils.java +++ b/profiler/src/org/netbeans/modules/profiler/utils/IDEUtils.java @@ -45,7 +45,6 @@ import org.netbeans.api.progress.ProgressHandle; import org.netbeans.api.progress.ProgressHandleFactory; import org.netbeans.api.project.Project; -import org.netbeans.api.project.ProjectManager; import org.netbeans.lib.profiler.ProfilerLogger; import org.netbeans.lib.profiler.common.Profiler; import org.netbeans.lib.profiler.common.ProfilingSettings; @@ -63,6 +62,7 @@ import org.openide.filesystems.FileObject; import org.openide.filesystems.FileUtil; import org.openide.modules.InstalledFileLocator; +import org.openide.util.Exceptions; import org.openide.util.NbBundle; import org.openide.util.RequestProcessor; import org.openide.windows.TopComponent; @@ -75,13 +75,18 @@ import java.io.InputStream; import java.io.OutputStream; import java.lang.reflect.InvocationTargetException; +import java.net.URL; import java.text.MessageFormat; import java.util.*; import javax.swing.*; import javax.swing.border.EmptyBorder; import javax.swing.event.ListSelectionEvent; import javax.swing.event.ListSelectionListener; +import org.netbeans.api.project.FileOwnerQuery; +import org.netbeans.api.project.ProjectManager; +import org.netbeans.api.project.ProjectUtils; import org.netbeans.modules.profiler.utilities.queries.SettingsFolderQuery; +import org.openide.filesystems.URLMapper; /** @@ -112,7 +117,7 @@ private static final String LIST_ACCESS_NAME = NbBundle.getMessage(IDEUtils.class, "IDEUtils_ListAccessName"); //NOI18N private static final String OK_BUTTON_TEXT = NbBundle.getMessage(IDEUtils.class, "IDEUtils_OkButtonText"); //NOI18N // ----- - public static final String SETTINGS_DIR = "org-netbeans-modules-profiler"; //NOI18N + private static final String SETTINGS_FOR_ATTR = "settingsFor"; private static final RequestProcessor profilerRequestProcessor = new RequestProcessor("Profiler Request Processor", 1); // NOI18N private static final ErrorManager profilerErrorManager = ErrorManager.getDefault().getInstance("org.netbeans.modules.profiler"); // NOI18N @@ -282,33 +287,26 @@ } public static Project getProjectFromSettingsFolder(FileObject settingsFolder) { - if ((settingsFolder == null) || !settingsFolder.getName().equals("profiler")) { - return null; // NOI18N + Object o = settingsFolder.getAttribute(SETTINGS_FOR_ATTR); + if (o instanceof URL) { + FileObject d = URLMapper.findFileObject((URL) o); + if (d != null && d.isFolder()) { + try { + return ProjectManager.getDefault().findProject(d); + } catch (IOException ex) { + Exceptions.printStackTrace(ex); + } + } } - - FileObject privateFolder = settingsFolder.getParent(); - - if ((privateFolder == null) || !privateFolder.getName().equals("private")) { - return null; // NOI18N + Project p = FileOwnerQuery.getOwner(settingsFolder); + try { + if (p != null && getProjectSettingsFolder(p, false) == settingsFolder) { + return p; + } + } catch (IOException ex) { + Exceptions.printStackTrace(ex); } - - FileObject nbprojectFolder = privateFolder.getParent(); - - if ((nbprojectFolder == null) || !nbprojectFolder.getName().equals("nbproject")) { - return null; // NOI18N - } - - FileObject projectFolder = nbprojectFolder.getParent(); - - if (projectFolder == null) { - return null; - } - - try { - return ProjectManager.getDefault().findProject(projectFolder); - } catch (IOException e) { - return null; - } + return null; } public static FileObject getProjectSettingsFolder(Project project, boolean create) @@ -319,34 +317,18 @@ } else { // resolve 'nbproject' FileObject nbproject = project.getProjectDirectory().getFileObject("nbproject"); // NOI18N - - if ((nbproject == null) && create) { - nbproject = project.getProjectDirectory().createFolder("nbproject"); // NOI18N + FileObject d; + if (nbproject != null) { + // For compatibility, continue to use nbproject/private/profiler for Ant-based projects. + d = create ? FileUtil.createFolder(nbproject, "private/profiler") : nbproject.getFileObject("private/profiler"); // NOI18N + } else { + // Maven projects, autoprojects, etc. + d = ProjectUtils.getCacheDirectory(project, IDEUtils.class); } - - if (nbproject == null) { - return null; + if (d != null) { + d.setAttribute(SETTINGS_FOR_ATTR, project.getProjectDirectory().getURL()); // NOI18N } - - // resolve 'private' - FileObject privateFolder = nbproject.getFileObject("private"); // NOI18N - - if ((privateFolder == null) && create) { - privateFolder = nbproject.createFolder("private"); // NOI18N - } - - if (privateFolder == null) { - return null; - } - - // resolve 'profiler' - FileObject prof = privateFolder.getFileObject("profiler"); // NOI18N - - if ((prof == null) && create) { - prof = privateFolder.createFolder("profiler"); // NOI18N - } - - return prof; + return d; } }