mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-06-08 10:16:03 +02:00
fixes for 139667 and 139797
This commit is contained in:
parent
f8bfa05b18
commit
033966ab4c
4 changed files with 151 additions and 74 deletions
|
@ -38,8 +38,8 @@ BuildConfigContextAction.label=Active Bui&ld Configuration
|
||||||
BuildConfigAction.tooltip=Change active build configuration for the current project
|
BuildConfigAction.tooltip=Change active build configuration for the current project
|
||||||
|
|
||||||
# Build/clean selected files actions
|
# Build/clean selected files actions
|
||||||
BuildSelectedFiles.label=Build F&ile(s)
|
BuildSelectedFiles.label=Build Selected &File(s)
|
||||||
CleanSelectedFiles.label=Cl&ean File(s)
|
CleanSelectedFiles.label=C&lean Selected File(s)
|
||||||
BuildSelectedFilesActionSet.label=Build/Clean Selected File(s)
|
BuildSelectedFilesActionSet.label=Build/Clean Selected File(s)
|
||||||
BuildSelectedFiles.tooltip=Rebuilds the selected file(s) including all dependencies
|
BuildSelectedFiles.tooltip=Rebuilds the selected file(s)
|
||||||
CleanSelectedFiles.tooltip=Cleans the output file(s) for the selected file(s)
|
CleanSelectedFiles.tooltip=Cleans the output file(s) for the selected file(s)
|
|
@ -158,7 +158,8 @@
|
||||||
label="%BuildSelectedFiles.label"
|
label="%BuildSelectedFiles.label"
|
||||||
menubarPath="project/build"
|
menubarPath="project/build"
|
||||||
style="push"
|
style="push"
|
||||||
tooltip="%buildSelectedFiles.tooltip"/>
|
tooltip="%buildSelectedFiles.tooltip">
|
||||||
|
</action>
|
||||||
<action
|
<action
|
||||||
class="org.eclipse.cdt.managedbuilder.ui.actions.CleanFilesAction"
|
class="org.eclipse.cdt.managedbuilder.ui.actions.CleanFilesAction"
|
||||||
enablesFor="+"
|
enablesFor="+"
|
||||||
|
@ -166,7 +167,8 @@
|
||||||
label="%CleanSelectedFiles.label"
|
label="%CleanSelectedFiles.label"
|
||||||
menubarPath="project/build"
|
menubarPath="project/build"
|
||||||
style="push"
|
style="push"
|
||||||
tooltip="%cleanFilesAction.tooltip"/>
|
tooltip="%cleanFilesAction.tooltip">
|
||||||
|
</action>
|
||||||
</actionSet>
|
</actionSet>
|
||||||
</extension>
|
</extension>
|
||||||
<extension
|
<extension
|
||||||
|
@ -188,9 +190,9 @@
|
||||||
value="org.eclipse.cdt.managedbuilder.core.managedBuildNature"/>
|
value="org.eclipse.cdt.managedbuilder.core.managedBuildNature"/>
|
||||||
</objectContribution>
|
</objectContribution>
|
||||||
<objectContribution
|
<objectContribution
|
||||||
adaptable="false"
|
adaptable="true"
|
||||||
id="org.eclipse.cdt.managedbuilder.ui.objectContribution1"
|
id="org.eclipse.cdt.managedbuilder.ui.objectContribution1"
|
||||||
objectClass="org.eclipse.cdt.core.model.ITranslationUnit">
|
objectClass="org.eclipse.core.resources.IResource">
|
||||||
<action
|
<action
|
||||||
class="org.eclipse.cdt.managedbuilder.ui.actions.BuildFilesAction"
|
class="org.eclipse.cdt.managedbuilder.ui.actions.BuildFilesAction"
|
||||||
enablesFor="+"
|
enablesFor="+"
|
||||||
|
|
|
@ -15,6 +15,7 @@ import java.util.LinkedList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import org.eclipse.cdt.core.model.ITranslationUnit;
|
import org.eclipse.cdt.core.model.ITranslationUnit;
|
||||||
import org.eclipse.core.resources.IFile;
|
import org.eclipse.core.resources.IFile;
|
||||||
|
import org.eclipse.core.resources.IProject;
|
||||||
import org.eclipse.core.resources.ResourcesPlugin;
|
import org.eclipse.core.resources.ResourcesPlugin;
|
||||||
import org.eclipse.core.runtime.IAdaptable;
|
import org.eclipse.core.runtime.IAdaptable;
|
||||||
import org.eclipse.jface.action.Action;
|
import org.eclipse.jface.action.Action;
|
||||||
|
@ -28,26 +29,31 @@ import org.eclipse.cdt.managedbuilder.core.IManagedBuildInfo;
|
||||||
import org.eclipse.cdt.managedbuilder.core.ManagedBuildManager;
|
import org.eclipse.cdt.managedbuilder.core.ManagedBuildManager;
|
||||||
import org.eclipse.cdt.managedbuilder.internal.core.GeneratedMakefileBuilder;
|
import org.eclipse.cdt.managedbuilder.internal.core.GeneratedMakefileBuilder;
|
||||||
import org.eclipse.cdt.managedbuilder.internal.core.ManagedMakeMessages;
|
import org.eclipse.cdt.managedbuilder.internal.core.ManagedMakeMessages;
|
||||||
|
import org.eclipse.cdt.managedbuilder.makegen.IManagedBuilderMakefileGenerator;
|
||||||
import org.eclipse.core.resources.IResource;
|
import org.eclipse.core.resources.IResource;
|
||||||
import org.eclipse.core.runtime.IProgressMonitor;
|
import org.eclipse.core.runtime.IProgressMonitor;
|
||||||
import org.eclipse.core.runtime.IStatus;
|
import org.eclipse.core.runtime.IStatus;
|
||||||
|
import org.eclipse.core.runtime.NullProgressMonitor;
|
||||||
import org.eclipse.core.runtime.Status;
|
import org.eclipse.core.runtime.Status;
|
||||||
import org.eclipse.core.runtime.SubProgressMonitor;
|
import org.eclipse.core.runtime.SubProgressMonitor;
|
||||||
import org.eclipse.core.runtime.jobs.Job;
|
import org.eclipse.core.runtime.jobs.Job;
|
||||||
import org.eclipse.jface.viewers.IStructuredSelection;
|
import org.eclipse.jface.viewers.IStructuredSelection;
|
||||||
import org.eclipse.ui.ISelectionService;
|
import org.eclipse.ui.ISelectionService;
|
||||||
|
import org.eclipse.ui.actions.ActionDelegate;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author crecoskie
|
* @author crecoskie
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public class BuildFilesAction extends Action implements IWorkbenchWindowActionDelegate {
|
public class BuildFilesAction extends ActionDelegate implements IWorkbenchWindowActionDelegate {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* The workbench window; or <code>null</code> if this action has been
|
* The workbench window; or <code>null</code> if this action has been
|
||||||
* <code>dispose</code>d.
|
* <code>dispose</code>d.
|
||||||
*/
|
*/
|
||||||
private IWorkbenchWindow workbenchWindow;
|
private IWorkbenchWindow workbenchWindow = null;
|
||||||
|
|
||||||
|
private IAction action = null;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
|
@ -60,39 +66,10 @@ public class BuildFilesAction extends Action implements IWorkbenchWindowActionDe
|
||||||
* Creates an instance of this action, for use in the given window.
|
* Creates an instance of this action, for use in the given window.
|
||||||
*/
|
*/
|
||||||
public BuildFilesAction(IWorkbenchWindow window) {
|
public BuildFilesAction(IWorkbenchWindow window) {
|
||||||
super(ManagedMakeMessages.getResourceString("BuildFilesAction.buildFiles")); //$NON-NLS-1$
|
|
||||||
if (window == null) {
|
if (window == null) {
|
||||||
throw new IllegalArgumentException();
|
throw new IllegalArgumentException();
|
||||||
}
|
}
|
||||||
this.workbenchWindow = window;
|
this.workbenchWindow = window;
|
||||||
setToolTipText(ManagedMakeMessages.getResourceString("BuildFilesAction.buildSelectedFile")); //$NON-NLS-1$
|
|
||||||
setActionDefinitionId("org.eclipse.cdt.managedbuilder.ui.BuildFilesAction"); //$NON-NLS-1$
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param text
|
|
||||||
*/
|
|
||||||
public BuildFilesAction(String text) {
|
|
||||||
super(text);
|
|
||||||
// TODO Auto-generated constructor stub
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param text
|
|
||||||
* @param image
|
|
||||||
*/
|
|
||||||
public BuildFilesAction(String text, ImageDescriptor image) {
|
|
||||||
super(text, image);
|
|
||||||
// TODO Auto-generated constructor stub
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param text
|
|
||||||
* @param style
|
|
||||||
*/
|
|
||||||
public BuildFilesAction(String text, int style) {
|
|
||||||
super(text, style);
|
|
||||||
// TODO Auto-generated constructor stub
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -105,6 +82,15 @@ public class BuildFilesAction extends Action implements IWorkbenchWindowActionDe
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see org.eclipse.ui.actions.ActionDelegate#init(org.eclipse.jface.action.IAction)
|
||||||
|
*/
|
||||||
|
public void init(IAction action) {
|
||||||
|
this.action = action;
|
||||||
|
update();
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* (non-Javadoc)
|
* (non-Javadoc)
|
||||||
*
|
*
|
||||||
|
@ -182,7 +168,7 @@ public class BuildFilesAction extends Action implements IWorkbenchWindowActionDe
|
||||||
IManagedBuildInfo buildInfo = ManagedBuildManager
|
IManagedBuildInfo buildInfo = ManagedBuildManager
|
||||||
.getBuildInfo(file.getProject());
|
.getBuildInfo(file.getProject());
|
||||||
|
|
||||||
if (buildInfo.buildsFileType(file.getFileExtension())) {
|
if (buildInfo != null && buildInfo.buildsFileType(file.getFileExtension())) {
|
||||||
files.add(file);
|
files.add(file);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -260,6 +246,7 @@ public class BuildFilesAction extends Action implements IWorkbenchWindowActionDe
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* (non-Javadoc)
|
* (non-Javadoc)
|
||||||
*
|
*
|
||||||
|
@ -275,6 +262,65 @@ public class BuildFilesAction extends Action implements IWorkbenchWindowActionDe
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private boolean shouldBeEnabled() {
|
||||||
|
ISelectionService selectionService = workbenchWindow
|
||||||
|
.getSelectionService();
|
||||||
|
ISelection selection = selectionService.getSelection();
|
||||||
|
|
||||||
|
if (selection instanceof IStructuredSelection) {
|
||||||
|
IStructuredSelection structuredSelection = (IStructuredSelection) selection;
|
||||||
|
for (Iterator elements = structuredSelection.iterator(); elements
|
||||||
|
.hasNext();) {
|
||||||
|
IFile file = convertToIFile(elements.next());
|
||||||
|
if (file != null) {
|
||||||
|
// we only add files that we can actually build
|
||||||
|
if(!ManagedBuildManager.manages(file.getProject()))
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
IManagedBuildInfo buildInfo = ManagedBuildManager
|
||||||
|
.getBuildInfo(file.getProject());
|
||||||
|
|
||||||
|
if(buildInfo == null)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
IManagedBuilderMakefileGenerator buildfileGenerator = ManagedBuildManager
|
||||||
|
.getBuildfileGenerator(buildInfo
|
||||||
|
.getDefaultConfiguration());
|
||||||
|
|
||||||
|
if(buildfileGenerator == null)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
// make sure build file generator is initialized
|
||||||
|
buildfileGenerator.initialize(file.getProject(), buildInfo, new NullProgressMonitor());
|
||||||
|
|
||||||
|
// if we have no build info or we can't build the file, then
|
||||||
|
// disable the action
|
||||||
|
if (!buildInfo.buildsFileType(file.getFileExtension())
|
||||||
|
|| buildfileGenerator.isGeneratedResource(file) ) {
|
||||||
|
|
||||||
|
return false;
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Updates the enablement state for the action based upon the selection. If
|
||||||
|
* the selection corresponds to files buildable by MBS, then the action will
|
||||||
|
* be enabled.
|
||||||
|
*/
|
||||||
|
private void update() {
|
||||||
|
if(action != null)
|
||||||
|
action.setEnabled(shouldBeEnabled());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* (non-Javadoc)
|
* (non-Javadoc)
|
||||||
*
|
*
|
||||||
|
@ -282,8 +328,8 @@ public class BuildFilesAction extends Action implements IWorkbenchWindowActionDe
|
||||||
* org.eclipse.jface.viewers.ISelection)
|
* org.eclipse.jface.viewers.ISelection)
|
||||||
*/
|
*/
|
||||||
public void selectionChanged(IAction action, ISelection selection) {
|
public void selectionChanged(IAction action, ISelection selection) {
|
||||||
// TODO Auto-generated method stub
|
// update state
|
||||||
|
update();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -48,17 +48,20 @@ import org.eclipse.ui.ISelectionService;
|
||||||
import org.eclipse.ui.IWorkbenchWindow;
|
import org.eclipse.ui.IWorkbenchWindow;
|
||||||
import org.eclipse.ui.IWorkbenchWindowActionDelegate;
|
import org.eclipse.ui.IWorkbenchWindowActionDelegate;
|
||||||
import org.eclipse.ui.PlatformUI;
|
import org.eclipse.ui.PlatformUI;
|
||||||
|
import org.eclipse.ui.actions.ActionDelegate;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author crecoskie
|
* @author crecoskie
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
public class CleanFilesAction extends Action implements IWorkbenchWindowActionDelegate {
|
public class CleanFilesAction extends ActionDelegate implements IWorkbenchWindowActionDelegate {
|
||||||
/**
|
/**
|
||||||
* The workbench window; or <code>null</code> if this action has been
|
* The workbench window; or <code>null</code> if this action has been
|
||||||
* <code>dispose</code>d.
|
* <code>dispose</code>d.
|
||||||
*/
|
*/
|
||||||
private IWorkbenchWindow workbenchWindow;
|
private IWorkbenchWindow workbenchWindow = null;
|
||||||
|
|
||||||
|
private IAction action = null;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
*
|
*
|
||||||
|
@ -71,39 +74,10 @@ public class CleanFilesAction extends Action implements IWorkbenchWindowActionDe
|
||||||
* Creates an instance of this action, for use in the given window.
|
* Creates an instance of this action, for use in the given window.
|
||||||
*/
|
*/
|
||||||
public CleanFilesAction(IWorkbenchWindow window) {
|
public CleanFilesAction(IWorkbenchWindow window) {
|
||||||
super(ManagedMakeMessages.getResourceString("CleanFilesAction.cleanFiles")); //$NON-NLS-1$
|
|
||||||
if (window == null) {
|
if (window == null) {
|
||||||
throw new IllegalArgumentException();
|
throw new IllegalArgumentException();
|
||||||
}
|
}
|
||||||
this.workbenchWindow = window;
|
this.workbenchWindow = window;
|
||||||
setToolTipText(ManagedMakeMessages.getResourceString("CleanFilesAction.cleanSelectedFiles")); //$NON-NLS-1$
|
|
||||||
setActionDefinitionId("org.eclipse.cdt.managedbuilder.ui.CleanFilesAction"); //$NON-NLS-1$
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param text
|
|
||||||
*/
|
|
||||||
public CleanFilesAction(String text) {
|
|
||||||
super(text);
|
|
||||||
// TODO Auto-generated constructor stub
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param text
|
|
||||||
* @param image
|
|
||||||
*/
|
|
||||||
public CleanFilesAction(String text, ImageDescriptor image) {
|
|
||||||
super(text, image);
|
|
||||||
// TODO Auto-generated constructor stub
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param text
|
|
||||||
* @param style
|
|
||||||
*/
|
|
||||||
public CleanFilesAction(String text, int style) {
|
|
||||||
super(text, style);
|
|
||||||
// TODO Auto-generated constructor stub
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -116,6 +90,15 @@ public class CleanFilesAction extends Action implements IWorkbenchWindowActionDe
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see org.eclipse.ui.actions.ActionDelegate#init(org.eclipse.jface.action.IAction)
|
||||||
|
*/
|
||||||
|
public void init(IAction action) {
|
||||||
|
this.action = action;
|
||||||
|
update();
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* (non-Javadoc)
|
* (non-Javadoc)
|
||||||
*
|
*
|
||||||
|
@ -287,6 +270,53 @@ public class CleanFilesAction extends Action implements IWorkbenchWindowActionDe
|
||||||
job.schedule();
|
job.schedule();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
private boolean shouldBeEnabled() {
|
||||||
|
ISelectionService selectionService = workbenchWindow
|
||||||
|
.getSelectionService();
|
||||||
|
ISelection selection = selectionService.getSelection();
|
||||||
|
|
||||||
|
if (selection instanceof IStructuredSelection) {
|
||||||
|
IStructuredSelection structuredSelection = (IStructuredSelection) selection;
|
||||||
|
for (Iterator elements = structuredSelection.iterator(); elements
|
||||||
|
.hasNext();) {
|
||||||
|
IFile file = convertToIFile(elements.next());
|
||||||
|
if (file != null) {
|
||||||
|
// we only add files that we can actually build
|
||||||
|
if(!ManagedBuildManager.manages(file.getProject()))
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
IManagedBuildInfo buildInfo = ManagedBuildManager
|
||||||
|
.getBuildInfo(file.getProject());
|
||||||
|
|
||||||
|
// if we have no build info or we can't build the file, then
|
||||||
|
// disable the action
|
||||||
|
if (buildInfo == null
|
||||||
|
|| !buildInfo.buildsFileType(file.getFileExtension()) ) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Updates the enablement state for the action based upon the selection. If
|
||||||
|
* the selection corresponds to files buildable by MBS, then the action will
|
||||||
|
* be enabled.
|
||||||
|
*/
|
||||||
|
private void update() {
|
||||||
|
if(action != null)
|
||||||
|
action.setEnabled(shouldBeEnabled());
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* (non-Javadoc)
|
* (non-Javadoc)
|
||||||
*
|
*
|
||||||
|
@ -294,8 +324,7 @@ public class CleanFilesAction extends Action implements IWorkbenchWindowActionDe
|
||||||
* org.eclipse.jface.viewers.ISelection)
|
* org.eclipse.jface.viewers.ISelection)
|
||||||
*/
|
*/
|
||||||
public void selectionChanged(IAction action, ISelection selection) {
|
public void selectionChanged(IAction action, ISelection selection) {
|
||||||
// TODO Auto-generated method stub
|
update();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue