Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
[cdt-patch] Include path change notification - patch

Hi all.

Please find in attach an implemetation of "Include path change
notification" feature.

Now change of include directories (in config prefs or resource prefs) or
include-related
env. variables (config-related or global) will be reflected in project's
"Includes" folder.
-----------------------------------
With best regards, Oleg Krasilnikov
Software designer, Eclipse team.
Intel corp.
+7 8312 162 444 ext. 2587 
Index: src/org/eclipse/cdt/managedbuilder/ui/properties/BuildPreferencePage.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt-build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/properties/BuildPreferencePage.java,v
retrieving revision 1.3
diff -u -r1.3 BuildPreferencePage.java
--- src/org/eclipse/cdt/managedbuilder/ui/properties/BuildPreferencePage.java	30 May 2005 14:03:35 -0000	1.3
+++ src/org/eclipse/cdt/managedbuilder/ui/properties/BuildPreferencePage.java	8 Jun 2005 10:43:16 -0000
@@ -14,7 +14,9 @@
 import java.util.ArrayList;
 import java.util.List;
 
+import org.eclipse.cdt.managedbuilder.core.IManagedBuildInfo;
 import org.eclipse.cdt.managedbuilder.core.ManagedBuildManager;
+import org.eclipse.cdt.managedbuilder.internal.core.ManagedBuildInfo;
 import org.eclipse.cdt.managedbuilder.internal.ui.ManagedBuildOptionBlock;
 import org.eclipse.cdt.managedbuilder.internal.ui.ManagedBuilderUIMessages;
 import org.eclipse.cdt.managedbuilder.internal.ui.ManagedBuilderUIPlugin;
@@ -227,6 +229,16 @@
     			return ResourcesPlugin.FAMILY_MANUAL_BUILD.equals(family);
     		}
 			public IStatus runInWorkspace(IProgressMonitor monitor) throws CoreException {
+				
+                for(int i = 0; i < projectsToBuild.length; i++){
+                    if(ManagedBuildManager.manages(projectsToBuild [i])){
+                          IManagedBuildInfo bi = ManagedBuildManager.getBuildInfo(projectsToBuild [i]);
+                          if (bi != null & bi instanceof ManagedBuildInfo) {
+                                ((ManagedBuildInfo)bi).initializePathEntries();
+                          }
+                    }
+				}
+				
 				for(int i = 0; i < projectsToBuild.length; i++){
 					try{
 						projectsToBuild[i].build(IncrementalProjectBuilder.FULL_BUILD,monitor);
Index: src/org/eclipse/cdt/managedbuilder/ui/properties/BuildPropertyPage.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt-build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/properties/BuildPropertyPage.java,v
retrieving revision 1.28
diff -u -r1.28 BuildPropertyPage.java
--- src/org/eclipse/cdt/managedbuilder/ui/properties/BuildPropertyPage.java	19 May 2005 16:22:49 -0000	1.28
+++ src/org/eclipse/cdt/managedbuilder/ui/properties/BuildPropertyPage.java	8 Jun 2005 10:43:16 -0000
@@ -18,15 +18,17 @@
 import org.eclipse.cdt.managedbuilder.core.IManagedBuildInfo;
 import org.eclipse.cdt.managedbuilder.core.IProjectType;
 import org.eclipse.cdt.managedbuilder.core.ManagedBuildManager;
-import org.eclipse.cdt.managedbuilder.internal.ui.ManagedBuilderUIPlugin;
+import org.eclipse.cdt.managedbuilder.internal.core.ManagedBuildInfo;
 import org.eclipse.cdt.managedbuilder.internal.ui.ManagedBuildOptionBlock;
 import org.eclipse.cdt.managedbuilder.internal.ui.ManagedBuilderHelpContextIds;
 import org.eclipse.cdt.managedbuilder.internal.ui.ManagedBuilderUIMessages;
-import org.eclipse.cdt.utils.ui.controls.ControlFactory;
+import org.eclipse.cdt.managedbuilder.internal.ui.ManagedBuilderUIPlugin;
 import org.eclipse.cdt.ui.dialogs.ICOptionContainer;
+import org.eclipse.cdt.utils.ui.controls.ControlFactory;
 import org.eclipse.core.resources.IProject;
 import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.Preferences;
+import org.eclipse.jface.dialogs.DialogPage;
 import org.eclipse.jface.dialogs.IMessageProvider;
 import org.eclipse.jface.dialogs.MessageDialog;
 import org.eclipse.jface.dialogs.ProgressMonitorDialog;
@@ -266,6 +268,10 @@
 		// Write out the build model info
 		ManagedBuildManager.setDefaultConfiguration(getProject(), getSelectedConfiguration());
 		ManagedBuildManager.saveBuildInfo(getProject(), false);
+		IManagedBuildInfo bi = ManagedBuildManager.getBuildInfo(getProject());
+		if (bi != null & bi instanceof ManagedBuildInfo) {
+			((ManagedBuildInfo)bi).initializePathEntries();
+		}
 		return true;
 	}
 
Index: src/org/eclipse/cdt/managedbuilder/ui/properties/ResourceBuildPropertyPage.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt-build/org.eclipse.cdt.managedbuilder.ui/src/org/eclipse/cdt/managedbuilder/ui/properties/ResourceBuildPropertyPage.java,v
retrieving revision 1.4
diff -u -r1.4 ResourceBuildPropertyPage.java
--- src/org/eclipse/cdt/managedbuilder/ui/properties/ResourceBuildPropertyPage.java	2 Jun 2005 11:31:40 -0000	1.4
+++ src/org/eclipse/cdt/managedbuilder/ui/properties/ResourceBuildPropertyPage.java	8 Jun 2005 10:43:16 -0000
@@ -20,6 +20,7 @@
 import org.eclipse.cdt.managedbuilder.core.ITool;
 import org.eclipse.cdt.managedbuilder.core.ManagedBuildManager;
 import org.eclipse.cdt.managedbuilder.core.ManagedCProjectNature;
+import org.eclipse.cdt.managedbuilder.internal.core.ManagedBuildInfo;
 import org.eclipse.cdt.managedbuilder.internal.ui.ManagedBuildOptionBlock;
 import org.eclipse.cdt.managedbuilder.internal.ui.ManagedBuilderHelpContextIds;
 import org.eclipse.cdt.managedbuilder.internal.ui.ManagedBuilderUIMessages;
@@ -475,6 +476,11 @@
 			}
 
 		ManagedBuildManager.saveBuildInfo(getProject(), false);
+		
+		IManagedBuildInfo bi = ManagedBuildManager.getBuildInfo(getProject());
+		if (bi != null & bi instanceof ManagedBuildInfo) {
+			((ManagedBuildInfo)bi).initializePathEntries();
+		}
 		return true;
 	}
 
