1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-04-23 22:52:11 +02:00

Proper enablement/disablement of Clean/Build Selected Files commands.

Change-Id: I6f56eeb111759ccf7a0bc8fbbfd57ffd8689bf01
This commit is contained in:
Sergey Prigogin 2014-07-30 15:58:06 -07:00
parent 6a94e17ca7
commit 31f37f5b63
19 changed files with 903 additions and 907 deletions

View file

@ -1447,7 +1447,7 @@ public class GeneratedMakefileBuilder extends ACBuilder {
OutputStream stdout = buildRunnerHelper.getOutputStream();
OutputStream stderr = buildRunnerHelper.getErrorStream();
buildRunnerHelper.greeting(ManagedMakeMessages.getResourceString("BuildFilesAction.buildingSelectedFiles"), cfgName, toolchainName, isSupported); //$NON-NLS-1$
buildRunnerHelper.greeting(ManagedMakeMessages.getResourceString("BuildFilesHandler.buildingSelectedFiles"), cfgName, toolchainName, isSupported); //$NON-NLS-1$
buildRunnerHelper.printLine(ManagedMakeMessages.getResourceString("ManagedMakeBuilder.message.internal.builder.header.note")); //$NON-NLS-1$
// Build artifacts for each file in the project
@ -1574,7 +1574,7 @@ public class GeneratedMakefileBuilder extends ACBuilder {
ErrorParserManager epm = new ErrorParserManager(project, des.getDefaultBuildDirLocationURI(), this, errorParsers);
buildRunnerHelper.prepareStreams(epm, null , console, new SubProgressMonitor(monitor, TICKS_STREAM_PROGRESS_MONITOR));
buildRunnerHelper.greeting(ManagedMakeMessages.getResourceString("CleanFilesAction.cleanSelectedFiles"), cfgName, toolchainName, isSupported); //$NON-NLS-1$
buildRunnerHelper.greeting(ManagedMakeMessages.getResourceString("CleanFilesHandler.cleanSelectedFiles"), cfgName, toolchainName, isSupported); //$NON-NLS-1$
buildRunnerHelper.printLine(ManagedMakeMessages.getResourceString("ManagedMakeBuilder.message.internal.builder.header.note")); //$NON-NLS-1$
for (IFile file : files) {

View file

@ -49,7 +49,7 @@ ManagedBuildManager.error.owner_not_null=addTarget: owner not null
ManagedBuildManager.error.null_owner=addTarget: null owner
ManagedBuildManager.error.owner_not_project=addTarget: owner not project
ManagedBuildManager.error.manifest_load_failed_title=Managed Build System Version Error
ManagedBuildManager.error.manifest.version.error=The version number defined in the plugin manifest file\n{0}\nis greater than the version of the Managed Build System.\nThe definitions in the manifest file will not be loaded.
ManagedBuildManager.error.manifest.version.error=The version number defined in the plug-in manifest file\n{0}\nis greater than the version of the Managed Build System.\nThe definitions in the manifest file will not be loaded.
ManagedBuildManager.error.manifest.header=Managed Build system manifest file error:
ManagedBuildManager.error.manifest.resolving=Unable to resolve the {0} identifier {1} in the {2} {3}.
ManagedBuildManager.error.manifest.duplicate=Duplicate identifier {1} for element type {0}.
@ -115,7 +115,7 @@ UserDefinedMacroSupplier.storeOutputStream.wrong.arguments=Failed to persist mac
# BuildMacroStatus messages
BuildMacroStatus.status.macro.undefined=Macro {0} is undefined
BuildFilesAction.buildingSelectedFiles=Building Selected Files
BuildFilesHandler.buildingSelectedFiles=Building Selected Files
BuildDescriptionGnuMakefileGenerator.0=IO exception occurred:
BuildDescriptionGnuMakefileGenerator.1=IO exception occurred:
BuildMacroStatus.status.reference.eachother=Macros {0} and {1} reference each other
@ -133,7 +133,7 @@ ResourceChangeHandler.buildInfoSerializationJob=Build Info Serialization
GeneratedMakefileBuilder.buildingProject=Building project {0}
GeneratedMakefileBuilder.cleaningProject=Cleaning project {0}
GeneratedMakefileBuilder.removingResourceMarkers=Removing problem markers for {0}
GeneratedMakefileBuilder.refreshingArtifacts=Refreshing build artefacts for {0}
GeneratedMakefileBuilder.refreshingArtifacts=Refreshing build artifacts for {0}
GeneratedMakefileBuilder.fileDeleted={0} deleted.
GeneratedMakefileBuilder.nothingToClean=Nothing to clean.
GenerateMakefileWithBuildDescription.0=info is null
@ -144,9 +144,8 @@ ManagedBuilderCorePlugin.resourceChangeHandlingInitializationJob=Initializing Re
InternalBuilder.msg.header=Internal Builder: {0}
InternalBuilder.nothing.todo=Nothing to be done for project {0}
CfgScannerConfigUtil_ErrorNotSupported=Only type {0} is supported in this method.
CleanFilesAction.cleanFiles=Clean File(s)
CleanFilesAction.cleanSelectedFiles=Cleaning Selected Files
CleanFilesAction.cleaningFiles=Cleaning files
CleanFilesHandler.cleanSelectedFiles=Cleaning Selected Files
CleanFilesHandler.cleaningFiles=Cleaning files
BuilderFactory.1=can not find builder with the specified id
FolderInfo.4=converter invocation failed
MbsMacroSupplier.1=tool parent must be one of configuration, toolchain, or resource configuration

View file

@ -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

View file

@ -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

View file

@ -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">
@ -88,83 +240,6 @@
</extension>
<!-- 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">
@ -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>

View file

@ -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;
}
}

View file

@ -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;
}
}
}

