[
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());