Index: src/org/eclipse/cdt/managedbuilder/internal/core/ManagedBuildInfo.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt-build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/core/ManagedBuildInfo.java,v
retrieving revision 1.41
diff -u -r1.41 ManagedBuildInfo.java
--- src/org/eclipse/cdt/managedbuilder/internal/core/ManagedBuildInfo.java	6 Jun 2005 15:51:49 -0000	1.41
+++ src/org/eclipse/cdt/managedbuilder/internal/core/ManagedBuildInfo.java	8 Jun 2005 10:42:04 -0000
@@ -30,21 +30,26 @@
 import org.eclipse.cdt.core.model.IPathEntryContainer;
 import org.eclipse.cdt.core.parser.IScannerInfo;
 import org.eclipse.cdt.managedbuilder.core.BuildException;
+import org.eclipse.cdt.managedbuilder.core.IBuildObject;
 import org.eclipse.cdt.managedbuilder.core.IBuilder;
 import org.eclipse.cdt.managedbuilder.core.IConfiguration;
 import org.eclipse.cdt.managedbuilder.core.IEnvVarBuildPath;
-import org.eclipse.cdt.managedbuilder.core.IOptionApplicability;
 import org.eclipse.cdt.managedbuilder.core.IManagedBuildInfo;
 import org.eclipse.cdt.managedbuilder.core.IManagedCommandLineGenerator;
 import org.eclipse.cdt.managedbuilder.core.IManagedCommandLineInfo;
 import org.eclipse.cdt.managedbuilder.core.IManagedProject;
 import org.eclipse.cdt.managedbuilder.core.IOption;