View file

@ -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();
}
}

View file

@ -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;
}
}
}

View file

@ -43,13 +43,14 @@ Export-Package: org.eclipse.cdt.core,
org.eclipse.cdt.core.templateengine.process,
org.eclipse.cdt.core.templateengine.process.processes,
org.eclipse.cdt.internal.core;
x-friends:="org.eclipse.cdt.ui,
x-friends:="org.eclipse.cdt.codan.core.cxx,
org.eclipse.cdt.debug.core,
org.eclipse.cdt.managedbuilder.core,
org.eclipse.cdt.dsf.gdb,
org.eclipse.cdt.make.core,
org.eclipse.cdt.make.ui,
org.eclipse.cdt.codan.core.cxx,
org.eclipse.cdt.dsf.gdb",
org.eclipse.cdt.managedbuilder.core,
org.eclipse.cdt.managedbuilder.ui,
org.eclipse.cdt.ui",
org.eclipse.cdt.internal.core.browser;x-friends:="org.eclipse.cdt.ui",
org.eclipse.cdt.internal.core.cdtvariables;x-internal:=true,
org.eclipse.cdt.internal.core.dom;x-internal:=true,

View file

@ -4,7 +4,7 @@
<!-- =================================================================================== -->
<!-- Obsolete extension point no longer in use, will be remove. -->
<!-- Obsolete extension point no longer in use, will be removed. -->
<!-- =================================================================================== -->
<extension-point id="CProject" name="%CProject.name" schema="schema/CProject.exsd"/>
<!-- =================================================================================== -->
@ -289,6 +289,7 @@
class="org.eclipse.cdt.internal.errorparsers.VCErrorParser">
</errorparser>
</extension>
<!-- =================================================================================== -->
<!-- CDT customized problem markers: C Problem markers -->
<!-- =================================================================================== -->

View file

@ -0,0 +1,39 @@
/*******************************************************************************
* Copyright (c) 2014 Google, Inc 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:
* Sergey Prigogin (Google) - initial API and implementation
*******************************************************************************/
package org.eclipse.cdt.internal.core;
import org.eclipse.core.runtime.IAdaptable;
/**
* A collection of static adaptor-related methods.
*/
public class AdapterUtil {
/**
* Adapts the given object to the given type.
*
* @param object the object to adapt
* @param type the type to adapt to
* @return the adapted object, or {@code null} if the object cannot be adapted.
*/
@SuppressWarnings("unchecked")
public static <T> T adapt(Object object, Class<T> type) {
if (object == null)
return null;
if (type.isInstance(object))
return (T) object;
if (object instanceof IAdaptable)
return (T) ((IAdaptable) object).getAdapter(type);
return null;
}
}

View file

