mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-04-29 19:45:01 +02:00
Fix for cdt variable (Build Macros) functionality
This commit is contained in:
parent
d09c6cad1e
commit
42b622ae87
2 changed files with 73 additions and 9 deletions
|
@ -27,6 +27,7 @@ import org.eclipse.cdt.managedbuilder.core.IInputType;
|
||||||
import org.eclipse.cdt.managedbuilder.core.IManagedBuildInfo;
|
import org.eclipse.cdt.managedbuilder.core.IManagedBuildInfo;
|
||||||
import org.eclipse.cdt.managedbuilder.core.IManagedProject;
|
import org.eclipse.cdt.managedbuilder.core.IManagedProject;
|
||||||
import org.eclipse.cdt.managedbuilder.core.IOutputType;
|
import org.eclipse.cdt.managedbuilder.core.IOutputType;
|
||||||
|
import org.eclipse.cdt.managedbuilder.core.IResourceInfo;
|
||||||
import org.eclipse.cdt.managedbuilder.core.ITool;
|
import org.eclipse.cdt.managedbuilder.core.ITool;
|
||||||
import org.eclipse.cdt.managedbuilder.core.ManagedBuildManager;
|
import org.eclipse.cdt.managedbuilder.core.ManagedBuildManager;
|
||||||
import org.eclipse.cdt.managedbuilder.macros.IBuildMacroProvider;
|
import org.eclipse.cdt.managedbuilder.macros.IBuildMacroProvider;
|
||||||
|
@ -179,6 +180,15 @@ public class BuildfileMacroSubstitutor extends SupplierBasedCdtVariableSubstitut
|
||||||
} else if (contextData instanceof IBuilder){
|
} else if (contextData instanceof IBuilder){
|
||||||
builder = (IBuilder)contextData;
|
builder = (IBuilder)contextData;
|
||||||
cfg = builder.getParent().getParent();
|
cfg = builder.getParent().getParent();
|
||||||
|
} else if (contextData instanceof ITool) {
|
||||||
|
ITool tool = (ITool)contextData;
|
||||||
|
IResourceInfo rcInfo = tool.getParentResourceInfo();
|
||||||
|
if(rcInfo != null){
|
||||||
|
cfg = rcInfo.getParent();
|
||||||
|
if(cfg != null){
|
||||||
|
builder = cfg.getBuilder();
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -210,7 +220,8 @@ public class BuildfileMacroSubstitutor extends SupplierBasedCdtVariableSubstitut
|
||||||
if(fConfiguration != null && fBuilder != null &&
|
if(fConfiguration != null && fBuilder != null &&
|
||||||
fBuilder.keepEnvironmentVariablesInBuildfile() &&
|
fBuilder.keepEnvironmentVariablesInBuildfile() &&
|
||||||
fVarMngr.isEnvironmentVariable(macro, fCfgDes) &&
|
fVarMngr.isEnvironmentVariable(macro, fCfgDes) &&
|
||||||
!CdtVariableResolver.isStringListVariable(macro.getValueType())){
|
(!CdtVariableResolver.isStringListVariable(macro.getValueType())
|
||||||
|
|| size(macro.getStringListValue()) < 2)){
|
||||||
String ref = getMacroReference(macro);
|
String ref = getMacroReference(macro);
|
||||||
if(ref != null)
|
if(ref != null)
|
||||||
resolved = new ResolvedMacro(macro.getName(),ref);
|
resolved = new ResolvedMacro(macro.getName(),ref);
|
||||||
|
@ -221,6 +232,10 @@ public class BuildfileMacroSubstitutor extends SupplierBasedCdtVariableSubstitut
|
||||||
return super.resolveMacro(macro);
|
return super.resolveMacro(macro);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static int size(String[] value){
|
||||||
|
return value != null ? value.length : 0;
|
||||||
|
}
|
||||||
|
|
||||||
public IConfiguration getConfiguration(){
|
public IConfiguration getConfiguration(){
|
||||||
return fConfiguration;
|
return fConfiguration;
|
||||||
}
|
}
|
||||||
|
@ -264,7 +279,8 @@ public class BuildfileMacroSubstitutor extends SupplierBasedCdtVariableSubstitut
|
||||||
public void setMacroContextInfo(IVariableContextInfo info)
|
public void setMacroContextInfo(IVariableContextInfo info)
|
||||||
throws CdtVariableException{
|
throws CdtVariableException{
|
||||||
super.setMacroContextInfo(info);
|
super.setMacroContextInfo(info);
|
||||||
// init();
|
if(info instanceof IMacroContextInfo)
|
||||||
|
init(null, (IMacroContextInfo)info);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* (non-Javadoc)
|
/* (non-Javadoc)
|
||||||
|
|
|
@ -10,10 +10,13 @@
|
||||||
*******************************************************************************/
|
*******************************************************************************/
|
||||||
package org.eclipse.cdt.internal.core.cdtvariables;
|
package org.eclipse.cdt.internal.core.cdtvariables;
|
||||||
|
|
||||||
|
import java.util.Arrays;
|
||||||
|
|
||||||
import org.eclipse.cdt.core.cdtvariables.CdtVariableException;
|
import org.eclipse.cdt.core.cdtvariables.CdtVariableException;
|
||||||
import org.eclipse.cdt.core.cdtvariables.ICdtVariable;
|
import org.eclipse.cdt.core.cdtvariables.ICdtVariable;
|
||||||
import org.eclipse.cdt.core.cdtvariables.ICdtVariableManager;
|
import org.eclipse.cdt.core.cdtvariables.ICdtVariableManager;
|
||||||
import org.eclipse.cdt.core.settings.model.ICConfigurationDescription;
|
import org.eclipse.cdt.core.settings.model.ICConfigurationDescription;
|
||||||
|
import org.eclipse.cdt.core.settings.model.util.CDataUtil;
|
||||||
import org.eclipse.cdt.internal.core.cdtvariables.EclipseVariablesVariableSupplier.EclipseVarMacro;
|
import org.eclipse.cdt.internal.core.cdtvariables.EclipseVariablesVariableSupplier.EclipseVarMacro;
|
||||||
import org.eclipse.cdt.internal.core.settings.model.CConfigurationDescriptionCache;
|
import org.eclipse.cdt.internal.core.settings.model.CConfigurationDescriptionCache;
|
||||||
import org.eclipse.cdt.utils.cdtvariables.CdtVariableResolver;
|
import org.eclipse.cdt.utils.cdtvariables.CdtVariableResolver;
|
||||||
|
@ -21,6 +24,8 @@ import org.eclipse.cdt.utils.cdtvariables.ICdtVariableSupplier;
|
||||||
import org.eclipse.cdt.utils.cdtvariables.IVariableContextInfo;
|
import org.eclipse.cdt.utils.cdtvariables.IVariableContextInfo;
|
||||||
import org.eclipse.cdt.utils.cdtvariables.IVariableSubstitutor;
|
import org.eclipse.cdt.utils.cdtvariables.IVariableSubstitutor;
|
||||||
import org.eclipse.cdt.utils.cdtvariables.SupplierBasedCdtVariableManager;
|
import org.eclipse.cdt.utils.cdtvariables.SupplierBasedCdtVariableManager;
|
||||||
|
import org.eclipse.core.internal.events.BuildManager;
|
||||||
|
import org.eclipse.core.internal.localstore.IsSynchronizedVisitor;
|
||||||
import org.eclipse.core.variables.IStringVariable;
|
import org.eclipse.core.variables.IStringVariable;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -30,12 +35,12 @@ import org.eclipse.core.variables.IStringVariable;
|
||||||
public class CdtVariableManager implements ICdtVariableManager {
|
public class CdtVariableManager implements ICdtVariableManager {
|
||||||
static private CdtVariableManager fDefault;
|
static private CdtVariableManager fDefault;
|
||||||
|
|
||||||
public static UserDefinedVariableSupplier fUserDefinedMacroSupplier = UserDefinedVariableSupplier.getInstance();
|
public static final UserDefinedVariableSupplier fUserDefinedMacroSupplier = UserDefinedVariableSupplier.getInstance();
|
||||||
public static BuildSystemVariableSupplier fBuildSystemVariableSupplier = BuildSystemVariableSupplier.getInstance();
|
public static final BuildSystemVariableSupplier fBuildSystemVariableSupplier = BuildSystemVariableSupplier.getInstance();
|
||||||
public static EnvironmentVariableSupplier fEnvironmentMacroSupplier = EnvironmentVariableSupplier.getInstance();
|
public static final EnvironmentVariableSupplier fEnvironmentMacroSupplier = EnvironmentVariableSupplier.getInstance();
|
||||||
public static CdtMacroSupplier fCdtMacroSupplier = CdtMacroSupplier.getInstance();
|
public static final CdtMacroSupplier fCdtMacroSupplier = CdtMacroSupplier.getInstance();
|
||||||
public static EclipseVariablesVariableSupplier fEclipseVariablesMacroSupplier = EclipseVariablesVariableSupplier.getInstance();
|
public static final EclipseVariablesVariableSupplier fEclipseVariablesMacroSupplier = EclipseVariablesVariableSupplier.getInstance();
|
||||||
|
|
||||||
protected CdtVariableManager(){
|
protected CdtVariableManager(){
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -58,6 +63,11 @@ public class CdtVariableManager implements ICdtVariableManager {
|
||||||
return SupplierBasedCdtVariableManager.getVariable(macroName,
|
return SupplierBasedCdtVariableManager.getVariable(macroName,
|
||||||
getMacroContextInfo(type,cfg),true);
|
getMacroContextInfo(type,cfg),true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private IVariableContextInfo getVariableContextInfo(ICConfigurationDescription cfg){
|
||||||
|
int type = getContextType(cfg);
|
||||||
|
return getMacroContextInfo(type,cfg);
|
||||||
|
}
|
||||||
|
|
||||||
/* (non-Javadoc)
|
/* (non-Javadoc)
|
||||||
* @see org.eclipse.cdt.managedbuilder.macros.IBuildMacroProvider#getMacros(int, java.lang.Object, boolean)
|
* @see org.eclipse.cdt.managedbuilder.macros.IBuildMacroProvider#getMacros(int, java.lang.Object, boolean)
|
||||||
|
@ -187,7 +197,45 @@ public class CdtVariableManager implements ICdtVariableManager {
|
||||||
|
|
||||||
public boolean isEnvironmentVariable(ICdtVariable variable,
|
public boolean isEnvironmentVariable(ICdtVariable variable,
|
||||||
ICConfigurationDescription cfg) {
|
ICConfigurationDescription cfg) {
|
||||||
return variable instanceof EnvironmentVariableSupplier.EnvVarMacro;
|
if(variable instanceof EnvironmentVariableSupplier.EnvVarMacro)
|
||||||
|
return true;
|
||||||
|
|
||||||
|
IVariableContextInfo info = getVariableContextInfo(cfg);
|
||||||
|
ICdtVariable var = fEnvironmentMacroSupplier.getVariable(variable.getName(), info);
|
||||||
|
if(var != null && variablesEqual(var, variable))
|
||||||
|
return true;
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static boolean variablesEqual(ICdtVariable var1, ICdtVariable var2){
|
||||||
|
if(CDataUtil.objectsEqual(var1, var2))
|
||||||
|
return true;
|
||||||
|
|
||||||
|
if(var1 == null || var2 == null)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
if(var1.getValueType() != var2.getValueType())
|
||||||
|
return false;
|
||||||
|
|
||||||
|
if(!var1.getName().equals(var2.getName()))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
try {
|
||||||
|
if(CdtVariableResolver.isStringListVariable(var1.getValueType())){
|
||||||
|
String[] v1 = var1.getStringListValue();
|
||||||
|
String[] v2 = var2.getStringListValue();
|
||||||
|
if(!Arrays.equals(v1, v2))
|
||||||
|
return false;
|
||||||
|
} else {
|
||||||
|
if(!CDataUtil.objectsEqual(var1.getStringValue(), var2.getStringValue()))
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
} catch (CdtVariableException e){
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public IStringVariable toEclipseVariable(ICdtVariable variable,
|
public IStringVariable toEclipseVariable(ICdtVariable variable,
|
||||||
|
|
Loading…
Add table
Reference in a new issue