+import org.eclipse.cdt.managedbuilder.core.IOptionApplicability;
+import org.eclipse.cdt.managedbuilder.core.IResourceConfiguration;
 import org.eclipse.cdt.managedbuilder.core.ITarget;
 import org.eclipse.cdt.managedbuilder.core.ITool;
 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.envvar.IBuildEnvironmentVariable;
+import org.eclipse.cdt.managedbuilder.envvar.IEnvironmentVariableProvider;
 import org.eclipse.cdt.managedbuilder.internal.macros.FileContextData;
+import org.eclipse.cdt.managedbuilder.internal.macros.OptionContextData;
 import org.eclipse.cdt.managedbuilder.internal.scannerconfig.ManagedBuildCPathEntryContainer;
 import org.eclipse.cdt.managedbuilder.macros.BuildMacroException;
 import org.eclipse.cdt.managedbuilder.macros.IBuildMacroProvider;
@@ -270,38 +275,6 @@
 	public Map getDefinedSymbols() {
 		// Return the defined symbols for the default configuration
 		HashMap symbols = getMacroPathEntries();
-		IConfiguration config = getDefaultConfiguration();
-		if(config == null)
-			return symbols;
-		ITool[] tools = config.getFilteredTools();
-		for (int i = 0; i < tools.length; i++) {
-			ITool tool = tools[i];
-			// Now extract the valid tool's options
-			IOption[] opts = tool.getOptions();
-			for (int j = 0; j < opts.length; j++) {
-				IOption option = opts[j];
-				try {
-					if (option.getValueType() == IOption.PREPROCESSOR_SYMBOLS) {
-						ArrayList symbolList = new ArrayList();
-						symbolList.addAll(Arrays.asList(option.getDefinedSymbols()));
-						Iterator iter = symbolList.listIterator();
-						while (iter.hasNext()) {
-							String symbol = (String) iter.next();
-							if (symbol.length() == 0){
-								continue;
-							}
-							String[] tokens = symbol.split("="); //$NON-NLS-1$
-							String key = tokens[0].trim();
-							String value = (tokens.length > 1) ? tokens[1].trim() : new String();
-							symbols.put(key, value);
-						}
-					}
-				} catch (BuildException e) {
-					// TODO: report error
-					continue;
-				}
-			}
-		}
 		return symbols; 
 	}
 	
@@ -424,59 +397,6 @@
 	public String[] getIncludePaths() {
 		// Return the include paths for the default configuration
 		ArrayList paths = getIncludePathEntries();
-		IConfiguration config = getDefaultConfiguration();
-		IPath location = owner.getLocation();
-		// If the build info is out of date this might be null
-		if (location == null) {
-			location = new Path("."); //$NON-NLS-1$
-		}
-		if (config != null) {
-			IPath root = location.append(config.getName());
-			ITool[] tools = config.getFilteredTools();
-			for (int i = 0; i < tools.length; i++) {
-				ITool tool = tools[i];
-				// The tool checks out for this project, get its options
-				IOption[] opts = tool.getOptions();
-				for (int j = 0; j < opts.length; j++) {
-					IOption option = opts[j];
-					try {
-						if (option.getValueType() == IOption.INCLUDE_PATH) {
-							
-							// check to see if the option has an applicability
-							// calculator
-							IOptionApplicability applicabilityCalculator = option
-									.getApplicabilityCalculator();
-
-							if (applicabilityCalculator == null
-									|| applicabilityCalculator.isOptionUsedInCommandLine(config, tool, option)) {
-
-								// Get all the user-defined paths from the
-								// option as absolute paths
-								String[] userPaths = option.getIncludePaths();
-								for (int index = 0; index < userPaths.length; ++index) {
-									IPath userPath = new Path(userPaths[index]);
-									if (userPath.isAbsolute()) {
-										paths.add(userPath.toOSString());
-									} else {
-										IPath absPath = root.append(userPath);
-										paths.add(absPath.makeAbsolute().toOSString());
-									}
-								}
-							}
-						}
-					} catch (BuildException e) {
-						// TODO: report error
-						continue;
-					}
-				}
-			}
-			//add paths specified in the environment
-			String envIncludePaths[] = ManagedBuildManager.getEnvironmentVariableProvider().getBuildPaths(config,IEnvVarBuildPath.BUILDPATH_INCLUDE);
-			if(envIncludePaths != null)
-				paths.addAll(Arrays.asList(envIncludePaths));
-		}
-				
-		// Answer the results as an array
 		return (String[])paths.toArray(new String[paths.size()]); 
 	}
 