@ -63,7 +63,7 @@ Export-Package: org.eclipse.cdt.internal.corext;x-internal:=true,
org.eclipse.cdt.internal.ui.text.template;x-internal:=true,
org.eclipse.cdt.internal.ui.text.util;x-internal:=true,
org.eclipse.cdt.internal.ui.typehierarchy;x-internal:=true,
org.eclipse.cdt.internal.ui.util;x-friends:="org.eclipse.cdt.debug.ui,org.eclipse.cdt.debug.edc.tests",
org.eclipse.cdt.internal.ui.util;x-friends:="org.eclipse.cdt.debug.ui,org.eclipse.cdt.debug.edc.tests,org.eclipse.cdt.managedbuilder.ui",
org.eclipse.cdt.internal.ui.viewsupport;x-internal:=true,
org.eclipse.cdt.internal.ui.wizards;x-internal:=true,
org.eclipse.cdt.internal.ui.wizards.classwizard;x-internal:=true,
@ -102,6 +102,7 @@ Export-Package: org.eclipse.cdt.internal.corext;x-internal:=true,
org.eclipse.cdt.utils.ui.controls
Require-Bundle: org.eclipse.cdt.core;bundle-version="[5.2.0,6.0.0)",
org.eclipse.compare;bundle-version="[3.3.0,4.0.0)",
org.eclipse.core.expressions,
org.eclipse.core.filesystem;bundle-version="[1.1.0,2.0.0)",
org.eclipse.core.resources;bundle-version="[3.2.0,4.0.0)",
org.eclipse.core.runtime;bundle-version="[3.7.0,4.0.0)",

View file

