Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSergey Prigogin2014-07-30 18:58:06 -0400
committerSergey Prigogin2014-07-30 19:47:55 -0400
commit31f37f5b63cc75cbf8d39b14ab05019607c462b6 (patch)
tree1ad467aa4da30f6ee9c89f3bc55e2515c05f32a9 /build/org.eclipse.cdt.managedbuilder.ui
parent6a94e17ca785a27daf909dbddc6c401be9c38d50 (diff)
downloadorg.eclipse.cdt-31f37f5b63cc75cbf8d39b14ab05019607c462b6.tar.gz
org.eclipse.cdt-31f37f5b63cc75cbf8d39b14ab05019607c462b6.tar.xz
org.eclipse.cdt-31f37f5b63cc75cbf8d39b14ab05019607c462b6.zip
Proper enablement/disablement of Clean/Build Selected Files commands.
Diffstat (limited to 'build/org.eclipse.cdt.managedbuilder.ui')
-rw-r--r--build/org.eclipse.cdt.managedbuilder.ui/META-INF/MANIFEST.MF17
-rwxr-xr-xbuild/org.eclipse.cdt.managedbuilder.ui/plugin.properties21
-rw-r--r--build/org.eclipse.cdt.managedbuilder.ui/plugin.xml242
-rw-r--r--build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/internal/ui/actions/BuildFilesAction.java381
-rw-r--r--build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/internal/ui/actions/BuildFilesHandler.java186
-rw-r--r--build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/internal/ui/actions/CleanFilesAction.java315
-rw-r--r--build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/internal/ui/actions/CleanFilesHandler.java145
7 files changed, 512 insertions, 795 deletions
diff --git a/build/org.eclipse.cdt.managedbuilder.ui/META-INF/MANIFEST.MF b/build/org.eclipse.cdt.managedbuilder.ui/META-INF/MANIFEST.MF
index 7f78479662..ff182a48d1 100644
--- a/build/org.eclipse.cdt.managedbuilder.ui/META-INF/MANIFEST.MF
+++ b/build/org.eclipse.cdt.managedbuilder.ui/META-INF/MANIFEST.MF
@@ -11,19 +11,18 @@ Export-Package: org.eclipse.cdt.managedbuilder.ui.preferences,
org.eclipse.cdt.managedbuilder.ui.wizards,
org.eclipse.cdt.managedbuilder.internal.ui.actions;x-internal:=true,
org.eclipse.cdt.managedbuilder.internal.ui.workingsets;x-internal:=true
-Require-Bundle: org.eclipse.ui.ide;bundle-version="[3.2.0,4.0.0)",
- org.eclipse.core.resources;bundle-version="[3.2.0,4.0.0)",
- org.eclipse.ui;bundle-version="[3.2.0,4.0.0)",
- org.eclipse.ui.console;bundle-version="[3.5.100,4.0.0)",
- org.eclipse.cdt.core;bundle-version="[5.0.0,6.0.0)",
- org.eclipse.cdt.ui;bundle-version="[5.0.0,6.0.0)",
- org.eclipse.cdt.managedbuilder.core;bundle-version="[8.1.0,9.0.0)",
+Require-Bundle: org.eclipse.core.resources;bundle-version="[3.2.0,4.0.0)",
org.eclipse.core.runtime;bundle-version="[3.2.0,4.0.0)",
org.eclipse.core.variables;bundle-version="[3.1.100,4.0.0)",
- org.eclipse.ui.navigator;bundle-version="[3.2.0,4.0.0)";resolution:=optional,
+ org.eclipse.cdt.core;bundle-version="[5.0.0,6.0.0)",
org.eclipse.cdt.make.core,
org.eclipse.cdt.make.ui,
- org.eclipse.core.filesystem
+ org.eclipse.cdt.managedbuilder.core;bundle-version="[8.1.0,9.0.0)",
+ org.eclipse.cdt.ui;bundle-version="[5.0.0,6.0.0)",
+ org.eclipse.ui;bundle-version="[3.2.0,4.0.0)",
+ org.eclipse.ui.console;bundle-version="[3.5.100,4.0.0)",
+ org.eclipse.ui.ide;bundle-version="[3.2.0,4.0.0)",
+ org.eclipse.ui.navigator;bundle-version="[3.2.0,4.0.0)";resolution:=optional
Bundle-ActivationPolicy: lazy
Bundle-RequiredExecutionEnvironment: JavaSE-1.7
Import-Package: com.ibm.icu.text
diff --git a/build/org.eclipse.cdt.managedbuilder.ui/plugin.properties b/build/org.eclipse.cdt.managedbuilder.ui/plugin.properties
index c6927370e8..6d22cd22fa 100755
--- a/build/org.eclipse.cdt.managedbuilder.ui/plugin.properties
+++ b/build/org.eclipse.cdt.managedbuilder.ui/plugin.properties
@@ -7,21 +7,25 @@
#
# Contributors:
# IBM Corporation - initial API and implementation
+# Sergey Prigogin (Google)
###############################################################################
pluginName=C/C++ Managed Builder UI
providerName=Eclipse CDT
+category.build.name=C/C++ Build
+category.build.description= C/C++ Build Actions
+
# The Wizards
MngCWizard.name=Managed Make C Project
MngCWizard.description=Create a new C project and let Eclipse create and manage the makefile
MngCCWizard.name=Managed Make C++ Project
MngCCWizard.description=Create a new C++ project and let Eclipse create and manage the makefile
-#The property pages
+# The property pages
MngBuildProp.name=C/C++ Build
MngOtherProp.name= Error/Binary Parsers
-#The preference pages
+# The preference pages
MakeBuildPref.name=Makefile Project
MngBuildPref.name=Managed Build
NewCDTWizardPref.name=New C/C++ Project Wizard
@@ -29,20 +33,21 @@ varsPrefName=Build Variables
envPrefName=Environment
propSettingsPrefName=Property Pages Settings
-#The Resource Property page
+# The Resource Property page
MngResourceProp.name=C/C++ Build
-#The Project Converter page
+# The Project Converter page
ConvertTargetAction.label=Convert To...
# Build/clean selected files actions
BuildSelectedFiles.label=Build Selected &File(s)
+command.buildFiles.name=Build Selected File(s)
+command.buildFiles.description=Rebuilds the selected source files
CleanSelectedFiles.label=C&lean Selected File(s)
-BuildSelectedFilesActionSet.label=Build/Clean Selected File(s)
-BuildSelectedFiles.tooltip=Rebuilds the selected file(s)
-CleanSelectedFiles.tooltip=Cleans the output file(s) for the selected file(s)
+command.cleanFiles.name=Clean Selected File(s)
+command.cleanFiles.description=Deletes build output files for the selected source files
-## New CDT project model - property pages names
+# New CDT project model - property pages names
page.c.build=C/C++ Build
CDTPathSymbolsProperty.name=Paths and Symbols
CDTExpPathSymbolsProperty.name=Export Settings
diff --git a/build/org.eclipse.cdt.managedbuilder.ui/plugin.xml b/build/org.eclipse.cdt.managedbuilder.ui/plugin.xml
index ba312a5b55..3260626260 100644
--- a/build/org.eclipse.cdt.managedbuilder.ui/plugin.xml
+++ b/build/org.eclipse.cdt.managedbuilder.ui/plugin.xml
@@ -2,8 +2,160 @@
<?eclipse version="3.0"?>
<plugin>
- <extension-point id="buildDefinitionsUI" name="%buildDefinitionsUI.ep.name" schema="schema/buildDefinitionsUI.exsd"/>
- <extension-point id="newWizardPages" name="%extension-point.name" schema="schema/newWizardPages.exsd"/>
+ <extension-point id="buildDefinitionsUI" name="%buildDefinitionsUI.ep.name" schema="schema/buildDefinitionsUI.exsd"/>
+ <extension-point id="newWizardPages" name="%extension-point.name" schema="schema/newWizardPages.exsd"/>
+
+ <extension
+ point="org.eclipse.core.expressions.definitions">
+ <definition
+ id="org.eclipse.cdt.managedbuilder.ui.isBuildableFileOpenInEditor">
+ <and>
+ <with variable="selection">
+ <not>
+ <instanceof value="org.eclipse.jface.viewers.IStructuredSelection"/>
+ </not>
+ </with>
+ <with variable="activeEditorInput">
+ <reference definitionId="org.eclipse.cdt.managedbuilder.ui.isBuildableFile"/>
+ </with>
+ </and>
+ </definition>
+ <definition
+ id="org.eclipse.cdt.managedbuilder.ui.isBuildableFile">
+ <adapt type="org.eclipse.core.resources.IFile">
+ <and>
+ <test property="org.eclipse.core.resources.projectNature"
+ value="org.eclipse.cdt.managedbuilder.core.managedBuildNature"/>
+ <test property="org.eclipse.cdt.ui.projectBuilder"
+ value="org.eclipse.cdt.managedbuilder.core.genmakebuilder"/>
+ <test property="org.eclipse.cdt.ui.isSource"/>
+ </and>
+ </adapt>
+ </definition>
+ </extension>
+
+ <extension
+ point="org.eclipse.ui.commands">
+ <category
+ name="%category.build.name"
+ description="%category.build.description"
+ id="org.eclipse.cdt.managedbuilder.ui.category.build"/>
+ <command
+ name="%command.cleanFiles.name"
+ description="%command.cleanFiles.description"
+ categoryId="org.eclipse.cdt.managedbuilder.ui.category.build"
+ id="org.eclipse.cdt.managedbuilder.ui.cleanFiles"/>
+ <command
+ name="%command.buildFiles.name"
+ description="%command.buildFiles.description"
+ categoryId="org.eclipse.cdt.managedbuilder.ui.category.build"
+ id="org.eclipse.cdt.managedbuilder.ui.buildFiles"/>
+ </extension>
+
+ <extension
+ point="org.eclipse.ui.handlers">
+ <handler
+ class="org.eclipse.cdt.managedbuilder.internal.ui.actions.CleanFilesHandler"
+ commandId="org.eclipse.cdt.managedbuilder.ui.cleanFiles"/>
+ <handler
+ class="org.eclipse.cdt.managedbuilder.internal.ui.actions.BuildFilesHandler"
+ commandId="org.eclipse.cdt.managedbuilder.ui.buildFiles"/>
+ </extension>
+
+ <extension
+ point="org.eclipse.ui.menus">
+ <menuContribution
+ locationURI="popup:org.eclipse.ui.popup.any?before=additions">
+ <command
+ commandId="org.eclipse.cdt.managedbuilder.ui.cleanFiles"
+ label="%CleanSelectedFiles.label"
+ style="push">
+ <visibleWhen checkEnabled="false">
+ <and>
+ <test property="org.eclipse.cdt.ui.checkPreference"
+ value="org.eclipse.core.resources/description.autobuilding=false"/>
+ <or>
+ <reference
+ definitionId="org.eclipse.cdt.managedbuilder.ui.isBuildableFileOpenInEditor"/>
+ <with variable="selection">
+ <iterate ifEmpty="false">
+ <reference
+ definitionId="org.eclipse.cdt.managedbuilder.ui.isBuildableFile"/>
+ </iterate>
+ </with>
+ </or>
+ </and>
+ </visibleWhen>
+ </command>
+ <command
+ commandId="org.eclipse.cdt.managedbuilder.ui.buildFiles"
+ label="%BuildSelectedFiles.label"
+ style="push">
+ <visibleWhen checkEnabled="false">
+ <and>
+ <test property="org.eclipse.cdt.ui.checkPreference"
+ value="org.eclipse.core.resources/description.autobuilding=false"/>
+ <or>
+ <reference
+ definitionId="org.eclipse.cdt.managedbuilder.ui.isBuildableFileOpenInEditor"/>
+ <with variable="selection">
+ <iterate ifEmpty="false">
+ <reference
+ definitionId="org.eclipse.cdt.managedbuilder.ui.isBuildableFile"/>
+ </iterate>
+ </with>
+ </or>
+ </and>
+ </visibleWhen>
+ </command>
+ </menuContribution>
+ </extension>
+
+ <extension
+ point="org.eclipse.ui.popupMenus">
+ <objectContribution
+ objectClass="org.eclipse.core.resources.IProject"
+ adaptable="true"
+ id="org.eclipse.cdt.managedbuilder.ui.popupMenu.ConvertTargetContribution">
+ <action
+ label="%ConvertTargetAction.label"
+ class="org.eclipse.cdt.managedbuilder.internal.ui.actions.ConvertTargetAction"
+ menubarPath="additions"
+ enablesFor="1"
+ id="org.eclipse.cdt.managedbuilder.ui.ConvertTargetAction"/>
+ <filter
+ name="projectNature"
+ value="org.eclipse.cdt.managedbuilder.core.managedBuildNature"/>
+ </objectContribution>
+ <objectContribution
+ objectClass="org.eclipse.core.resources.IProject"
+ adaptable="true"
+ id="org.eclipse.cdt.managedbuilder.ui.popupMenu.BuildAll">
+ <action
+ class="org.eclipse.cdt.managedbuilder.internal.ui.actions.CleanAndBuildAction"
+ enablesFor="+"
+ id="org.eclipse.cdt.managedbuilder.ui.rebuildConfigurationsAction"
+ label="%RebuildConfigurationsMenu.label"
+ menubarPath="org.eclipse.cdt.ui.cfgmenu/build"/>
+ <action
+ class="org.eclipse.cdt.managedbuilder.internal.ui.actions.CleanAllConfigurationsAction"
+ enablesFor="+"
+ id="org.eclipse.cdt.managedbuilder.ui.cleanAllConfigurationsAction"
+ label="%CleanAllConfigurationsMenu.label"
+ menubarPath="org.eclipse.cdt.ui.cfgmenu/build"/>
+ <action
+ class="org.eclipse.cdt.managedbuilder.internal.ui.actions.BuildAllConfigurationsAction"
+ enablesFor="+"
+ id="org.eclipse.cdt.managedbuilder.ui.buildAllConfigurationsAction"
+ label="%BuildAllConfigurationsMenu.label"
+ menubarPath="org.eclipse.cdt.ui.cfgmenu/build"/>
+ <visibility>
+ <objectState
+ name="projectNature"
+ value="org.eclipse.cdt.managedbuilder.core.managedBuildNature"/>
+ </visibility>
+ </objectContribution>
+ </extension>
<extension
point="org.eclipse.ui.newWizards">
@@ -89,83 +241,6 @@
<!-- Action for Project Converter in context menu -->
<extension
- point="org.eclipse.ui.popupMenus">
- <objectContribution
- objectClass="org.eclipse.core.resources.IProject"
- adaptable="true"
- id="org.eclipse.cdt.managedbuilder.ui.popupMenu.ConvertTargetContribution">
- <action
- label="%ConvertTargetAction.label"
- class="org.eclipse.cdt.managedbuilder.internal.ui.actions.ConvertTargetAction"
- menubarPath="additions"
- enablesFor="1"
- id="org.eclipse.cdt.managedbuilder.ui.ConvertTargetAction">
- </action>
- <filter
- name="projectNature"
- value="org.eclipse.cdt.managedbuilder.core.managedBuildNature">
- </filter>
- </objectContribution>
- <objectContribution
- objectClass="org.eclipse.core.resources.IProject"
- adaptable="true"
- id="org.eclipse.cdt.managedbuilder.ui.popupMenu.BuildAll">
- <action
- class="org.eclipse.cdt.managedbuilder.internal.ui.actions.CleanAndBuildAction"
- enablesFor="+"
- id="org.eclipse.cdt.managedbuilder.ui.rebuildConfigurationsAction"
- label="%RebuildConfigurationsMenu.label"
- menubarPath="org.eclipse.cdt.ui.cfgmenu/build"/>
- <action
- class="org.eclipse.cdt.managedbuilder.internal.ui.actions.CleanAllConfigurationsAction"
- enablesFor="+"
- id="org.eclipse.cdt.managedbuilder.ui.cleanAllConfigurationsAction"
- label="%CleanAllConfigurationsMenu.label"
- menubarPath="org.eclipse.cdt.ui.cfgmenu/build"/>
- <action
- class="org.eclipse.cdt.managedbuilder.internal.ui.actions.BuildAllConfigurationsAction"
- enablesFor="+"
- id="org.eclipse.cdt.managedbuilder.ui.buildAllConfigurationsAction"
- label="%BuildAllConfigurationsMenu.label"
- menubarPath="org.eclipse.cdt.ui.cfgmenu/build"/>
- <visibility>
- <objectState
- name="projectNature"
- value="org.eclipse.cdt.managedbuilder.core.managedBuildNature"/>
- </visibility>
- </objectContribution>
- <objectContribution
- adaptable="true"
- id="org.eclipse.cdt.managedbuilder.ui.BuildSelectedFilesContribution"
- objectClass="org.eclipse.core.resources.IResource">
- <action
- class="org.eclipse.cdt.managedbuilder.internal.ui.actions.BuildFilesAction"
- enablesFor="+"
- id="org.eclipse.cdt.managedbuilder.ui.popups.buildFilesAction"
- label="%BuildSelectedFiles.label"
- menubarPath="additions"/>
- <action
- class="org.eclipse.cdt.managedbuilder.internal.ui.actions.CleanFilesAction"
- enablesFor="+"
- id="org.eclipse.cdt.managedbuilder.ui.popups.cleanFilesAction"
- label="%CleanSelectedFiles.label"
- menubarPath="additions"/>
- <visibility>
- <and>
- <not>
- <objectClass name="org.eclipse.core.resources.IProject"/>
- </not>
- <not>
- <objectClass name="org.eclipse.core.resources.IFolder"/>
- </not>
- <objectState
- name="projectNature"
- value="org.eclipse.cdt.managedbuilder.core.managedBuildNature"/>
- </and>
- </visibility>
- </objectContribution>
- </extension>
- <extension
point="org.eclipse.ui.perspectiveExtensions">
<perspectiveExtension targetID="org.eclipse.cdt.ui.CPerspective">
</perspectiveExtension>
@@ -553,7 +628,8 @@
<test property="org.eclipse.core.resources.projectNature"
value="org.eclipse.cdt.managedbuilder.core.managedBuildNature"/>
</adapt>
- <test property="org.eclipse.cdt.ui.checkPreference" value="org.eclipse.cdt.ui:properties.export.page.enable=true"/>
+ <test property="org.eclipse.cdt.ui.checkPreference"
+ value="org.eclipse.cdt.ui/properties.export.page.enable=true"/>
</and>
</enabledWhen>
</page>
@@ -589,7 +665,8 @@
<test property="org.eclipse.core.resources.projectNature"
value="org.eclipse.cdt.managedbuilder.core.managedBuildNature"/>
</adapt>
- <test property="org.eclipse.cdt.ui.checkPreference" value="org.eclipse.cdt.ui:properties.toolchain.modification.disable=false"/>
+ <test property="org.eclipse.cdt.ui.checkPreference"
+ value="org.eclipse.cdt.ui/properties.toolchain.modification.disable=false"/>
</and>
</enabledWhen>
<keywordReference
@@ -610,7 +687,8 @@
<adapt type="org.eclipse.core.resources.IProject">
<and>
<test property="org.eclipse.core.resources.projectNature" value="org.eclipse.cdt.managedbuilder.core.managedBuildNature"/>
- <test property="org.eclipse.cdt.ui.checkPreference" value="org.eclipse.cdt.ui:properties.sd.page.enable=true"/>
+ <test property="org.eclipse.cdt.ui.checkPreference"
+ value="org.eclipse.cdt.ui/properties.sd.page.enable=true"/>
</and>
</adapt>
</enabledWhen>
diff --git a/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/internal/ui/actions/BuildFilesAction.java b/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/internal/ui/actions/BuildFilesAction.java
deleted file mode 100644
index 6983bcc43c..0000000000
--- a/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/internal/ui/actions/BuildFilesAction.java
+++ /dev/null
@@ -1,381 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006, 2010 Texas Instruments Incorporated and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Texas Instruments - initial API and implementation
- *******************************************************************************/
-package org.eclipse.cdt.managedbuilder.internal.ui.actions;
-
-import java.util.Iterator;
-import java.util.LinkedList;
-import java.util.List;
-
-import org.eclipse.cdt.core.model.ITranslationUnit;
-import org.eclipse.cdt.managedbuilder.core.IManagedBuildInfo;
-import org.eclipse.cdt.managedbuilder.core.ManagedBuildManager;
-import org.eclipse.cdt.managedbuilder.internal.core.GeneratedMakefileBuilder;
-import org.eclipse.cdt.managedbuilder.internal.core.ManagedMakeMessages;
-import org.eclipse.cdt.managedbuilder.makegen.IManagedBuilderMakefileGenerator;
-import org.eclipse.core.resources.ICommand;
-import org.eclipse.core.resources.IFile;
-import org.eclipse.core.resources.IProject;
-import org.eclipse.core.resources.IResource;
-import org.eclipse.core.resources.ResourcesPlugin;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IAdaptable;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.NullProgressMonitor;
-import org.eclipse.core.runtime.Preferences;
-import org.eclipse.core.runtime.jobs.Job;
-import org.eclipse.jface.action.IAction;
-import org.eclipse.jface.viewers.ISelection;
-import org.eclipse.jface.viewers.IStructuredSelection;
-import org.eclipse.ui.ISelectionService;
-import org.eclipse.ui.IWorkbenchWindow;
-import org.eclipse.ui.IWorkbenchWindowActionDelegate;
-import org.eclipse.ui.PlatformUI;
-import org.eclipse.ui.actions.ActionDelegate;
-import org.eclipse.ui.internal.ide.actions.BuildUtilities;
-
-/**
- * Action to build selected files.
- */
-public class BuildFilesAction extends ActionDelegate implements
- IWorkbenchWindowActionDelegate {
-
- /**
- * The workbench window; or <code>null</code> if this action has been
- * <code>dispose</code>d.
- */
- private IWorkbenchWindow workbenchWindow = null;
-
- private IAction action = null;
-
- /**
- *
- */
- public BuildFilesAction() {
- this(PlatformUI.getWorkbench().getActiveWorkbenchWindow());
- }
-
- /**
- * Creates an instance of this action, for use in the given window.
- */
- public BuildFilesAction(IWorkbenchWindow window) {
- if (window == null) {
- throw new IllegalArgumentException();
- }
- this.workbenchWindow = window;
- }
-
- /*
- * (non-Javadoc)
- *
- * @see org.eclipse.ui.IWorkbenchWindowActionDelegate#dispose()
- */
- @Override
- public void dispose() {
- // TODO Auto-generated method stub
-
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.ui.actions.ActionDelegate#init(org.eclipse.jface.action.IAction)
- */
- @Override
- public void init(IAction action) {
- this.action = action;
- update();
- }
-
- /*
- * (non-Javadoc)
- *
- * @see org.eclipse.ui.IWorkbenchWindowActionDelegate#init(org.eclipse.ui.IWorkbenchWindow)
- */
- @Override
- public void init(IWorkbenchWindow window) {
- workbenchWindow = window;
-
- }
-
- /**
- * Helper method that converts an object to the <code>IFile</code>
- * interface. The conversion is a bare cast operation (if the object is
- * instance of <code>IFile</code>, or an adaptation (if the object is
- * instance of <code>IAdaptable</code>).
- *
- * @param object
- * the object to be cast to <code>IFile</code>
- * @return a reference to an IFile corresponding to the object provided, or
- * null if it is not possible to convert the provided object to
- * <code>IFile</code>.
- */
- private IFile convertToIFile(Object object) {
-
- if (object instanceof IFile) {
- return (IFile) object;
- }
-
- if (object instanceof IAdaptable) {
- IAdaptable adaptable = (IAdaptable) object;
- IFile file = (IFile) adaptable.getAdapter(IFile.class);
-
- if (file != null) {
- return file;
- }
- }
-
- // this *should* be redundant now that I've made CElement adaptable to IFile but we'll leave
- // it just to be safe
- if (object instanceof ITranslationUnit) {
- IResource resource = ((ITranslationUnit) object).getResource();
-
- // should be safe to cast to IFile (can't really have a non-file
- // translation unit), but check anyway
- if (resource instanceof IFile) {
- return (IFile) resource;
- }
-
- }
-
- return null;
- }
-
- /**
- * Returns a list of resources currently selected.
- * "Buildable" means buildable by MBS.
- *
- * @return a list of resources
- */
- private List<IFile> getSelectedBuildableFiles() {
-
- List<IFile> files = new LinkedList<IFile>();
-
- 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
- IManagedBuildInfo buildInfo = ManagedBuildManager
- .getBuildInfo(file.getProject());
-
- if ((buildInfo != null) && buildInfo.isValid()
- && buildInfo
- .buildsFileType(file.getFileExtension())) {
- files.add(file);
- }
- }
- }
-
- // since we don't allow building folders, there can be no
- // redundancies
- // eliminateRedundancies(resources);
- }
-
- return files;
- }
-
- private static final class BuildFilesJob extends Job {
- private final List<IFile> files;
-
- BuildFilesJob(List<IFile> filesToBuild) {
- super(ManagedMakeMessages.getResourceString("BuildFilesAction.buildingSelectedFiles")); //$NON-NLS-1$
- files = filesToBuild;
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.core.runtime.jobs.Job#run(org.eclipse.core.runtime.IProgressMonitor)
- */
- @Override
- protected IStatus run(IProgressMonitor monitor) {
- GeneratedMakefileBuilder builder = new GeneratedMakefileBuilder();
- return builder.invokeInternalBuilder(files, monitor);
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.core.runtime.jobs.Job#belongsTo(java.lang.Object)
- */
- @Override
- public boolean belongsTo(Object family) {
- return ResourcesPlugin.FAMILY_MANUAL_BUILD == family;
- }
-
- }
-
- /*
- * (non-Javadoc)
- *
- * @see org.eclipse.ui.IActionDelegate#run(org.eclipse.jface.action.IAction)
- */
- @Override
- public void run(IAction action) {
- List<IFile> selectedFiles = getSelectedBuildableFiles();
- Job buildFilesJob = new BuildFilesJob(selectedFiles);
-
- List<IProject> projects = getProjectsToBuild(selectedFiles);
- if (projects != null && !projects.isEmpty()) {
- // Save all resources prior to doing build
- BuildUtilities.saveEditors(projects);
- }
-
- buildFilesJob.schedule();
-
- }
-
- private boolean shouldBeEnabled() {
-
- // fix for bug 139663
- // if build automatically is turned on, then this menu should be turned off as
- // it will trigger the auto build
- Preferences preferences = ResourcesPlugin.getPlugin().getPluginPreferences();
-
- if(preferences.getBoolean(ResourcesPlugin.PREF_AUTO_BUILDING))
- {
- // auto building is on... do not enable the menu
- return false;
- }
-
- ISelectionService selectionService = workbenchWindow
- .getSelectionService();
- ISelection selection = selectionService.getSelection();
-
- if (selection instanceof IStructuredSelection) {
- IStructuredSelection structuredSelection = (IStructuredSelection) selection;
-
- if (structuredSelection.size() <= 0) {
- return false;
- }
-
- 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 || !buildInfo.isValid()
- || buildInfo.getDefaultConfiguration() == null
- || !buildInfo.getDefaultConfiguration().isManagedBuildOn()) {
- 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;
-
- }
- }
-
- else {
- return false;
- }
- }
- return true;
- }
-
- return false;
-
- }
-
- /*
- * 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)
- *
- * @see org.eclipse.ui.IActionDelegate#selectionChanged(org.eclipse.jface.action.IAction,
- * org.eclipse.jface.viewers.ISelection)
- */
- @Override
- public void selectionChanged(IAction action, ISelection selection) {
- // update state
- update();
- }
-
-
- /*
- * Returns the projects to build.
- * This contains the set of projects which have builders, across all selected resources.
- */
- private List<IProject> getProjectsToBuild(List<IFile> selectedFiles) {
- List<IProject> projectsToBuild = new LinkedList<IProject>();
- for (Iterator<IFile> i = selectedFiles.iterator(); i.hasNext();) {
- IFile file = i.next();
- IProject project = file.getProject();
- if (project != null) {
- if (!projectsToBuild.contains(project)) {
- if (hasBuilder(project)) {
- projectsToBuild.add(project);
- }
- }
- }
- }
-
- return projectsToBuild;
- }
-
- /*
- * Returns whether there are builders configured on the given project.
- *
- * @return <code>true</code> if it has builders,
- * <code>false</code> if not, or if this couldn't be determined
- */
- private boolean hasBuilder(IProject project) {
- if (!project.isAccessible())
- return false;
- try {
- ICommand[] commands = project.getDescription().getBuildSpec();
- if (commands.length > 0) {
- return true;
- }
- } catch (CoreException e) {
- // this method is called when selection changes, so
- // just fall through if it fails.
- // this shouldn't happen anyway, since the list of selected resources
- // has already been checked for accessibility before this is called
- }
- return false;
- }
-
-
-}
diff --git a/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/internal/ui/actions/BuildFilesHandler.java b/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/internal/ui/actions/BuildFilesHandler.java
new file mode 100644
index 0000000000..7e7b87583e
--- /dev/null
+++ b/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/internal/ui/actions/BuildFilesHandler.java
@@ -0,0 +1,186 @@
+/*******************************************************************************
+ * Copyright (c) 2006, 2014 Texas Instruments Incorporated and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Texas Instruments - initial API and implementation
+ * Sergey Prigogin (Google)
+ *******************************************************************************/
+package org.eclipse.cdt.managedbuilder.internal.ui.actions;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashSet;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Set;
+
+import org.eclipse.cdt.internal.core.AdapterUtil;
+import org.eclipse.cdt.internal.ui.util.AbstractResourceActionHandler;
+import org.eclipse.cdt.managedbuilder.core.IManagedBuildInfo;
+import org.eclipse.cdt.managedbuilder.core.ManagedBuildManager;
+import org.eclipse.cdt.managedbuilder.internal.core.GeneratedMakefileBuilder;
+import org.eclipse.cdt.managedbuilder.internal.core.ManagedMakeMessages;
+import org.eclipse.cdt.managedbuilder.makegen.IManagedBuilderMakefileGenerator;
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.core.resources.ICommand;
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.NullProgressMonitor;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.core.runtime.jobs.Job;
+import org.eclipse.core.runtime.preferences.IPreferencesService;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.ui.internal.ide.actions.BuildUtilities;
+
+public class BuildFilesHandler extends AbstractResourceActionHandler {
+ @Override
+ public Object execute(ExecutionEvent event) throws ExecutionException {
+ List<IFile> selectedFiles = getSelectedFiles(event);
+ if (selectedFiles.isEmpty())
+ return null;
+
+ Job buildFilesJob = new BuildFilesJob(selectedFiles);
+
+ Collection<IProject> projects = getProjectsToBuild(selectedFiles);
+ BuildUtilities.saveEditors(projects); // Save all resources prior to doing build.
+ buildFilesJob.schedule();
+ return null;
+ }
+
+ @Override
+ public void setEnabled(Object evaluationContext) {
+ super.setEnabled(evaluationContext);
+ setBaseEnabled(shouldBeEnabled());
+ }
+
+ private boolean shouldBeEnabled() {
+ // Fix for bug 139663.
+ // If build automatically is turned on, then this command should be turned off as
+ // it will trigger the auto build.
+ IPreferencesService preferences = Platform.getPreferencesService();
+
+ if (preferences.getBoolean(ResourcesPlugin.PI_RESOURCES, ResourcesPlugin.PREF_AUTO_BUILDING,
+ false, null)) {
+ // Auto building is on - do not enable the command.
+ return false;
+ }
+
+ IStructuredSelection selection = getSelection();
+ if (selection.isEmpty())
+ return false;
+
+ for (Iterator<?> elements = selection.iterator(); elements.hasNext();) {
+ IFile file = AdapterUtil.adapt(elements.next(), IFile.class);
+ if (file == null)
+ return false;
+
+ // 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 || !buildInfo.isValid()
+ || buildInfo.getDefaultConfiguration() == null
+ || !buildInfo.getDefaultConfiguration().isManagedBuildOn()) {
+ 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 command.
+ if (!buildInfo.buildsFileType(file.getFileExtension())
+ || buildfileGenerator.isGeneratedResource(file)) {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ private List<IFile> getSelectedFiles(ExecutionEvent event) throws ExecutionException {
+ Collection<IResource> selectedResources = getSelectedResources(event);
+ List<IFile> files = new ArrayList<>(selectedResources.size());
+ for (IResource resource : selectedResources) {
+ if (resource instanceof IFile)
+ files.add((IFile) resource);
+ }
+ return files;
+ }
+
+ /*
+ * Returns the projects to build. These are the projects which have builders,
+ * across all selected resources.
+ */
+ private Collection<IProject> getProjectsToBuild(List<IFile> selectedFiles) {
+ Set<IProject> projectsToBuild = new HashSet<IProject>();
+ for (IFile file : selectedFiles) {
+ IProject project = file.getProject();
+ if (!projectsToBuild.contains(project)) {
+ if (hasBuilder(project)) {
+ projectsToBuild.add(project);
+ }
+ }
+ }
+
+ return projectsToBuild;
+ }
+
+ /*
+ * Checks whether there are builders configured on the given project.
+ *
+ * @return {@code true} if it has builders, {@code false} if not, or if this couldn't be
+ * determined
+ */
+ private boolean hasBuilder(IProject project) {
+ if (!project.isAccessible())
+ return false;
+
+ try {
+ ICommand[] commands = project.getDescription().getBuildSpec();
+ if (commands.length > 0)
+ return true;
+ } catch (CoreException e) {
+ // This method is called when selection changes, so just fall through if it
+ // fails. This shouldn't happen anyway, since the list of selected resources
+ // has already been checked for accessibility before this is called.
+ }
+ return false;
+ }
+
+ private static class BuildFilesJob extends Job {
+ private final List<IFile> files;
+
+ BuildFilesJob(List<IFile> filesToBuild) {
+ super(ManagedMakeMessages.getResourceString("BuildFilesHandler.buildingSelectedFiles")); //$NON-NLS-1$
+ files = filesToBuild;
+ }
+
+ @Override
+ protected IStatus run(IProgressMonitor monitor) {
+ GeneratedMakefileBuilder builder = new GeneratedMakefileBuilder();
+ return builder.invokeInternalBuilder(files, monitor);
+ }
+
+ @Override
+ public boolean belongsTo(Object family) {
+ return ResourcesPlugin.FAMILY_MANUAL_BUILD == family;
+ }
+ }
+}
diff --git a/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/internal/ui/actions/CleanFilesAction.java b/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/internal/ui/actions/CleanFilesAction.java
deleted file mode 100644
index 91d33ec1d8..0000000000
--- a/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/internal/ui/actions/CleanFilesAction.java
+++ /dev/null
@@ -1,315 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2006, 2010 Texas Instruments Incorporated and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- * Texas Instruments - initial API and implementation
- *******************************************************************************/
-package org.eclipse.cdt.managedbuilder.internal.ui.actions;
-
-import java.util.Iterator;
-import java.util.LinkedList;
-import java.util.List;
-
-import org.eclipse.cdt.core.model.ITranslationUnit;
-import org.eclipse.cdt.managedbuilder.core.IManagedBuildInfo;
-import org.eclipse.cdt.managedbuilder.core.ManagedBuildManager;
-import org.eclipse.cdt.managedbuilder.internal.core.GeneratedMakefileBuilder;
-import org.eclipse.cdt.managedbuilder.internal.core.ManagedMakeMessages;
-import org.eclipse.core.resources.IFile;
-import org.eclipse.core.resources.IResource;
-import org.eclipse.core.resources.ResourcesPlugin;
-import org.eclipse.core.runtime.IAdaptable;
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.Preferences;
-import org.eclipse.core.runtime.Status;
-import org.eclipse.core.runtime.jobs.Job;
-import org.eclipse.jface.action.IAction;
-import org.eclipse.jface.viewers.ISelection;
-import org.eclipse.jface.viewers.IStructuredSelection;
-import org.eclipse.ui.ISelectionService;
-import org.eclipse.ui.IWorkbenchWindow;
-import org.eclipse.ui.IWorkbenchWindowActionDelegate;
-import org.eclipse.ui.PlatformUI;
-import org.eclipse.ui.actions.ActionDelegate;
-
-/**
- * Action to clean build output for selected files
- */
-public class CleanFilesAction extends ActionDelegate implements
- IWorkbenchWindowActionDelegate {
- /**
- * The workbench window; or <code>null</code> if this action has been
- * <code>dispose</code>d.
- */
- private IWorkbenchWindow workbenchWindow = null;
-
- private IAction action = null;
-
- /**
- *
- */
- public CleanFilesAction() {
- this(PlatformUI.getWorkbench().getActiveWorkbenchWindow());
- }
-
- /**
- * Creates an instance of this action, for use in the given window.
- */
- public CleanFilesAction(IWorkbenchWindow window) {
- if (window == null) {
- throw new IllegalArgumentException();
- }
- this.workbenchWindow = window;
- }
-
- /*
- * (non-Javadoc)
- *
- * @see org.eclipse.ui.IWorkbenchWindowActionDelegate#dispose()
- */
- @Override
- public void dispose() {
- // TODO Auto-generated method stub
-
- }
-
- /* (non-Javadoc)
- * @see org.eclipse.ui.actions.ActionDelegate#init(org.eclipse.jface.action.IAction)
- */
- @Override
- public void init(IAction action) {
- this.action = action;
- update();
- }
-
- /*
- * (non-Javadoc)
- *
- * @see org.eclipse.ui.IWorkbenchWindowActionDelegate#init(org.eclipse.ui.IWorkbenchWindow)
- */
- @Override
- public void init(IWorkbenchWindow window) {
- workbenchWindow = window;
-
- }
-
- /**
- * Helper method that converts an object to the <code>IFile</code>
- * interface. The conversion is a bare cast operation (if the object is
- * instance of <code>IFile</code>, or an adaptation (if the object is
- * instance of <code>IAdaptable</code>).
- *
- * @param object
- * the object to be cast to <code>IFile</code>
- * @return a reference to an IFile corresponding to the object provided, or
- * null if it is not possible to convert the provided object to
- * <code>IFile</code>.
- */
- private IFile convertToIFile(Object object) {
-
- if (object instanceof IFile) {
- return (IFile) object;
- }
-
- if (object instanceof IAdaptable) {
- IAdaptable adaptable = (IAdaptable) object;
- IFile file = (IFile) adaptable.getAdapter(IFile.class);
-
- if (file != null) {
- return file;
- }
- }
-
- // this *should* be redundant now that I've made CElement adaptable to IFile but we'll leave
- // it just to be safe
- if (object instanceof ITranslationUnit) {
- IResource resource = ((ITranslationUnit) object).getResource();
-
- // should be safe to cast to IFile (can't really have a non-file
- // translation unit), but check anyway
- if (resource instanceof IFile) {
- return (IFile) resource;
- }
-
- }
-
- return null;
- }
-
- /**
- * Returns a list of buildable resources currently selected.
- * "Buildable" means buildable by MBS.
- *
- * @return a list of resources
- */
- private List<IFile> getSelectedBuildableFiles() {
-
- List<IFile> files = new LinkedList<IFile>();
-
- 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
- IManagedBuildInfo buildInfo = ManagedBuildManager
- .getBuildInfo(file.getProject());
-
- if (buildInfo.buildsFileType(file.getFileExtension())) {
- files.add(file);
- }
- }
- }
-
- // since we don't allow building folders, there can be no
- // redundancies
- // eliminateRedundancies(resources);
- }
-
- return files;
- }
-
- private static final class CleanFilesJob extends Job {
- private final List<IFile> files;
-
- private CleanFilesJob(List<IFile> filesToBuild) {
- super(ManagedMakeMessages.getResourceString("CleanFilesAction.cleaningFiles")); //$NON-NLS-1$
- files = filesToBuild;
- }
-
- /*
- * (non-Javadoc)
- *
- * @see org.eclipse.core.runtime.jobs.Job#run(org.eclipse.core.runtime.IProgressMonitor)
- */
- @Override
- protected IStatus run(IProgressMonitor monitor) {
- synchronized (getClass()) {
- if (monitor.isCanceled()) {
- return Status.CANCEL_STATUS;
- }
- Job[] buildJobs = Job.getJobManager().find(
- ResourcesPlugin.FAMILY_MANUAL_BUILD);
- for (int i = 0; i < buildJobs.length; i++) {
- Job curr = buildJobs[i];
- if ((curr != this) && (curr instanceof CleanFilesJob)) {
- curr.cancel(); // cancel all other build jobs of our
- // kind
-
- }
- }
- }
-
- GeneratedMakefileBuilder builder = new GeneratedMakefileBuilder();
- return builder.cleanFiles(files, monitor);
- }
-
- @Override
- public boolean belongsTo(Object family) {
- return ResourcesPlugin.FAMILY_MANUAL_BUILD == family;
- }
- }
-
- /*
- * (non-Javadoc)
- *
- * @see org.eclipse.ui.IActionDelegate#run(org.eclipse.jface.action.IAction)
- */
- @Override
- public void run(IAction action) {
- List<IFile> selectedFiles = getSelectedBuildableFiles();
- CleanFilesJob job = new CleanFilesJob(selectedFiles);
- job.schedule();
- }
-
- private boolean shouldBeEnabled() {
-
-
- // fix for Bugzilla 139663
- // if build automatically is turned on, then this menu should be turned off as
- // it will trigger the auto build
- Preferences preferences = ResourcesPlugin.getPlugin().getPluginPreferences();
-
- if(preferences.getBoolean(ResourcesPlugin.PREF_AUTO_BUILDING))
- {
- // auto building is on... do not enable the menu
- return false;
- }
-
- ISelectionService selectionService = workbenchWindow
- .getSelectionService();
- ISelection selection = selectionService.getSelection();
-
- if (selection instanceof IStructuredSelection) {
- IStructuredSelection structuredSelection = (IStructuredSelection) selection;
-
- if (structuredSelection.size() <= 0) {
- return false;
- }
-
- 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.isValid()
- || !buildInfo.buildsFileType(file
- .getFileExtension())) {
- return false;
- }
- }
-
- else {
- return false;
- }
-
- }
-
- return true;
- }
-
- return false;
- }
-
- /*
- * 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)
- *
- * @see org.eclipse.ui.IActionDelegate#selectionChanged(org.eclipse.jface.action.IAction,
- * org.eclipse.jface.viewers.ISelection)
- */
- @Override
- public void selectionChanged(IAction action, ISelection selection) {
- update();
- }
-
-}
diff --git a/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/internal/ui/actions/CleanFilesHandler.java b/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/internal/ui/actions/CleanFilesHandler.java
new file mode 100644
index 0000000000..5e12e8bf17
--- /dev/null
+++ b/build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/internal/ui/actions/CleanFilesHandler.java
@@ -0,0 +1,145 @@
+/*******************************************************************************
+ * Copyright (c) 2006, 2014 Texas Instruments Incorporated and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Texas Instruments - initial API and implementation
+ * Sergey Prigogin (Google)
+ *******************************************************************************/
+package org.eclipse.cdt.managedbuilder.internal.ui.actions;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.List;
+
+import org.eclipse.cdt.internal.core.AdapterUtil;
+import org.eclipse.cdt.internal.ui.util.AbstractResourceActionHandler;
+import org.eclipse.cdt.managedbuilder.core.IManagedBuildInfo;
+import org.eclipse.cdt.managedbuilder.core.ManagedBuildManager;
+import org.eclipse.cdt.managedbuilder.internal.core.GeneratedMakefileBuilder;
+import org.eclipse.cdt.managedbuilder.internal.core.ManagedMakeMessages;
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.core.runtime.jobs.Job;
+import org.eclipse.core.runtime.preferences.IPreferencesService;
+import org.eclipse.jface.viewers.IStructuredSelection;
+
+/**
+ * Action to clean build output for selected files
+ */
+public class CleanFilesHandler extends AbstractResourceActionHandler {
+ @Override
+ public Object execute(ExecutionEvent event) throws ExecutionException {
+ List<IFile> selectedFiles = getSelectedBuildableFiles(event);
+ if (selectedFiles.isEmpty())
+ return null;
+
+ CleanFilesJob job = new CleanFilesJob(selectedFiles);
+ job.schedule();
+ return null;
+ }
+
+ /**
+ * Returns a list of buildable resources currently selected.
+ * "Buildable" means buildable by MBS.
+ */
+ private List<IFile> getSelectedBuildableFiles(ExecutionEvent event) throws ExecutionException {
+ Collection<IResource> selectedResources = getSelectedResources(event);
+ List<IFile> files = new ArrayList<>(selectedResources.size());
+ for (IResource resource : selectedResources) {
+ // We only add files that we can actually build.
+ if (resource instanceof IFile && isBuildable(resource)) {
+ files.add((IFile) resource);
+ }
+ }
+ return files;
+ }
+
+ @Override
+ public void setEnabled(Object evaluationContext) {
+ super.setEnabled(evaluationContext);
+ setBaseEnabled(shouldBeEnabled());
+ }
+
+ private boolean shouldBeEnabled() {
+ // Fix for bug 139663.
+ // If build automatically is turned on, then this command should be turned off as
+ // it will trigger the auto build.
+ IPreferencesService preferences = Platform.getPreferencesService();
+
+ if (preferences.getBoolean(ResourcesPlugin.PI_RESOURCES, ResourcesPlugin.PREF_AUTO_BUILDING,
+ false, null)) {
+ // Auto building is on - do not enable the command.
+ return false;
+ }
+
+ IStructuredSelection selection = getSelection();
+ if (selection.isEmpty())
+ return false;
+
+ for (Iterator<?> elements = selection.iterator(); elements.hasNext();) {
+ IFile file = AdapterUtil.adapt(elements.next(), IFile.class);
+ if (file == null)
+ return false;
+
+ // We only add files that we can actually build.
+ if (!isBuildable(file))
+ return false;
+ }
+
+ return true;
+ }
+
+ private static boolean isBuildable(IResource resource) {
+ IProject project = resource.getProject();
+ if (!ManagedBuildManager.manages(project))
+ return false;
+ IManagedBuildInfo buildInfo = ManagedBuildManager.getBuildInfo(project);
+ return buildInfo != null && buildInfo.isValid()
+ && buildInfo.buildsFileType(resource.getFileExtension());
+ }
+
+ private static class CleanFilesJob extends Job {
+ private final List<IFile> files;
+
+ private CleanFilesJob(List<IFile> filesToBuild) {
+ super(ManagedMakeMessages.getResourceString("CleanFilesHandler.cleaningFiles")); //$NON-NLS-1$
+ files = filesToBuild;
+ }
+
+ @Override
+ protected IStatus run(IProgressMonitor monitor) {
+ synchronized (getClass()) {
+ if (monitor.isCanceled()) {
+ return Status.CANCEL_STATUS;
+ }
+ Job[] buildJobs = Job.getJobManager().find(ResourcesPlugin.FAMILY_MANUAL_BUILD);
+ for (Job job : buildJobs) {
+ if ((job != this) && (job instanceof CleanFilesJob)) {
+ job.cancel(); // Cancel all other build jobs of our kind.
+ }
+ }
+ }
+
+ GeneratedMakefileBuilder builder = new GeneratedMakefileBuilder();
+ return builder.cleanFiles(files, monitor);
+ }
+
+ @Override
+ public boolean belongsTo(Object family) {
+ return ResourcesPlugin.FAMILY_MANUAL_BUILD == family;
+ }
+ }
+}

Back to the top