@@ -836,7 +756,7 @@
 	/* (non-Javadoc)
 	 * 
 	 */
-	private void initializePathEntries() {
+	public void initializePathEntries() {
 		try {
 			IPathEntryContainer container = new ManagedBuildCPathEntryContainer(getOwner().getProject());
 			CoreModel.setPathEntryContainer(new ICProject[]{cProject}, container, new NullProgressMonitor());
@@ -1171,4 +1091,273 @@
 		}
 		return targetList;	
 	}
+	
+	/**
+	 * 
+	 * @return
+	 */
+	private String getCWD() {
+		String cwd = ""; //$NON-NLS-1$
+		IBuildEnvironmentVariable cwdvar = ManagedBuildManager.getEnvironmentVariableProvider().getVariable("CWD", getDefaultConfiguration(), false); //$NON-NLS-1$
+		if (cwdvar != null) { cwd = cwdvar.getValue().replace('\\','/'); }     //$NON-NLS-1$  //$NON-NLS-2$
+		return cwd;
+	}
+	
+	/**
+	 */
+	private String processPath(String path, int context, Object obj) {
+		final String EMPTY = "";   //$NON-NLS-1$
+		final String QUOTE = "\""; //$NON-NLS-1$
+		
+		if (path == null) { return EMPTY; }
+		String s = path;
+		if (context != 0) {
+			try {
+				s = ManagedBuildManager.getBuildMacroProvider().resolveValue(s, EMPTY, " ", context, obj); //$NON-NLS-1$
+			} catch (BuildMacroException e) { return EMPTY; }
+		}
+		if (s == null) { s = path; }
+
+		if (s.length()> 1 && s.startsWith(QUOTE) && s.endsWith(QUOTE)) {
+			s = s.substring(1, s.length()-1);
+		}
+		
+		if ( ".".equals(s) ) { //$NON-NLS-1$
+			String cwd = getCWD();
+			if (cwd.length()>0) { s = cwd; }
+		}
+		if (!(new Path(s)).isAbsolute()) {
+			String cwd = getCWD();
+			if (cwd.length()>0) { s = cwd + "/" + s; } //$NON-NLS-1$
+		}
+		return s;
+	}
+
+	/**
+	 * Obtain all possible Managed build values
+	 * @return
+	 */
+	public IPathEntry[] getManagedBuildValues() {
+		List entries = new ArrayList();
+		int i=0;
+		IPathEntry[] a = getManagedBuildValues(IPathEntry.CDT_INCLUDE_FILE);
+		if (a != null) { for (i=0; i<a.length; i++) entries.add(a[i]); } 
+		a = getManagedBuildValues(IPathEntry.CDT_LIBRARY);
+		if (a != null) { for (i=0; i<a.length; i++) entries.add(a[i]); } 
+		a = getManagedBuildValues(IPathEntry.CDT_MACRO);
+		if (a != null) { for (i=0; i<a.length; i++) entries.add(a[i]); } 
+		return (IPathEntry[])entries.toArray(new IPathEntry[entries.size()]);
+	}
+
+	/**
+	 * Obtain all possible Managed build built-ins
+	 * @return
+	 */
+	public IPathEntry[] getManagedBuildBuiltIns() {
+		List entries = new ArrayList();
+		int i=0;
+		IPathEntry[] a = getManagedBuildBuiltIns(IPathEntry.CDT_INCLUDE_FILE);
+		if (a != null) { for (i=0; i<a.length; i++) entries.add(a[i]); } 
+		a = getManagedBuildBuiltIns(IPathEntry.CDT_LIBRARY);
+		if (a != null) { for (i=0; i<a.length; i++) entries.add(a[i]); } 
+		a = getManagedBuildBuiltIns(IPathEntry.CDT_MACRO);
+		if (a != null) { for (i=0; i<a.length; i++) entries.add(a[i]); } 
+		return (IPathEntry[])entries.toArray(new IPathEntry[entries.size()]);
+	}
+	
+	/**
+	 * 
+	 * @param entryType
+	 * @return
+	 */
+	public IPathEntry[] getManagedBuildValues(int entryType) {
+		// obtain option values
+		List entries = getOptionValues(entryType, false);
+	
+		// for includes, get env variables values; useless for other entry types  
+		if (entryType == IPathEntry.CDT_INCLUDE_FILE) {
+			IEnvironmentVariableProvider env = ManagedBuildManager.getEnvironmentVariableProvider();
+			entries = addIncludes(entries, env.getBuildPaths(getDefaultConfiguration(), IEnvVarBuildPath.BUILDPATH_INCLUDE), Path.EMPTY, null);
+		}	
+		return (IPathEntry[])entries.toArray(new IPathEntry[entries.size()]);
+	}
+	
+	/**
+	 * @param entryType
+	 * @return
+	 */
+	public IPathEntry[] getManagedBuildBuiltIns(int entryType) {
+		List entries = getOptionValues(entryType, true);
+		return (IPathEntry[])entries.toArray(new IPathEntry[entries.size()]);		
+	}
+	
+	/**
+	 * 
+	 * @param entryType  - data type to be scanned for 
+	 * @param builtIns   - return either values or built-in's 
+	 * @return list of strings which contains all found values 
+	 */
+	private List getOptionValues(int entryType, boolean builtIns) {
+		List entries = new ArrayList(); 
+		IConfiguration cfg = getDefaultConfiguration();
+		
+		// process config toolchain's options
+		entries = readToolsOptions(
+				entryType, 
+				entries, 
+				builtIns, 
+				cfg);
+		
+		
+		// code below (obtaining of resource config values)
+		// is now commented because resource-related include
+		// paths are displayed by UI together with config-
+		// related includes, so paths are duplicated in
+		// project's "includes" folder.
+		// 
+		// Uncomment following code after UI problem fix.     
+/* 
+		// process resource configurations
+        IResourceConfiguration[] rescfgs = cfg.getResourceConfigurations();
+		if (rescfgs != null) {
+			for (int i=0; i<rescfgs.length; i++) {
+				entries = readToolsOptions(
+							entryType, 
+							entries, 
+							builtIns, 
+							rescfgs[i]);
+			}
+		}
+//		*/
+		return entries;
+	}
+
+	/**
+	 * 
+	 * @param optionType - data type: include | library | symbols 
+	 * @param entries    - list to be affected
+	 * @param builtIns   - whether get actual values or builtins 
+	 * @param obj        - object to be processed (ResCfg | Cfg) 
+	 */
+	private List readToolsOptions(int entryType, List entries, boolean builtIns, IBuildObject obj) {
+		ITool[] t = null;
+		Path resPath = Path.EMPTY;
+
+		// check that entryType is correct
+		if (entryType != IPathEntry.CDT_INCLUDE_FILE &&
+			entryType != IPathEntry.CDT_LIBRARY &&
+			entryType != IPathEntry.CDT_MACRO) { return entries; }
+		
+		// calculate parameters depending of object type
+		if (obj instanceof IResourceConfiguration) {
+			resPath = new Path(((IResourceConfiguration)obj).getResourcePath());
+			t = ((IResourceConfiguration)obj).getTools();
+		} else if (obj instanceof IConfiguration) {
+			t  = ((IConfiguration)obj).getFilteredTools();
+		} else { return entries; } // wrong object passed 
+		if (t == null) { return entries; }
+		
+		// process all tools and all their options
+		for (int i=0; i<t.length; i++) {
+			IOption[] op = t[i].getOptions();
+			for (int j=0; j<op.length; j++) {
+				
+				// check to see if the option has an applicability calculator
+				IOptionApplicability applicabilityCalculator = op[j].getApplicabilityCalculator();
+				if (applicabilityCalculator != null &&
+				   !applicabilityCalculator.isOptionUsedInCommandLine(obj, t[i], op[j])) continue;
+				
+				try {
+					if (entryType == IPathEntry.CDT_INCLUDE_FILE && 
+							op[j].getValueType() == IOption.INCLUDE_PATH) 
+					{
+						OptionContextData ocd = new OptionContextData(op[j], obj);				
+						addIncludes(entries, builtIns ? op[j].getBuiltIns() : op[j].getIncludePaths(), resPath, ocd);
+					} else if (entryType == IPathEntry.CDT_LIBRARY && 
+							op[j].getValueType() == IOption.LIBRARIES) 
+					{
+						OptionContextData ocd = new OptionContextData(op[j], obj);				
+						addLibraries(entries, builtIns ? op[j].getBuiltIns() : op[j].getLibraries(), resPath, ocd);
+					} else if (entryType == IPathEntry.CDT_MACRO && 
+							op[j].getValueType() == IOption.PREPROCESSOR_SYMBOLS) 
+					{
+						addSymbols(entries, builtIns ? op[j].getBuiltIns() : op[j].getDefinedSymbols(), resPath);
+					} else { continue; }
+				} catch (BuildException e) {}
+			}
+		}
+		return entries;
+	}
+	
+	/**
+	 * 
+	 * @param entries
+	 * @param values
+	 * @param resPath
+	 * @param ocd       
+	 */
+	protected List addIncludes(List entries, String[] values, Path resPath, OptionContextData ocd) {
+		if (values != null) {
+			for (int k=0; k<values.length; k++) {
+				if (ocd != null) {
+				   values[k] = processPath(values[k], IBuildMacroProvider.CONTEXT_OPTION, ocd);
+				}
+				IPathEntry entry = CoreModel.newIncludeEntry(resPath, Path.EMPTY, new Path(processPath(values[k], 0, null)), true);
+				if (!entries.contains(entry)) {	entries.add(entry);	}
+			}
+		}
+		return entries;
+	}
+	
+	/**
+	 * 
+	 * @param entries
+	 * @param values
+	 * @param resPath
+	 * @param ocd
+	 */
+	protected List addLibraries(List entries, String[] values, Path resPath, OptionContextData ocd) {
+		if (values != null) {
+			for (int k=0; k<values.length; k++) {
+				if (ocd != null) {
+					values[k] = processPath(values[k], IBuildMacroProvider.CONTEXT_OPTION, ocd);
+				}
+				IPathEntry entry = CoreModel.newLibraryEntry(resPath, Path.EMPTY, new Path(processPath(values[k], 0, null)), null, null, null, true);
+				if (!entries.contains(entry)) {	entries.add(entry); }
+			}
+		}
+		return entries;
+	}
+	
+	/**
+	 * 
+	 * @param entries
+	 * @param values
+	 * @param resPath
+	 */
+	protected List addSymbols(List entries, String[] values, Path resPath) {
+		if (values == null) return entries;
+		for (int i=0; i<values.length; i++) {
+			if (values[i].length() == 0) continue;
+			String[] tokens = values[i].split("="); //$NON-NLS-1$
+			String key = tokens[0].trim();
+			String value = (tokens.length > 1) ? tokens[1].trim() : new String();
+			// Make sure the current entries do not contain a duplicate
+			boolean add = true;
+			Iterator entryIter = entries.listIterator();
+			while (entryIter.hasNext()) {
+				IPathEntry entry = (IPathEntry) entryIter.next();
+				if (entry.getEntryKind() == IPathEntry.CDT_MACRO) {	
+					if (((IMacroEntry)entry).getMacroName().equals(key) && 
+						((IMacroEntry)entry).getMacroValue().equals(value)) {
+						add = false;
+						break;
+					}
+				}
+			}
+			if (add) { entries.add(CoreModel.newMacroEntry(resPath, key, value)); }
+		}
+		return entries;
+	}
+
 }