@ -80,65 +80,65 @@ ActionDefinition.sourceQuickMenu.name= Show Source Quick Menu
ActionDefinition.sourceQuickMenu.description= Shows the source quick menu
ActionDefinition.comment.name= Comment
ActionDefinition.comment.description= Turn the selected lines into // style comments
ActionDefinition.comment.description= Turns the selected lines into // style comments
ActionDefinition.uncomment.name= Uncomment
ActionDefinition.uncomment.description= Uncomment the selected // style comment lines
ActionDefinition.uncomment.description= Uncomments the selected // style comment lines
ActionDefinition.toggleComment.name= Comment/Uncomment
ActionDefinition.toggleComment.description= Comment/Uncomment the selected lines
ActionDefinition.toggleComment.description= Comments/Uncomments the selected lines
ActionDefinition.opendecl.name= Open Declaration
ActionDefinition.opendecl.description= Open an editor on the selected element's declaration(s)
ActionDefinition.opendecl.description= Opens an editor on the selected element's declaration(s)
ActionDefinition.opencview.name= Show in C/C++ Project view
ActionDefinition.opencview.description= Show the selected resource in the C/C++ Project view
ActionDefinition.opencview.description= Shows the selected resource in the C/C++ Project view
ActionDefinition.finddecl.name= Declaration
ActionDefinition.finddecl.description= Search for declarations of the selected element in the workspace
ActionDefinition.finddecl.description= Searches for declarations of the selected element in the workspace
ActionDefinition.finddecl.project.name= Declaration in Project
ActionDefinition.finddecl.project.description= Search for declarations of the selected element in the enclosing project
ActionDefinition.finddecl.project.description= Searches for declarations of the selected element in the enclosing project
ActionDefinition.finddecl.workingset.name= Declaration in Working Set
ActionDefinition.finddecl.workingset.description= Search for declarations of the selected element in a working set
ActionDefinition.finddecl.workingset.description= Searches for declarations of the selected element in a working set
ActionDefinition.findrefs.name= References
ActionDefinition.findrefs.description= Search for references to the selected element in the workspace
ActionDefinition.findrefs.description= Searches for references to the selected element in the workspace
ActionDefinition.findrefs.project.name= References in Project
ActionDefinition.findrefs.project.description= Search for references to the selected element in the enclosing project
ActionDefinition.findrefs.project.description= Searches for references to the selected element in the enclosing project
ActionDefinition.findrefs.workingset.name= References in Working Set
ActionDefinition.findrefs.workingset.description= Search for references to the selected element in a working set
ActionDefinition.findrefs.workingset.description= Searches for references to the selected element in a working set
ActionDefinition.openCallHierarchy.name= Open Call Hierarchy
ActionDefinition.openCallHierarchy.description= Open the call hierarchy for the selected element
ActionDefinition.openCallHierarchy.description= Opens the call hierarchy for the selected element
ActionDefinition.addBlockComment.name= Add Block Comment
ActionDefinition.addBlockComment.description= Enclose the selection with a block comment
ActionDefinition.addBlockComment.description= Encloses the selection with a block comment
ActionDefinition.removeBlockComment.name= Remove Block Comment
ActionDefinition.removeBlockComment.description= Remove the block comment enclosing the selection
ActionDefinition.removeBlockComment.description= Removes the block comment enclosing the selection
ActionDefinition.indent.name= Indent Line
ActionDefinition.indent.description=Indents the current line
ActionDefinition.format.name=Format
ActionDefinition.format.description=Format Source Code
ActionDefinition.format.description=Formats Source Code
ActionDefinition.gotoMatchingBracket.name= Go to Matching Bracket
ActionDefinition.gotoMatchingBracket.description= Moves the cursor to the matching bracket
ActionDefinition.gotoNextBookmark.name= Next Bookmark
ActionDefinition.gotoNextBookmark.description= Goto next bookmark of the selected file
ActionDefinition.gotoNextBookmark.description= Goes to the next bookmark of the selected file
ActionDefinition.FindWord.name= Find Word
ActionDefinition.FindWord.description= Select a word and find the next occurrence
ActionDefinition.FindWord.description= Selects a word and find the next occurrence
ActionDefinition.toggleSourceHeader.name= Toggle Source/Header
ActionDefinition.toggleSourceHeader.description= Toggles between corresponding source and header files
ActionDefinition.backwardMacroExpansion.name= Back
ActionDefinition.backwardMacroExpansion.description= Step backward in macro expansions
ActionDefinition.backwardMacroExpansion.description= Steps backward in macro expansions
ActionDefinition.forwardMacroExpansion.name= Forward
ActionDefinition.forwardMacroExpansion.description= Step forward in macro expansions
ActionDefinition.forwardMacroExpansion.description= Steps forward in macro expansions
ActionDefinition.showMacroExplorer.name= Explore Macro Expansion
ActionDefinition.showMacroExplorer.description= Opens a quick view for macro expansion exploration
@ -151,13 +151,13 @@ refactoringHideMethod.label = Hide Member Function...
ActionDefinition.renameElement.name= Rename - Refactoring
ActionDefinition.renameElement.description= Rename the selected element
ActionDefinition.renameElement.description= Renames the selected element
ActionDefinition.extractConstant.name= Extract Constant - Refactoring
ActionDefinition.extractConstant.description= Extract a constant for the selected expression
ActionDefinition.extractConstant.description= Extracts a constant for the selected expression
ActionDefinition.extractLocalVariable.name= Extract Local Variable - Refactoring
ActionDefinition.extractLocalVariable.description= Extract a local variable for the selected expression
ActionDefinition.extractLocalVariable.description= Extracts a local variable for the selected expression
ActionDefinition.extractFunction.name= Extract Function - Refactoring
ActionDefinition.extractFunction.description= Extract a function for the selected list of expressions or statements
ActionDefinition.extractFunction.description= Extracts a function for the selected list of expressions or statements
ActionDefinition.toggleFunction.name= Toggle Function - Refactoring
ActionDefinition.toggleFunction.description= Toggles the implementation between header and implementation file
ActionDefinition.implementMethod.name= Implement Method - Source Generation

View file

