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.IManagedProject;
|
||||
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.ManagedBuildManager;
|
||||
import org.eclipse.cdt.managedbuilder.macros.IBuildMacroProvider;
|
||||
|
@ -179,6 +180,15 @@ public class BuildfileMacroSubstitutor extends SupplierBasedCdtVariableSubstitut
|
|||
} else if (contextData instanceof IBuilder){
|
||||
builder = (IBuilder)contextData;
|
||||
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;
|
||||
|
@ -210,7 +220,8 @@ public class BuildfileMacroSubstitutor extends SupplierBasedCdtVariableSubstitut
|
|||
if(fConfiguration != null && fBuilder != null &&
|
||||
fBuilder.keepEnvironmentVariablesInBuildfile() &&
|
||||
fVarMngr.isEnvironmentVariable(macro, fCfgDes) &&
|
||||
!CdtVariableResolver.isStringListVariable(macro.getValueType())){
|
||||
(!CdtVariableResolver.isStringListVariable(macro.getValueType())
|
||||
|| size(macro.getStringListValue()) < 2)){
|
||||
String ref = getMacroReference(macro);
|
||||
if(ref != null)
|
||||
resolved = new ResolvedMacro(macro.getName(),ref);
|
||||
|
@ -221,6 +232,10 @@ public class BuildfileMacroSubstitutor extends SupplierBasedCdtVariableSubstitut
|
|||
return super.resolveMacro(macro);
|
||||
}
|
||||
|
||||
private static int size(String[] value){
|
||||
return value != null ? value.length : 0;
|
||||
}
|
||||
|
||||
public IConfiguration getConfiguration(){
|
||||
return fConfiguration;
|
||||
}
|
||||
|
@ -264,7 +279,8 @@ public class BuildfileMacroSubstitutor extends SupplierBasedCdtVariableSubstitut
|
|||
public void setMacroContextInfo(IVariableContextInfo info)
|
||||
throws CdtVariableException{
|
||||
super.setMacroContextInfo(info);
|
||||
// init();
|
||||
if(info instanceof IMacroContextInfo)
|
||||
init(null, (IMacroContextInfo)info);
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
|
|
|
@ -10,10 +10,13 @@
|
|||
*******************************************************************************/
|
||||
package org.eclipse.cdt.internal.core.cdtvariables;
|
||||
|
||||
import java.util.Arrays;
|
||||
|
||||
import org.eclipse.cdt.core.cdtvariables.CdtVariableException;
|
||||
import org.eclipse.cdt.core.cdtvariables.ICdtVariable;
|
||||
import org.eclipse.cdt.core.cdtvariables.ICdtVariableManager;
|
||||
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.settings.model.CConfigurationDescriptionCache;
|
||||
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.IVariableSubstitutor;
|
||||
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;
|
||||
|
||||
/**
|
||||
|
@ -30,12 +35,12 @@ import org.eclipse.core.variables.IStringVariable;
|
|||
public class CdtVariableManager implements ICdtVariableManager {
|
||||
static private CdtVariableManager fDefault;
|
||||
|
||||
public static UserDefinedVariableSupplier fUserDefinedMacroSupplier = UserDefinedVariableSupplier.getInstance();
|
||||
public static BuildSystemVariableSupplier fBuildSystemVariableSupplier = BuildSystemVariableSupplier.getInstance();
|
||||
public static EnvironmentVariableSupplier fEnvironmentMacroSupplier = EnvironmentVariableSupplier.getInstance();
|
||||
public static CdtMacroSupplier fCdtMacroSupplier = CdtMacroSupplier.getInstance();
|
||||
public static EclipseVariablesVariableSupplier fEclipseVariablesMacroSupplier = EclipseVariablesVariableSupplier.getInstance();
|
||||
|
||||
public static final UserDefinedVariableSupplier fUserDefinedMacroSupplier = UserDefinedVariableSupplier.getInstance();
|
||||
public static final BuildSystemVariableSupplier fBuildSystemVariableSupplier = BuildSystemVariableSupplier.getInstance();
|
||||
public static final EnvironmentVariableSupplier fEnvironmentMacroSupplier = EnvironmentVariableSupplier.getInstance();
|
||||
public static final CdtMacroSupplier fCdtMacroSupplier = CdtMacroSupplier.getInstance();
|
||||
public static final EclipseVariablesVariableSupplier fEclipseVariablesMacroSupplier = EclipseVariablesVariableSupplier.getInstance();
|
||||
|
||||
protected CdtVariableManager(){
|
||||
|
||||
}
|
||||
|
@ -58,6 +63,11 @@ public class CdtVariableManager implements ICdtVariableManager {
|
|||
return SupplierBasedCdtVariableManager.getVariable(macroName,
|
||||
getMacroContextInfo(type,cfg),true);
|
||||
}
|
||||
|
||||
private IVariableContextInfo getVariableContextInfo(ICConfigurationDescription cfg){
|
||||
int type = getContextType(cfg);
|
||||
return getMacroContextInfo(type,cfg);
|
||||
}
|
||||
|
||||
/* (non-Javadoc)
|
||||
* @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,
|
||||
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,
|
||||
|
|
Loading…
Add table
Reference in a new issue