Index: src/org/eclipse/cdt/managedbuilder/internal/scannerconfig/ManagedBuildCPathEntryContainer.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt-build/org.eclipse.cdt.managedbuilder.core/src/org/eclipse/cdt/managedbuilder/internal/scannerconfig/ManagedBuildCPathEntryContainer.java,v
retrieving revision 1.10
diff -u -r1.10 ManagedBuildCPathEntryContainer.java
--- src/org/eclipse/cdt/managedbuilder/internal/scannerconfig/ManagedBuildCPathEntryContainer.java	2 Jun 2005 18:54:34 -0000	1.10
+++ src/org/eclipse/cdt/managedbuilder/internal/scannerconfig/ManagedBuildCPathEntryContainer.java	8 Jun 2005 10:42:05 -0000
@@ -11,8 +11,6 @@
 
 package org.eclipse.cdt.managedbuilder.internal.scannerconfig;
 
-import java.util.Arrays;
-import java.util.HashMap;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
@@ -28,11 +26,8 @@
 import org.eclipse.cdt.make.core.scannerconfig.IScannerInfoCollector;
 import org.eclipse.cdt.make.internal.core.scannerconfig2.SCProfileInstance;
 import org.eclipse.cdt.make.internal.core.scannerconfig2.ScannerConfigProfileManager;