@ -3488,7 +3488,8 @@
<adapt type="org.eclipse.core.resources.IResource">
<and>
<test property="org.eclipse.core.resources.projectNature" value="org.eclipse.cdt.core.cnature"/>
<test property="org.eclipse.cdt.ui.checkPreference" value="org.eclipse.cdt.core:language.settings.providers.disabled=false"/>
<test property="org.eclipse.cdt.ui.checkPreference"
value="org.eclipse.cdt.core/language.settings.providers.disabled=false"/>
</and>
</adapt>
</enabledWhen>
@ -4079,30 +4080,37 @@
<extension
point="org.eclipse.core.expressions.propertyTesters">
<propertyTester
id="org.eclipse.cdt.ui.preferenceTester"
class="org.eclipse.cdt.ui.newui.PropertyTester"
namespace="org.eclipse.cdt.ui"
properties="checkPreference"
type="java.lang.Object"/>
class="org.eclipse.cdt.internal.ui.expressions.CPropertyTester"
id="org.eclipse.cdt.ui.preferenceTester"
namespace="org.eclipse.cdt.ui"
properties="checkPreference"
type="java.lang.Object"/>
<propertyTester
id="org.eclipse.cdt.Tester1"
class="org.eclipse.cdt.ui.newui.PropertyTester"
namespace="org.eclipse.cdt.ui"
properties="isSource"
type="org.eclipse.cdt.core.model.ITranslationUnit"/>
class="org.eclipse.cdt.internal.ui.expressions.CPropertyTester"
id="org.eclipse.cdt.Tester1"
namespace="org.eclipse.cdt.ui"
properties="isSource"
type="org.eclipse.cdt.core.model.ITranslationUnit"/>
<propertyTester
id="org.eclipse.cdt.Tester2"
class="org.eclipse.cdt.ui.newui.PropertyTester"
namespace="org.eclipse.cdt.ui"
properties="isSource"
type="org.eclipse.core.resources.IFile"/>
class="org.eclipse.cdt.internal.ui.expressions.CPropertyTester"
id="org.eclipse.cdt.Tester2"
namespace="org.eclipse.cdt.ui"
properties="isSource"
type="org.eclipse.core.resources.IFile"/>
<propertyTester
id="org.eclipse.cdt.ui.workingSetPropertyTester"
class="org.eclipse.cdt.internal.ui.workingsets.WorkingSetPropertyTester"
namespace="org.eclipse.cdt.ui"
properties="hasCProjects"
type="org.eclipse.ui.IWorkingSet"/>
class="org.eclipse.cdt.internal.ui.expressions.ResourcePropertyTester"
id="org.eclipse.cdt.core.projectBuilderTester"
namespace="org.eclipse.cdt.ui"
properties="projectBuilder"
type="org.eclipse.core.resources.IResource"/>
<propertyTester
class="org.eclipse.cdt.internal.ui.workingsets.WorkingSetPropertyTester"
id="org.eclipse.cdt.ui.workingSetPropertyTester"
namespace="org.eclipse.cdt.ui"
properties="hasCProjects"
type="org.eclipse.ui.IWorkingSet"/>
</extension>
<extension
point="org.eclipse.ui.exportWizards">
<category

View file

@ -0,0 +1,64 @@
/*******************************************************************************
* Copyright (c) 2007, 2014 Intel Corporation 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:
* Intel Corporation - initial API and implementation
* Sergey Prigogin (Google)
*******************************************************************************/
package org.eclipse.cdt.internal.ui.expressions;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.eclipse.core.expressions.PropertyTester;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.runtime.Platform;
import org.eclipse.core.runtime.preferences.IPreferencesService;
import org.eclipse.cdt.core.model.CoreModel;
import org.eclipse.cdt.core.model.ITranslationUnit;
/**
* Property tester to test expressions in plugin.xml. Tests following expressions:
* 1. Checks whether given object is a source file. Usage:
* <test property="org.eclipse.cdt.ui.isSource"/>
* 2. Checks value of a preference. Usage:
* <test property="org.eclipse.cdt.ui.checkPreference" value="org.eclipse.cdt.ui:properties.export.page.enable=true"/>
*/
public class CPropertyTester extends PropertyTester {
private static final String KEY_SRC = "isSource"; //$NON-NLS-1$
private static final String KEY_PREF = "checkPreference"; //$NON-NLS-1$
private static final Pattern PREFERENCE_PATTERN = Pattern.compile("(.*)[/:](.*)=(.*)"); //$NON-NLS-1$
@Override
public boolean test(Object receiver, String property, Object[] args, Object expectedValue) {
if (KEY_SRC.equals(property)) {
if (receiver instanceof ITranslationUnit) {
return ((ITranslationUnit) receiver).isSourceUnit();
} else if (receiver instanceof IFile) {
IFile file = (IFile) receiver;
return CoreModel.isValidSourceUnitName(file.getProject(), file.getName());
}
} else if (KEY_PREF.equals(property) && expectedValue instanceof String) {
Matcher matcher = PREFERENCE_PATTERN.matcher((String) expectedValue);
if (matcher.matches()) {
String pluginId = matcher.group(1);
String preference = matcher.group(2);
String wantedValue = matcher.group(3);
IPreferencesService preferences = Platform.getPreferencesService();
String actualValue = preferences.getString(pluginId, preference, null, null);
if (wantedValue != null) {
return wantedValue.equals(actualValue) || (actualValue == null && wantedValue.equals("false")); //$NON-NLS-1$
} else {
return actualValue != null;
}
}
}
return false;
}
}

View file

