diff options
author | Matthew Piggott | 2011-04-20 21:34:16 +0000 |
---|---|---|
committer | Matthew Piggott | 2011-04-20 21:35:22 +0000 |
commit | 6bac8880fd4f0dfb83de5f641929d9ff7f918665 (patch) | |
tree | 637a704c7d9cb89fdf55b84d1380db7dd90b6fe2 /org.eclipse.m2e.core | |
parent | cd221a5336069559b6d764282b4a34393a8b2871 (diff) | |
download | m2e-core-6bac8880fd4f0dfb83de5f641929d9ff7f918665.tar.gz m2e-core-6bac8880fd4f0dfb83de5f641929d9ff7f918665.tar.xz m2e-core-6bac8880fd4f0dfb83de5f641929d9ff7f918665.zip |
Bug 336411 - Automatically mark target folder as derived
Diffstat (limited to 'org.eclipse.m2e.core')
-rw-r--r-- | org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/M2EUtils.java | 19 | ||||
-rw-r--r-- | org.eclipse.m2e.core/src/org/eclipse/m2e/core/project/configurator/AbstractLifecycleMapping.java | 47 |
2 files changed, 55 insertions, 11 deletions
diff --git a/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/M2EUtils.java b/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/M2EUtils.java index 39ce9339..e64a244c 100644 --- a/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/M2EUtils.java +++ b/org.eclipse.m2e.core/src/org/eclipse/m2e/core/internal/M2EUtils.java @@ -24,6 +24,8 @@ import org.eclipse.core.resources.IResource; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IPath; +import org.eclipse.core.runtime.IProgressMonitor; +import org.eclipse.core.runtime.NullProgressMonitor; import org.eclipse.core.runtime.Path; import org.apache.maven.model.Plugin; @@ -40,20 +42,33 @@ public class M2EUtils { * @param folder The folder to create. * @param derived true if folder should be marked as derived * @throws CoreException if creating the given <code>folder</code> or any of its parents fails. + * @deprecated use {@link #createFolder(IFolder, boolean, IProgressMonitor)} */ public static void createFolder(IFolder folder, boolean derived) throws CoreException { + createFolder(folder, derived, new NullProgressMonitor()); + } + + /** + * Helper method which creates a folder and, recursively, all its parent folders. + * + * @param folder The folder to create. + * @param derived true if folder should be marked as derived + * @param monitor the progress monitor + * @throws CoreException if creating the given <code>folder</code> or any of its parents fails. + */ + public static void createFolder(IFolder folder, boolean derived, IProgressMonitor monitor) throws CoreException { // Recurse until we find a parent folder which already exists. if(!folder.exists()) { IContainer parent = folder.getParent(); // First, make sure that all parent folders exist. if(parent != null && !parent.exists()) { - createFolder((IFolder) parent, false); + createFolder((IFolder) parent, false, monitor); } folder.create(true, true, null); } if(folder.isAccessible() && derived) { - folder.setDerived(true); + folder.setDerived(true, monitor); } } diff --git a/org.eclipse.m2e.core/src/org/eclipse/m2e/core/project/configurator/AbstractLifecycleMapping.java b/org.eclipse.m2e.core/src/org/eclipse/m2e/core/project/configurator/AbstractLifecycleMapping.java index 2c7d15df..f457ee32 100644 --- a/org.eclipse.m2e.core/src/org/eclipse/m2e/core/project/configurator/AbstractLifecycleMapping.java +++ b/org.eclipse.m2e.core/src/org/eclipse/m2e/core/project/configurator/AbstractLifecycleMapping.java @@ -11,11 +11,17 @@ package org.eclipse.m2e.core.project.configurator; +import org.eclipse.core.resources.IContainer; +import org.eclipse.core.resources.IFolder; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.OperationCanceledException; +import org.eclipse.core.runtime.SubMonitor; + +import org.apache.maven.model.Build; import org.eclipse.m2e.core.MavenPlugin; +import org.eclipse.m2e.core.internal.M2EUtils; import org.eclipse.m2e.core.project.IMavenProjectFacade; @@ -33,17 +39,40 @@ public abstract class AbstractLifecycleMapping implements ILifecycleMapping { /** * Calls #configure method of all registered project configurators */ - public void configure(ProjectConfigurationRequest request, IProgressMonitor monitor) throws CoreException { - MavenPlugin.getProjectConfigurationManager() - .addMavenBuilder(request.getProject(), null /*description*/, monitor); - - IMavenProjectFacade projectFacade = request.getMavenProjectFacade(); + public void configure(ProjectConfigurationRequest request, IProgressMonitor mon) throws CoreException { + final SubMonitor monitor = SubMonitor.convert(mon, 5); + try { + MavenPlugin.getProjectConfigurationManager().addMavenBuilder(request.getProject(), null /*description*/, + monitor.newChild(1)); + + IMavenProjectFacade projectFacade = request.getMavenProjectFacade(); + Build build = projectFacade.getMavenProject(monitor.newChild(1)).getBuild(); + if(build != null) { + String directory = build.getDirectory(); + if(directory != null) { + IContainer container = projectFacade.getProject().getFolder(projectFacade.getProjectRelativePath(directory)); + if(container != null) { + if(!container.exists() && container instanceof IFolder) { + M2EUtils.createFolder((IFolder) container, true, monitor.newChild(1)); + } else { + container.setDerived(true, monitor.newChild(1)); + } + } + } + } - for(AbstractProjectConfigurator configurator : getProjectConfigurators(projectFacade, monitor)) { - if(monitor.isCanceled()) { - throw new OperationCanceledException(); + SubMonitor confMon = null; + for(AbstractProjectConfigurator configurator : getProjectConfigurators(projectFacade, monitor.newChild(1))) { + if(monitor.isCanceled()) { + throw new OperationCanceledException(); + } + if(confMon == null) { + confMon = monitor.newChild(1); + } + configurator.configure(request, confMon.newChild(1)); } - configurator.configure(request, monitor); + } finally { + monitor.done(); } } |