Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
[cdt-patch] Scanner config discovery; fix for PR 59308

Fix for PR 59308: Scanner Config: failed discovery of makefile include 
path when missing -D.

Thanks,
Vmir

Index: src/org/eclipse/cdt/make/internal/core/scannerconfig/ScannerInfoCollector.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/internal/core/scannerconfig/ScannerInfoCollector.java,v
retrieving revision 1.3
diff -u -r1.3 ScannerInfoCollector.java
--- src/org/eclipse/cdt/make/internal/core/scannerconfig/ScannerInfoCollector.java	15 Apr 2004 19:02:00 -0000	1.3
+++ src/org/eclipse/cdt/make/internal/core/scannerconfig/ScannerInfoCollector.java	21 Apr 2004 19:41:44 -0000
@@ -165,6 +165,7 @@
 
 	/**
 	 * Compare discovered include paths and symbol definitions with the ones from scanInfo.
+	 * 
 	 * @param scanInfo
 	 * @param projectName
 	 * @return
@@ -172,63 +173,99 @@
 	private boolean scannerConfigNeedsUpdate(DiscoveredScannerInfo discScanInfo, String projectName) {
 		List includes = (List) discoveredIncludes.get(projectName);
 		List symbols = (List) discoveredSymbols.get(projectName);
-		if (includes == null && symbols == null)
-			return false;
 		
-		// Step 1. Add discovered scanner config to the existing discovered scanner config 
-		// add the includes from the latest discovery
+		boolean addedIncludes = includePathsNeedUpdate(discScanInfo, projectName, includes);
+		boolean addedSymbols = definedSymbolsNeedUpdate(discScanInfo, projectName, symbols);
+		
+		return (addedIncludes | addedSymbols);
+	}
+
+	/**
+	 * Compare include paths with already discovered.
+	 * 
+	 * @param discScanInfo
+	 * @param projectName
+	 * @param includes
+	 * @return
+	 */
+	private boolean includePathsNeedUpdate(DiscoveredScannerInfo discScanInfo, String projectName, List includes) {
 		boolean addedIncludes = false;
-		List sumIncludes = (List) sumDiscoveredIncludes.get(projectName);
-		if (sumIncludes == null) {
-			sumIncludes = new ArrayList(includes);
-			sumDiscoveredIncludes.put(projectName, sumIncludes);
-			addedIncludes = true;
-		}
-		else {
-			for (Iterator i = includes.iterator(); i.hasNext(); ) {
+		if (includes != null) {
+			// Step 1. Add discovered scanner config to the existing discovered scanner config 
+			// add the includes from the latest discovery
+			List sumIncludes = (List) sumDiscoveredIncludes.get(projectName);
+			if (sumIncludes == null) {
+				sumIncludes = new ArrayList(includes);
+				sumDiscoveredIncludes.put(projectName, sumIncludes);
+				addedIncludes = true;
+			}
+			else {
+				for (Iterator i = includes.iterator(); i.hasNext(); ) {
+					String include = (String) i.next();
+					if (!sumIncludes.contains(include)) {
+						addedIncludes |= sumIncludes.add(include);
+					}
+				}
+			}
+			// try to translate cygpaths to absolute paths
+			List finalSumIncludes = translateIncludePaths(sumIncludes);
+			
+			// Step 2. Get project's scanner config
+			LinkedHashMap persistedIncludes = discScanInfo.getDiscoveredIncludePaths();
+	
+			// Step 3. Merge scanner config from steps 1 and 2
+			for (Iterator i = finalSumIncludes.iterator(); i.hasNext(); ) {
 				String include = (String) i.next();
-				if (!sumIncludes.contains(include)) {
-					addedIncludes |= sumIncludes.add(include);
+				if (!persistedIncludes.containsKey(include)) {
+					persistedIncludes.put(include, 
+							((new Path(include)).toFile().exists()) ? Boolean.FALSE : Boolean.TRUE);
+					addedIncludes |= true;
 				}
 			}
+			
+			// Step 4. Set resulting scanner config
+			discScanInfo.setDiscoveredIncludePaths(persistedIncludes);
+			
+			// Step 5. Invalidate discovered include paths and symbol definitions
+			discoveredIncludes.put(projectName, null);
 		}
-		// try to translate cygpaths to absolute paths
-		List finalSumIncludes = translateIncludePaths(sumIncludes);
-		
-		// add the symbols from the latest discovery
+		return addedIncludes;
+	}
+
+	/**
+	 * Compare symbol definitions with already discovered.
+	 * 
+	 * @param discScanInfo
+	 * @param projectName
+	 * @param symbols
+	 * @return
+	 */
+	private boolean definedSymbolsNeedUpdate(DiscoveredScannerInfo discScanInfo, String projectName, List symbols) {
 		boolean addedSymbols = false;
-		Map sumSymbols = (Map) sumDiscoveredSymbols.get(projectName);
-		if (sumSymbols == null) {
-			sumSymbols = new LinkedHashMap();
-			sumDiscoveredSymbols.put(projectName, sumSymbols);
-		}
-		addedSymbols = ScannerConfigUtil.scAddSymbolsList2SymbolEntryMap(sumSymbols, symbols, false);
-		
-		// Step 2. Get project's scanner config
-		LinkedHashMap persistedIncludes = discScanInfo.getDiscoveredIncludePaths();
-		LinkedHashMap persistedSymbols = discScanInfo.getDiscoveredSymbolDefinitions();
-		
-		// Step 3. Merge scanner config from steps 1 and 2
-		for (Iterator i = finalSumIncludes.iterator(); i.hasNext(); ) {
-			String include = (String) i.next();
-			if (!persistedIncludes.containsKey(include)) {
-				persistedIncludes.put(include, 
-						((new Path(include)).toFile().exists()) ? Boolean.FALSE : Boolean.TRUE);
-				addedIncludes |= true;
+		if (symbols != null) {
+			// Step 1. Add discovered scanner config to the existing discovered scanner config 
+			// add the symbols from the latest discovery
+			Map sumSymbols = (Map) sumDiscoveredSymbols.get(projectName);
+			if (sumSymbols == null) {
+				sumSymbols = new LinkedHashMap();
+				sumDiscoveredSymbols.put(projectName, sumSymbols);
 			}
+			addedSymbols = ScannerConfigUtil.scAddSymbolsList2SymbolEntryMap(sumSymbols, symbols, false);
+			
+			// Step 2. Get project's scanner config
+			LinkedHashMap persistedSymbols = discScanInfo.getDiscoveredSymbolDefinitions();
+			
+			// Step 3. Merge scanner config from steps 1 and 2
+			LinkedHashMap candidateSymbols = new LinkedHashMap(persistedSymbols);
+			addedSymbols |= ScannerConfigUtil.scAddSymbolEntryMap2SymbolEntryMap(candidateSymbols, sumSymbols);
+			
+			// Step 4. Set resulting scanner config
+			discScanInfo.setDiscoveredSymbolDefinitions(candidateSymbols);
+			
+			// Step 5. Invalidate discovered include paths and symbol definitions
+			discoveredSymbols.put(projectName, null);
 		}
-		LinkedHashMap candidateSymbols = new LinkedHashMap(persistedSymbols);
-		addedSymbols |= ScannerConfigUtil.scAddSymbolEntryMap2SymbolEntryMap(candidateSymbols, sumSymbols);
-		
-		// Step 4. Set resulting scanner config
-		discScanInfo.setDiscoveredIncludePaths(persistedIncludes);
-		discScanInfo.setDiscoveredSymbolDefinitions(candidateSymbols);
-		
-		// invalidate discovered include paths and symbol definitions
-		discoveredIncludes.put(projectName, null);
-		discoveredSymbols.put(projectName, null);
-		
-		return (addedIncludes | addedSymbols);
+		return addedSymbols;
 	}
 
 	/**
Index: src/org/eclipse/cdt/make/internal/core/scannerconfig/ScannerInfoConsoleParserFactory.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/internal/core/scannerconfig/ScannerInfoConsoleParserFactory.java,v
retrieving revision 1.3
diff -u -r1.3 ScannerInfoConsoleParserFactory.java
--- src/org/eclipse/cdt/make/internal/core/scannerconfig/ScannerInfoConsoleParserFactory.java	20 Apr 2004 19:02:50 -0000	1.3
+++ src/org/eclipse/cdt/make/internal/core/scannerconfig/ScannerInfoConsoleParserFactory.java	21 Apr 2004 19:41:44 -0000
@@ -84,7 +84,9 @@
 					// builder not installed or disabled
 					scBuildInfo = null;
 				}
-				if (scBuildInfo != null && scBuildInfo.isMakeBuilderConsoleParserEnabled()) {
+				if (scBuildInfo != null && 
+						scBuildInfo.isAutoDiscoveryEnabled() &&
+						scBuildInfo.isMakeBuilderConsoleParserEnabled()) {
 					// get the make builder console parser 
 					IScannerInfoConsoleParser clParser = MakeCorePlugin.getDefault().
 						getScannerInfoConsoleParser(scBuildInfo.getMakeBuilderConsoleParserId());			

Back to the top