@ -0,0 +1,44 @@
/*******************************************************************************
* Copyright (c) 2014 Google, Inc 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:
* Sergey Prigogin (Google) - initial API and implementation
*******************************************************************************/
package org.eclipse.cdt.internal.ui.expressions;
import org.eclipse.core.expressions.PropertyTester;
import org.eclipse.core.resources.ICommand;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IProjectDescription;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.CoreException;
public class ResourcePropertyTester extends PropertyTester {
private static final String PROP_PROJECT_BUILDER = "projectBuilder"; //$NON-NLS-1$
@Override
public boolean test(Object receiver, String property, Object[] args, Object expectedValue) {
if (!(receiver instanceof IResource) || args.length != 0)
return false;
if (property.equals(PROP_PROJECT_BUILDER)) {
IProject project = ((IResource) receiver).getProject();
if (project == null)
return false;
try {
IProjectDescription description = project.getDescription();
ICommand[] buildSpec = description.getBuildSpec();
for (ICommand builder : buildSpec) {
if (builder.getBuilderName().equals(expectedValue))
return true;
}
} catch (CoreException e) {
// Ignore to return false;
}
}
return false;
}
}

View file

@ -0,0 +1,174 @@
/*******************************************************************************
* Copyright (c) 2014 Google, Inc 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:
* Sergey Prigogin (Google) - initial API and implementation
*******************************************************************************/
package org.eclipse.cdt.internal.ui.util;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Set;
import org.eclipse.core.commands.AbstractHandler;
import org.eclipse.core.commands.ExecutionEvent;
import org.eclipse.core.commands.ExecutionException;
import org.eclipse.core.expressions.IEvaluationContext;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.mapping.ResourceMapping;
import org.eclipse.core.resources.mapping.ResourceTraversal;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.jface.text.ITextSelection;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.ui.IEditorInput;
import org.eclipse.ui.ISources;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.handlers.HandlerUtil;
import org.eclipse.ui.handlers.IHandlerService;
import org.eclipse.ui.ide.ResourceUtil;
import org.eclipse.cdt.ui.CUIPlugin;
import org.eclipse.cdt.internal.core.AdapterUtil;
/**
* Base class for command handlers operating on resources.
*/
public abstract class AbstractResourceActionHandler extends AbstractHandler {
private IEvaluationContext evaluationContext;
private IStructuredSelection selection;
public void setSelection(ISelection selection) {
this.selection = convertSelection(null, selection);
}
@Override
public void setEnabled(Object evaluationContext) {
this.evaluationContext = (IEvaluationContext) evaluationContext;
}
protected IStructuredSelection getSelection() {
if (selection == null) {
selection = convertSelection(evaluationContext, null);
}
return selection;
}
protected IStructuredSelection getSelection(ExecutionEvent event) throws ExecutionException {
Object selection = HandlerUtil.getActiveMenuSelection(event);
if (selection == null) {
selection = HandlerUtil.getCurrentSelectionChecked(event);
}
if (selection instanceof ITextSelection) {
IEditorInput editorInput = HandlerUtil.getActiveEditorInputChecked(event);
IResource resource = ResourceUtil.getResource(editorInput);
if (resource != null) {
return new StructuredSelection(resource);
}
resource = ResourceUtil.getFile(editorInput);
if (resource != null) {
return new StructuredSelection(resource);
}
}
if (selection instanceof IStructuredSelection) {
return (IStructuredSelection) selection;
}
return StructuredSelection.EMPTY;
}
private static IStructuredSelection convertSelection(IEvaluationContext context,
Object selection) {
if (selection == null) {
if (context == null) {
return StructuredSelection.EMPTY;
}
selection = context.getVariable(ISources.ACTIVE_MENU_SELECTION_NAME);
if (!(selection instanceof ISelection)) {
selection = context.getVariable(ISources.ACTIVE_CURRENT_SELECTION_NAME);
}
}
if (selection instanceof ITextSelection) {
if (context == null) {
context = getEvaluationContext();
}
IResource resource =
ResourceUtil.getResource(context.getVariable(ISources.ACTIVE_EDITOR_INPUT_NAME));
if (resource != null) {
return new StructuredSelection(resource);
}
}
if (selection instanceof IStructuredSelection) {
return (IStructuredSelection) selection;
}
return StructuredSelection.EMPTY;
}
private static IEvaluationContext getEvaluationContext() {
IWorkbenchWindow activeWindow = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
if (activeWindow == null) {
return null;
}
IHandlerService service = (IHandlerService) activeWindow.getService(IHandlerService.class);
return service.getCurrentState();
}
/**
* Returns the selected resources.
*/
protected Collection<IResource> getSelectedResources() {
return getSelectedResources(getSelection());
}
/**
* Returns the selected resources.
*/
protected Collection<IResource> getSelectedResources(ExecutionEvent event) throws ExecutionException {
IStructuredSelection selection = getSelection(event);
return getSelectedResources(selection);
}
private static Collection<IResource> getSelectedResources(IStructuredSelection selection) {
Set<IResource> result = new LinkedHashSet<IResource>();
for (Object obj : selection.toList()) {
IResource resource = AdapterUtil.adapt(obj, IResource.class);
if (resource != null) {
result.add(resource);
} else {
result.addAll(extractResourcesFromMapping(obj));
}
}
return result;
}
/**
* Extracts resources associated with a {@link ResourceMapping}.
*
* @param obj an object adaptable to {@link ResourceMapping}
* @return a list of resources associated with the mapping
*/
private static List<IResource> extractResourcesFromMapping(Object obj) {
ResourceMapping mapping = AdapterUtil.adapt(obj, ResourceMapping.class);
if (mapping != null) {
try {
ResourceTraversal[] traversals = mapping.getTraversals(null, null);
for (ResourceTraversal traversal : traversals) {
return Arrays.asList(traversal.getResources());
}
} catch (CoreException e) {
CUIPlugin.log(e);
}
}
return Collections.emptyList();
}
}

