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

bug 402023: Provide programmatic access for names of CdtMacroSupplier variables ($ProjName, $ConfigName etc.)

This commit is contained in:
Andrew Gvozdev 2013-05-20 11:34:06 -04:00
parent 75e17131c0
commit 2d5584fe98
6 changed files with 111 additions and 67 deletions

View file

@ -48,6 +48,7 @@ import org.eclipse.cdt.managedbuilder.core.IToolChain;
import org.eclipse.cdt.managedbuilder.core.ManagedBuildManager;
import org.eclipse.cdt.managedbuilder.core.ManagedBuilderCorePlugin;
import org.eclipse.cdt.managedbuilder.core.ManagedCProjectNature;
import org.eclipse.cdt.utils.cdtvariables.CdtVariableResolver;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IFolder;
import org.eclipse.core.resources.IProject;
@ -519,7 +520,7 @@ public class ManagedBuildTestHelper {
final String INCLUDE_PATTERN = "-include \\$\\(.*\\)";
final String MACRO_PATTERN = "\\S* [:+]=.*";
final String EMPTY_MACRO_PATTERN = "\\S* :=";
final String WORKSPACE_DIR_STR = "${WorkspaceDirPath}";
final String WORKSPACE_DIR_STR = CdtVariableResolver.createVariableReference(CdtVariableResolver.VAR_WORKSPACE_DIR_PATH);
ArrayList<String> testArray = mergeContinuationLines(getContents(testFile));
ArrayList<String> benchmarkArray = mergeContinuationLines(getContents(benchmarkFile));

View file

@ -34,6 +34,7 @@ import org.eclipse.cdt.managedbuilder.core.IManagedProject;
import org.eclipse.cdt.managedbuilder.core.IProjectType;
import org.eclipse.cdt.managedbuilder.core.ManagedBuildManager;
import org.eclipse.cdt.managedbuilder.core.ManagedBuilderCorePlugin;
import org.eclipse.cdt.utils.cdtvariables.CdtVariableResolver;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.CoreException;
import org.osgi.framework.Version;
@ -422,7 +423,7 @@ public class ManagedProject extends BuildObject implements IManagedProject, IBui
*/
@Override
public String getDefaultArtifactName(){
return "${ProjName}"; //$NON-NLS-1$
return CdtVariableResolver.createVariableReference(CdtVariableResolver.VAR_PROJ_NAME);
}
/* (non-Javadoc)

View file

@ -80,8 +80,8 @@ public class MbsMacroSupplier extends BuildCdtVariablesSupplierBase {
};
private static final String fConfigurationMacros[] = new String[]{
// "ConfigName", //$NON-NLS-1$
// "ConfigDescription", //$NON-NLS-1$
// CdtVariableResolver.VAR_CONFIG_NAME,
// CdtVariableResolver.VAR_CONFIG_DESCRIPTION,
"BuildArtifactFileName", //$NON-NLS-1$
"BuildArtifactFileExt", //$NON-NLS-1$
"BuildArtifactFileBaseName", //$NON-NLS-1$
@ -93,24 +93,24 @@ public class MbsMacroSupplier extends BuildCdtVariablesSupplierBase {
};
private static final String fProjectMacros[] = new String[]{
// "ProjName", //$NON-NLS-1$
// "ProjDirPath", //$NON-NLS-1$
// CdtVariableResolver.VAR_PROJ_NAME,
// CdtVariableResolver.VAR_PROJ_DIR_PATH,
};
private static final String fWorkspaceMacros[] = new String[]{
// "WorkspaceDirPath", //$NON-NLS-1$
// "DirectoryDelimiter", //$NON-NLS-1$
// "PathDelimiter", //$NON-NLS-1$
// CdtVariableResolver.VAR_WORKSPACE_DIR_PATH,
// CdtVariableResolver.VAR_DIRECTORY_DELIMITER,
// CdtVariableResolver.VAR_PATH_DELIMITER,
};
private static final String fCDTEclipseMacros[] = new String[]{
// "EclipseVersion", //$NON-NLS-1$
// "CDTVersion", //$NON-NLS-1$
// CdtVariableResolver.VAR_ECLIPSE_VERSION,
// CdtVariableResolver.VAR_CDT_VERSION,
"MBSVersion", //$NON-NLS-1$
// "HostOsName", //$NON-NLS-1$
// "HostArchName", //$NON-NLS-1$
// "OsType", //$NON-NLS-1$
// "ArchType", //$NON-NLS-1$
// CdtVariableResolver.VAR_HOST_OS_NAME,
// CdtVariableResolver.VAR_HOST_ARCH_NAME,
// CdtVariableResolver.VAR_HOST_OS_TYPE,
// CdtVariableResolver.VAR_HOST_ARCH_TYPE,
};
private class OptionData extends OptionContextData {
@ -419,10 +419,10 @@ public class MbsMacroSupplier extends BuildCdtVariablesSupplierBase {
public IBuildMacro getMacro(String macroName, IBuilder builder, IConfiguration cfg){
IBuildMacro macro = null;
if("ConfigName".equals(macroName)){ //$NON-NLS-1$
if (CdtVariableResolver.VAR_CONFIG_NAME.equals(macroName)) {
macro = new BuildMacro(macroName,IBuildMacro.VALUE_TEXT,cfg.getName());
}
else if("ConfigDescription".equals(macroName)){ //$NON-NLS-1$
else if (CdtVariableResolver.VAR_CONFIG_DESCRIPTION.equals(macroName)){
macro = new BuildMacro(macroName,IBuildMacro.VALUE_TEXT,cfg.getDescription());
}
else if("BuildArtifactFileName".equals(macroName)){ //$NON-NLS-1$
@ -604,10 +604,10 @@ public class MbsMacroSupplier extends BuildCdtVariablesSupplierBase {
public IBuildMacro getMacro(String macroName, IManagedProject mngProj){
IBuildMacro macro = null;
if("ProjName".equals(macroName)){ //$NON-NLS-1$
if(CdtVariableResolver.VAR_PROJ_NAME.equals(macroName)){
macro = new BuildMacro(macroName,IBuildMacro.VALUE_TEXT,mngProj.getOwner().getName());
}
else if("ProjDirPath".equals(macroName)){ //$NON-NLS-1$
else if(CdtVariableResolver.VAR_PROJ_DIR_PATH.equals(macroName)){
macro = new BuildMacro(macroName,IBuildMacro.VALUE_PATH_DIR,mngProj.getOwner().getLocation().toOSString());
}
return macro;
@ -615,15 +615,15 @@ public class MbsMacroSupplier extends BuildCdtVariablesSupplierBase {
public IBuildMacro getMacro(String macroName, IWorkspace wsp){
IBuildMacro macro = null;
if("WorkspaceDirPath".equals(macroName)){ //$NON-NLS-1$
if (CdtVariableResolver.VAR_WORKSPACE_DIR_PATH.equals(macroName)) {
macro = new BuildMacro(macroName,IBuildMacro.VALUE_PATH_DIR,wsp.getRoot().getLocation().toOSString());
} else if("DirectoryDelimiter".equals(macroName)){ //$NON-NLS-1$
} else if (CdtVariableResolver.VAR_DIRECTORY_DELIMITER.equals(macroName)) {
if(isWin32()){
macro = new BuildMacro(macroName,IBuildMacro.VALUE_TEXT,"\\"); //$NON-NLS-1$
} else {
macro = new BuildMacro(macroName,IBuildMacro.VALUE_TEXT,"/"); //$NON-NLS-1$
}
} else if("PathDelimiter".equals(macroName)){ //$NON-NLS-1$
} else if (CdtVariableResolver.VAR_PATH_DELIMITER.equals(macroName)) {
if(isWin32()){
macro = new BuildMacro(macroName,IBuildMacro.VALUE_TEXT,";"); //$NON-NLS-1$
} else {
@ -642,34 +642,34 @@ public class MbsMacroSupplier extends BuildCdtVariablesSupplierBase {
public IBuildMacro getMacro(String macroName){
IBuildMacro macro = null;
if("EclipseVersion".equals(macroName)){ //$NON-NLS-1$
if (CdtVariableResolver.VAR_ECLIPSE_VERSION.equals(macroName)) {
Bundle bundle = Platform.getBundle("org.eclipse.platform"); //$NON-NLS-1$
String version = bundle != null ?
(String)bundle.getHeaders().get(org.osgi.framework.Constants.BUNDLE_VERSION) :
null;
macro = new BuildMacro(macroName,IBuildMacro.VALUE_TEXT,version);
}
else if("CDTVersion".equals(macroName)){ //$NON-NLS-1$
else if (CdtVariableResolver.VAR_CDT_VERSION.equals(macroName)) {
String version = CCorePlugin.getDefault().getBundle().getHeaders().get(org.osgi.framework.Constants.BUNDLE_VERSION);
macro = new BuildMacro(macroName,IBuildMacro.VALUE_TEXT,version);
}
else if("MBSVersion".equals(macroName)){ //$NON-NLS-1$
else if ("MBSVersion".equals(macroName)) { //$NON-NLS-1$
String version = ManagedBuildManager.getBuildInfoVersion().toString();
macro = new BuildMacro(macroName,IBuildMacro.VALUE_TEXT,version);
}
else if("HostOsName".equals(macroName)){ //$NON-NLS-1$
else if (CdtVariableResolver.VAR_HOST_OS_NAME.equals(macroName)) {
String os = System.getProperty("os.name"); //$NON-NLS-1$
macro = new BuildMacro(macroName,IBuildMacro.VALUE_TEXT,os);
}
else if("HostArchName".equals(macroName)){ //$NON-NLS-1$
else if (CdtVariableResolver.VAR_HOST_ARCH_NAME.equals(macroName)) {
String arch = System.getProperty("os.arch"); //$NON-NLS-1$
macro = new BuildMacro(macroName,IBuildMacro.VALUE_TEXT,arch);
}
else if("OsType".equals(macroName)){ //$NON-NLS-1$
else if (CdtVariableResolver.VAR_OS_TYPE.equals(macroName)) {
String os = Platform.getOS();
macro = new BuildMacro(macroName,IBuildMacro.VALUE_TEXT,os);
}
else if("ArchType".equals(macroName)){ //$NON-NLS-1$
else if (CdtVariableResolver.VAR_ARCH_TYPE.equals(macroName)) {
String arch = Platform.getOSArch();
macro = new BuildMacro(macroName,IBuildMacro.VALUE_TEXT,arch);
}

View file

@ -1,5 +1,5 @@
/*******************************************************************************
* Copyright (c) 2005, 2008 Intel Corporation and others.
* Copyright (c) 2005, 2013 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
@ -27,15 +27,27 @@ import org.osgi.framework.Bundle;
* @since 3.0
*/
public class CdtMacroSupplier extends CoreMacroSupplierBase {
public static final String VAR_CONFIG_NAME = "ConfigName"; //$NON-NLS-1$
public static final String VAR_CONFIG_DESCRIPTION = "ConfigDescription"; //$NON-NLS-1$
public static final String VAR_PROJ_NAME = "ProjName"; //$NON-NLS-1$
public static final String VAR_PROJ_DIR_PATH = "ProjDirPath"; //$NON-NLS-1$
public static final String VAR_WORKSPACE_DIR_PATH = "WorkspaceDirPath"; //$NON-NLS-1$
public static final String VAR_DIRECTORY_DELIMITER = "DirectoryDelimiter"; //$NON-NLS-1$
public static final String VAR_PATH_DELIMITER = "PathDelimiter"; //$NON-NLS-1$
public static final String VAR_ECLIPSE_VERSION = "EclipseVersion"; //$NON-NLS-1$
public static final String VAR_CDT_VERSION = "CDTVersion"; //$NON-NLS-1$
public static final String VAR_HOST_OS_NAME = "HostOsName"; //$NON-NLS-1$
public static final String VAR_HOST_ARCH_NAME = "HostArchName"; //$NON-NLS-1$
public static final String VAR_OS_TYPE = "OsType"; //$NON-NLS-1$
public static final String VAR_ARCH_TYPE = "ArchType"; //$NON-NLS-1$
private static CdtMacroSupplier fInstance;
public final static String DOT = "."; //$NON-NLS-1$
public final static String EMPTY_STRING = ""; //$NON-NLS-1$
private static final String fConfigurationMacros[] = new String[]{
"ConfigName", //$NON-NLS-1$
"ConfigDescription", //$NON-NLS-1$
"ProjName", //$NON-NLS-1$
"ProjDirPath", //$NON-NLS-1$
private static final String fConfigurationMacros[] = new String[] {
VAR_CONFIG_NAME,
VAR_CONFIG_DESCRIPTION,
VAR_PROJ_NAME,
VAR_PROJ_DIR_PATH,
// "BuildArtifactFileName", //$NON-NLS-1$
// "BuildArtifactFileExt", //$NON-NLS-1$
// "BuildArtifactFileBaseName", //$NON-NLS-1$
@ -44,20 +56,20 @@ public class CdtMacroSupplier extends CoreMacroSupplierBase {
// "TargetArchList", //$NON-NLS-1$
};
private static final String fWorkspaceMacros[] = new String[]{
"WorkspaceDirPath", //$NON-NLS-1$
"DirectoryDelimiter", //$NON-NLS-1$
"PathDelimiter", //$NON-NLS-1$
private static final String fWorkspaceMacros[] = new String[] {
VAR_WORKSPACE_DIR_PATH,
VAR_DIRECTORY_DELIMITER,
VAR_PATH_DELIMITER,
};
private static final String fCDTEclipseMacros[] = new String[]{
"EclipseVersion", //$NON-NLS-1$
"CDTVersion", //$NON-NLS-1$
private static final String fCDTEclipseMacros[] = new String[] {
VAR_ECLIPSE_VERSION,
VAR_CDT_VERSION,
// "MBSVersion", //$NON-NLS-1$
"HostOsName", //$NON-NLS-1$
"HostArchName", //$NON-NLS-1$
"OsType", //$NON-NLS-1$
"ArchType", //$NON-NLS-1$
VAR_HOST_OS_NAME,
VAR_HOST_ARCH_NAME,
VAR_OS_TYPE,
VAR_ARCH_TYPE,
};
@ -195,16 +207,16 @@ public class CdtMacroSupplier extends CoreMacroSupplierBase {
public ICdtVariable getMacro(String macroName, ICConfigurationDescription cfg){
ICdtVariable macro = null;
if("ConfigName".equals(macroName)){ //$NON-NLS-1$
if (VAR_CONFIG_NAME.equals(macroName)) {
macro = new CdtVariable(macroName,ICdtVariable.VALUE_TEXT,cfg.getName());
}
else if("ConfigDescription".equals(macroName)){ //$NON-NLS-1$
else if (VAR_CONFIG_DESCRIPTION.equals(macroName)) {
macro = new CdtVariable(macroName,ICdtVariable.VALUE_TEXT,cfg.getDescription());
} else if("ProjName".equals(macroName)){ //$NON-NLS-1$
} else if (VAR_PROJ_NAME.equals(macroName)) {
IProject project = getProject(cfg);
if(project != null)
macro = new CdtVariable(macroName,ICdtVariable.VALUE_TEXT,project.getName());
} else if("ProjDirPath".equals(macroName)){ //$NON-NLS-1$
} else if (VAR_PROJ_DIR_PATH.equals(macroName)) {
IProject project = getProject(cfg);
if(project != null && project.getLocation() != null) // in the EFS world getLocation() can return null
macro = new CdtVariable(macroName,ICdtVariable.VALUE_TEXT,project.getLocation().toString());
@ -388,10 +400,10 @@ public class CdtMacroSupplier extends CoreMacroSupplierBase {
/* public IBuildMacro getMacro(String macroName, IManagedProject mngProj){
IBuildMacro macro = null;
if("ProjName".equals(macroName)){ //$NON-NLS-1$
if (VAR_PROJ_NAME.equals(macroName)) {
macro = new BuildMacro(macroName,IBuildMacro.VALUE_TEXT,mngProj.getOwner().getName());
}
else if("ProjDirPath".equals(macroName)){ //$NON-NLS-1$
else if (VAR_PROJ_DIR_PATH.equals(macroName)) {
macro = new BuildMacro(macroName,IBuildMacro.VALUE_PATH_DIR,mngProj.getOwner().getLocation().toOSString());
}
return macro;
@ -401,15 +413,15 @@ public class CdtMacroSupplier extends CoreMacroSupplierBase {
if(wsp == null)
wsp = ResourcesPlugin.getWorkspace();
ICdtVariable macro = null;
if("WorkspaceDirPath".equals(macroName)){ //$NON-NLS-1$
if (VAR_WORKSPACE_DIR_PATH.equals(macroName)) {
macro = new CdtVariable(macroName,ICdtVariable.VALUE_PATH_DIR,wsp.getRoot().getLocation().toOSString());
} else if("DirectoryDelimiter".equals(macroName)){ //$NON-NLS-1$
} else if (VAR_DIRECTORY_DELIMITER.equals(macroName)) {
if(isWin32()){
macro = new CdtVariable(macroName,ICdtVariable.VALUE_TEXT,"\\"); //$NON-NLS-1$
} else {
macro = new CdtVariable(macroName,ICdtVariable.VALUE_TEXT,"/"); //$NON-NLS-1$
}
} else if("PathDelimiter".equals(macroName)){ //$NON-NLS-1$
} else if (VAR_PATH_DELIMITER.equals(macroName)) {
if(isWin32()){
macro = new CdtVariable(macroName,ICdtVariable.VALUE_TEXT,";"); //$NON-NLS-1$
} else {
@ -428,14 +440,14 @@ public class CdtMacroSupplier extends CoreMacroSupplierBase {
public ICdtVariable getMacro(String macroName){
ICdtVariable macro = null;
if("EclipseVersion".equals(macroName)){ //$NON-NLS-1$
if (VAR_ECLIPSE_VERSION.equals(macroName)) {
Bundle bundle = Platform.getBundle("org.eclipse.platform"); //$NON-NLS-1$
String version = bundle != null ?
(String)bundle.getHeaders().get(org.osgi.framework.Constants.BUNDLE_VERSION) :
null;
macro = new CdtVariable(macroName,ICdtVariable.VALUE_TEXT,version);
}
else if("CDTVersion".equals(macroName)){ //$NON-NLS-1$
else if (VAR_CDT_VERSION.equals(macroName)) {
String version = CCorePlugin.getDefault().getBundle().getHeaders().get(org.osgi.framework.Constants.BUNDLE_VERSION);
macro = new CdtVariable(macroName,ICdtVariable.VALUE_TEXT,version);
}
@ -443,19 +455,19 @@ public class CdtMacroSupplier extends CoreMacroSupplierBase {
String version = ManagedBuildManager.getBuildInfoVersion().toString();
macro = new BuildMacro(macroName,IBuildMacro.VALUE_TEXT,version);
}*/
else if("HostOsName".equals(macroName)){ //$NON-NLS-1$
else if (VAR_HOST_OS_NAME.equals(macroName)) {
String os = System.getProperty("os.name"); //$NON-NLS-1$
macro = new CdtVariable(macroName,ICdtVariable.VALUE_TEXT,os);
}
else if("HostArchName".equals(macroName)){ //$NON-NLS-1$
else if (VAR_HOST_ARCH_NAME.equals(macroName)) {
String arch = System.getProperty("os.arch"); //$NON-NLS-1$
macro = new CdtVariable(macroName,ICdtVariable.VALUE_TEXT,arch);
}
else if("OsType".equals(macroName)){ //$NON-NLS-1$
else if (VAR_OS_TYPE.equals(macroName)) {
String os = Platform.getOS();
macro = new CdtVariable(macroName,ICdtVariable.VALUE_TEXT,os);
}
else if("ArchType".equals(macroName)){ //$NON-NLS-1$
else if (VAR_ARCH_TYPE.equals(macroName)) {
String arch = Platform.getOSArch();
macro = new CdtVariable(macroName,ICdtVariable.VALUE_TEXT,arch);
}

View file

@ -1,5 +1,5 @@
/*******************************************************************************
* Copyright (c) 2005, 2009 Intel Corporation and others.
* Copyright (c) 2005, 2013 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
@ -20,16 +20,44 @@ import java.util.regex.Pattern;
import org.eclipse.cdt.core.cdtvariables.CdtVariableException;
import org.eclipse.cdt.core.cdtvariables.ICdtVariable;
import org.eclipse.cdt.core.cdtvariables.ICdtVariableStatus;
import org.eclipse.cdt.internal.core.cdtvariables.CdtMacroSupplier;
/**
* Utility class to resolve macro references. Provides fixture to parse ${macro}
* Utility class to resolve macro and variable references. Provides fixture to parse ${macro}
* expressions and replace macros with actual values using {@link IVariableSubstitutor}.
*
* @since 3.0
*/
public class CdtVariableResolver {
/** @since 5.5 */
public static final String VAR_CONFIG_NAME = CdtMacroSupplier.VAR_CONFIG_NAME;
/** @since 5.5 */
public static final String VAR_CONFIG_DESCRIPTION = CdtMacroSupplier.VAR_CONFIG_DESCRIPTION;
/** @since 5.5 */
public static final String VAR_PROJ_NAME = CdtMacroSupplier.VAR_PROJ_NAME;
/** @since 5.5 */
public static final String VAR_PROJ_DIR_PATH = CdtMacroSupplier.VAR_PROJ_DIR_PATH;
/** @since 5.5 */
public static final String VAR_WORKSPACE_DIR_PATH = CdtMacroSupplier.VAR_WORKSPACE_DIR_PATH;
/** @since 5.5 */
public static final String VAR_DIRECTORY_DELIMITER = CdtMacroSupplier.VAR_DIRECTORY_DELIMITER;
/** @since 5.5 */
public static final String VAR_PATH_DELIMITER = CdtMacroSupplier.VAR_PATH_DELIMITER;
/** @since 5.5 */
public static final String VAR_ECLIPSE_VERSION = CdtMacroSupplier.VAR_ECLIPSE_VERSION;
/** @since 5.5 */
public static final String VAR_CDT_VERSION = CdtMacroSupplier.VAR_CDT_VERSION;
/** @since 5.5 */
public static final String VAR_HOST_OS_NAME = CdtMacroSupplier.VAR_HOST_OS_NAME;
/** @since 5.5 */
public static final String VAR_HOST_ARCH_NAME = CdtMacroSupplier.VAR_HOST_ARCH_NAME;
/** @since 5.5 */
public static final String VAR_OS_TYPE = CdtMacroSupplier.VAR_OS_TYPE;
/** @since 5.5 */
public static final String VAR_ARCH_TYPE = CdtMacroSupplier.VAR_ARCH_TYPE;
private static final String EMPTY_STRING = ""; //$NON-NLS-1$
public static final String VARIABLE_PREFIX = "${"; //$NON-NLS-1$
private static final String VARIABLE_PREFIX_MASKED = "$\1"; //$NON-NLS-1$
public static final char VARIABLE_SUFFIX = '}';

View file

@ -27,6 +27,7 @@ import org.eclipse.cdt.core.settings.model.util.CDataUtil;
import org.eclipse.cdt.ui.CDTSharedImages;
import org.eclipse.cdt.ui.CUIPlugin;
import org.eclipse.cdt.utils.UNCPathConverter;
import org.eclipse.cdt.utils.cdtvariables.CdtVariableResolver;
import org.eclipse.cdt.internal.ui.newui.Messages;
@ -34,7 +35,8 @@ import org.eclipse.cdt.internal.ui.newui.Messages;
* Helper class to provide unified images for {@link ICLanguageSettingEntry}.
*/
public class LanguageSettingsImages {
private static final String PROJ_NAME_PREFIX = "/${ProjName}/"; //$NON-NLS-1$
// evaluates to "/${ProjName)/"
private static final String PROJ_NAME_PREFIX = '/' + CdtVariableResolver.createVariableReference(CdtVariableResolver.VAR_PROJ_NAME) + '/';
/**
* Check if the language settings entry should be presented as "project-relative" in UI.