-import org.eclipse.cdt.managedbuilder.core.BuildException;
 import org.eclipse.cdt.managedbuilder.core.IConfiguration;
-import org.eclipse.cdt.managedbuilder.core.IOption;
 import org.eclipse.cdt.managedbuilder.core.ITarget;
-import org.eclipse.cdt.managedbuilder.core.ITool;
 import org.eclipse.cdt.managedbuilder.core.ManagedBuildManager;
 import org.eclipse.cdt.managedbuilder.core.ManagedBuilderCorePlugin;
 import org.eclipse.cdt.managedbuilder.internal.core.ManagedBuildInfo;
@@ -131,41 +126,6 @@
 		}
 	}
 
-	protected void calculateBuiltIns(ITarget defaultTarget, IConfiguration config) {
-		ITool[] tools = config.getFilteredTools();
-
-		// Iterate over the list
-		for (int toolIndex = 0; toolIndex < tools.length; ++toolIndex) {
-			ITool tool = tools[toolIndex];
-			// Check its options
-			IOption[] options = tool.getOptions();
-			for (int optIndex = 0; optIndex < options.length; ++optIndex) {
-				IOption option = options[optIndex];
-				try {
-					if (option.getValueType() == IOption.PREPROCESSOR_SYMBOLS) {
-						String[] builtIns = option.getBuiltIns();
-						Map macroMap = new HashMap();
-						for (int biIndex = 0; biIndex < builtIns.length; ++biIndex) {
-							String  symbol = builtIns[biIndex];
-							String[] tokens = symbol.split("=");	//$NON-NLS-1$
-							String macro = tokens[0].trim();
-							String value = (tokens.length > 1) ? tokens[1] : new String();
-							macroMap.put(macro, value);
-						}
-						addDefinedSymbols(macroMap);
-					} else if (option.getValueType() == IOption.INCLUDE_PATH) {
-						// Make sure it is a built-in, not a user-defined path
-						String[] values = option.getBuiltIns();
-						if (values.length > 0) {
-							addIncludePaths(Arrays.asList(values));
-						}
-					}
-				} catch (BuildException e) {}
-			}
-		}
-
-	}
-
 	protected void calculateEntriesDynamically(final IProject project, 
                                                SCProfileInstance profileInstance, 
                                                final IScannerInfoCollector collector) {
@@ -233,10 +193,12 @@
 			calculateEntriesDynamically((IProject)info.getOwner(), profileInstance, collector);
 			addIncludePaths(mCollector.getIncludePaths());
 			addDefinedSymbols(mCollector.getDefinedSymbols());
+			addEntries(info.getManagedBuildValues());
 		} else {
 			// If none supplied, use the built-ins
 			if (defaultConfig != null) {
-				calculateBuiltIns(defaultTarget, defaultConfig);
+				addEntries(info.getManagedBuildValues());
+				addEntries(info.getManagedBuildBuiltIns());
 				ManagedBuildCPathEntryContainer.outputTrace(project.getName(), "Path entries set using built-in definitions from " + defaultConfig.getName());	//$NON-NLS-1$
 			} else {
 				ManagedBuildCPathEntryContainer.outputError(project.getName(), "Configuration is null");	//$NON-NLS-1$
@@ -261,4 +223,16 @@
 		return new Path("org.eclipse.cdt.managedbuilder.MANAGED_CONTAINER");	//$NON-NLS-1$
 	}
 	
+ 	/**
+ 	 * @param values
+ 	 * @return
+ 	 */
+ 	private void addEntries(IPathEntry[] values) {
+ 		if (values == null) return;
+ 		for (int i=0; i<values.length; i++) {
+ 			if (values[i] == null) continue;
+ 			if (!entries.contains(values[i])) {	entries.add(values[i]); }
+ 		}	
+ 	}
+
 }

Back to the top