View file

@ -1,5 +1,5 @@
/*******************************************************************************
* Copyright (c) 2007, 2009 Intel Corporation and others.
* Copyright (c) 2007, 2014 Intel Corporation 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
@ -10,65 +10,13 @@
*******************************************************************************/
package org.eclipse.cdt.ui.newui;
import java.util.Arrays;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.runtime.preferences.IEclipsePreferences;
import org.eclipse.core.runtime.preferences.InstanceScope;
import org.osgi.service.prefs.BackingStoreException;
import org.eclipse.cdt.core.model.CoreModel;
import org.eclipse.cdt.core.model.ITranslationUnit;
import org.eclipse.cdt.ui.CUIPlugin;
/**
* Property tester to test expressions in plugin.xml. Tests following expressions:
* 1. Checks whether given object is a source file. Usage:
* <test property="org.eclipse.cdt.ui.isSource"/>
* 2. Checks value of a preference. Usage:
* <test property="org.eclipse.cdt.ui.checkPreference" value="org.eclipse.cdt.ui:properties.export.page.enable=true"/>
*
* @deprecated Doesn't do anything useful.
* @noextend This class is not intended to be subclassed by clients.
*/
public class PropertyTester extends org.eclipse.core.expressions.PropertyTester {
private static final String KEY_SRC = "isSource"; //$NON-NLS-1$
private static final String KEY_PREF = "checkPreference"; //$NON-NLS-1$
@Override
public boolean test(Object receiver, String property, Object[] args, Object expectedValue) {
if (KEY_SRC.equals(property)) {
if (receiver instanceof ITranslationUnit) {
return ((ITranslationUnit) receiver).isSourceUnit();
} else if (receiver instanceof IFile) {
IFile file = (IFile) receiver;
return CoreModel.isValidSourceUnitName(file.getProject(), file.getName());
}
} else if (KEY_PREF.equals(property) && expectedValue instanceof String) {
boolean result = false;
final Pattern pat = Pattern.compile("(.*):(.*)=(.*)"); //$NON-NLS-1$
Matcher matcher = pat.matcher((String) expectedValue);
if (matcher.matches()) {
String pluginId = matcher.group(1);
String preference = matcher.group(2);
String wantedValue = matcher.group(3);
IEclipsePreferences node = InstanceScope.INSTANCE.getNode(pluginId);
if (wantedValue != null) {
String actualValue = node.get(preference, ""); //$NON-NLS-1$
result = wantedValue.equals(actualValue) || (wantedValue.equals("false") && actualValue.isEmpty()); //$NON-NLS-1$
} else {
try {
result = Arrays.asList(node.keys()).contains(preference);
} catch (BackingStoreException e) {
CUIPlugin.log(e);
}
}
}
return result;
}
return false;
}
}