Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
[cdt-patch] Scanner Config discovery - fixes

This patch contains fixes for following bugs:
- 58856 [ScannerConfig] Automate discovery occurs even when disabled
- On startup removed symbol definitions are promoted to selected (no 
bugzila PR)
- Proper discovery of -D SYMBOL_DEF and -I INCLUDE_PATH entries (with a 
space after -D and -I) (no bugzila PR)

Also some improvements sneaked in:
- Tracing used instead of information problem markers in GCC console 
parsers
- Discovered scanner config is now persisted to a file in make.core plugin 
state location (on a per project basis) instead of .cdtproject file. 

Thanks,
Vmir


Index: src/org/eclipse/cdt/make/core/MakeCorePlugin.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/core/MakeCorePlugin.java,v
retrieving revision 1.16
diff -u -r1.16 MakeCorePlugin.java
--- src/org/eclipse/cdt/make/core/MakeCorePlugin.java	31 Mar 2004 21:45:57 -0000	1.16
+++ src/org/eclipse/cdt/make/core/MakeCorePlugin.java	19 Apr 2004 21:10:54 -0000
@@ -29,6 +29,7 @@
 import org.eclipse.cdt.make.internal.core.MakeTargetManager;
 import org.eclipse.cdt.make.internal.core.makefile.gnu.GNUMakefile;
 import org.eclipse.cdt.make.internal.core.scannerconfig.ScannerConfigInfoFactory;
+import org.eclipse.cdt.make.internal.core.scannerconfig.util.TraceUtil;
 import org.eclipse.core.resources.IFile;
 import org.eclipse.core.resources.IProject;
 import org.eclipse.core.resources.ResourcesPlugin;
@@ -40,6 +41,7 @@
 import org.eclipse.core.runtime.IPluginDescriptor;
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.Path;
+import org.eclipse.core.runtime.Platform;
 import org.eclipse.core.runtime.Plugin;
 import org.eclipse.core.runtime.Preferences;
 import org.eclipse.core.runtime.Status;
@@ -317,5 +319,28 @@
 			log(e);
 		}
 		return null;
+	}
+	
+	/* (non-Javadoc)
+	 * @see org.eclipse.core.runtime.Plugin#startup()
+	 */
+	public void startup() throws CoreException {
+		super.startup();
+		
+		//Set debug tracing options
+		configurePluginDebugOptions();
+	}
+
+	private static final String SCANNER_CONFIG = MakeCorePlugin.getUniqueIdentifier() + "/debug/scdiscovery"; //$NON-NLS-1$
+	/**
+	 * 
+	 */
+	private void configurePluginDebugOptions() {
+		if (isDebugging()) {
+			String option = Platform.getDebugOption(SCANNER_CONFIG);
+			if (option != null) {
+				TraceUtil.SCANNER_CONFIG = option.equalsIgnoreCase("true") ; //$NON-NLS-1$
+			}
+		}
 	}
 }
Index: src/org/eclipse/cdt/make/core/scannerconfig/DiscoveredScannerInfoProvider.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/core/scannerconfig/DiscoveredScannerInfoProvider.java,v
retrieving revision 1.1
diff -u -r1.1 DiscoveredScannerInfoProvider.java
--- src/org/eclipse/cdt/make/core/scannerconfig/DiscoveredScannerInfoProvider.java	15 Apr 2004 19:02:00 -0000	1.1
+++ src/org/eclipse/cdt/make/core/scannerconfig/DiscoveredScannerInfoProvider.java	19 Apr 2004 21:10:55 -0000
@@ -10,10 +10,27 @@
  **********************************************************************/
 package org.eclipse.cdt.make.core.scannerconfig;
 
+import java.io.ByteArrayOutputStream;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
 import java.util.Iterator;
 import java.util.LinkedHashMap;
 import java.util.Map;
 
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.parsers.FactoryConfigurationError;
+import javax.xml.parsers.ParserConfigurationException;
+import javax.xml.transform.OutputKeys;
+import javax.xml.transform.Transformer;
+import javax.xml.transform.TransformerConfigurationException;
+import javax.xml.transform.TransformerException;
+import javax.xml.transform.TransformerFactory;
+import javax.xml.transform.TransformerFactoryConfigurationError;
+import javax.xml.transform.dom.DOMSource;
+import javax.xml.transform.stream.StreamResult;
+
 import org.eclipse.cdt.core.AbstractCExtension;
 import org.eclipse.cdt.core.CCorePlugin;
 import org.eclipse.cdt.core.ICDescriptor;
@@ -28,10 +45,14 @@
 import org.eclipse.core.resources.IProject;
 import org.eclipse.core.resources.IResource;
 import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.QualifiedName;
+import org.eclipse.core.runtime.Status;
 import org.w3c.dom.Document;
 import org.w3c.dom.Element;
 import org.w3c.dom.Node;
+import org.xml.sax.SAXException;
 
 /**
  * Provider of both user specified and discovered scanner info
@@ -124,7 +145,8 @@
 	private DiscoveredScannerInfo loadScannerInfo(IProject project) throws CoreException {
 		LinkedHashMap includes = new LinkedHashMap();
 		LinkedHashMap symbols = new LinkedHashMap();
-		loadDiscoveredScannerInfoFromCDescriptor(project, includes, symbols);
+//		loadDiscoveredScannerInfoFromCDescriptor(project, includes, symbols);
+		loadDiscoveredScannerInfoFromState(project, includes, symbols);
 		MakeScannerInfo userInfo = MakeScannerProvider.getDefault().loadScannerInfo(project);
 		DiscoveredScannerInfo info = new DiscoveredScannerInfo(project);
 		info.setUserScannerInfo(userInfo);
@@ -143,6 +165,15 @@
 	private void loadDiscoveredScannerInfoFromCDescriptor(IProject project, LinkedHashMap includes, LinkedHashMap symbols) throws CoreException {
 		ICDescriptor descriptor = CCorePlugin.getDefault().getCProjectDescription(project);
 		Node child = descriptor.getProjectData(CDESCRIPTOR_ID).getFirstChild();
+		loadDiscoveredScannerInfo(includes, symbols, child);
+	}
+
+	/**
+	 * @param includes
+	 * @param symbols
+	 * @param child
+	 */
+	private void loadDiscoveredScannerInfo(LinkedHashMap includes, LinkedHashMap symbols, Node child) {
 		while (child != null) {
 			if (child.getNodeName().equals(INCLUDE_PATH)) {
 				// Add the path to the property list
@@ -152,7 +183,7 @@
 				// Add the symbol to the symbol list
 				String symbol = ((Element)child).getAttribute(SYMBOL);
 				String removed = ((Element)child).getAttribute(REMOVED);
-				boolean bRemoved = (removed != null && removed == "true");	//$NON-NLS-1$
+				boolean bRemoved = (removed != null && removed.equals("true"));	// $NON-NLS-1$
 				ScannerConfigUtil.scAddSymbolString2SymbolEntryMap(symbols, symbol, !bRemoved);
 			}
 			child = child.getNextSibling();
@@ -193,7 +224,8 @@
 			project.setSessionProperty(scannerInfoProperty, scannerInfo);
 		}
 
-		saveDiscoveredScannerInfoToCDescriptor(scannerInfo, project);
+//		saveDiscoveredScannerInfoToCDescriptor(scannerInfo, project);
+		saveDiscoveredScannerInfoToState(scannerInfo, project);
 		
 		MakeScannerProvider.updateScannerInfo(scannerInfo.getUserScannerInfo());
 // listeners are notified by MakeScannerProvider.updateScannerInfo
@@ -218,11 +250,20 @@
 			rootElement.removeChild(child);
 			child = rootElement.getFirstChild();
 		}
+		Document doc = rootElement.getOwnerDocument();
 
+		saveDiscoveredScannerInfo(scannerInfo, rootElement, doc);
+	}
+
+	/**
+	 * @param scannerInfo
+	 * @param rootElement
+	 * @param doc
+	 */
+	private static void saveDiscoveredScannerInfo(DiscoveredScannerInfo scannerInfo, Element rootElement, Document doc) {
 		// Save the build info
 		if (scannerInfo != null) {
 			// Serialize the include paths
-			Document doc = rootElement.getOwnerDocument();
 			Map discoveredIncludes = scannerInfo.getDiscoveredIncludePaths();
 			Iterator iter = discoveredIncludes.keySet().iterator();
 			while (iter.hasNext()) {
@@ -259,4 +300,87 @@
 //			descriptor.saveProjectData();
 		}
 	}
-}
\ No newline at end of file
+
+	private void loadDiscoveredScannerInfoFromState(IProject project, LinkedHashMap includes, LinkedHashMap symbols) throws CoreException {
+		// Save the document
+		IPath path = MakeCorePlugin.getWorkingDirectory();
+		path = path.append(project.getName() + ".sc");
+		if (path.toFile().exists()) {
+			try {
+				FileInputStream file = new FileInputStream(path.toFile());
+				DocumentBuilder parser = DocumentBuilderFactory.newInstance().newDocumentBuilder();
+				Document document = parser.parse(file);
+				Node rootElement = document.getFirstChild();
+				if (rootElement.getNodeName().equals("scannerInfo")) {
+					Node child = rootElement.getFirstChild();
+					loadDiscoveredScannerInfo(includes, symbols, child);
+				}
+			} catch (IOException e) {
+				throw new CoreException(new Status(IStatus.ERROR,
+						MakeCorePlugin.getUniqueIdentifier(), -1,
+						MakeCorePlugin.getResourceString("GCCScannerConfigUtil.Error_Message"), e));	//$NON-NLS-1$
+			} catch (ParserConfigurationException e) {
+				MakeCorePlugin.log(e);
+			} catch (FactoryConfigurationError e) {
+				MakeCorePlugin.log(e);
+			} catch (SAXException e) {
+				MakeCorePlugin.log(e);
+			}
+		}
+	}
+	
+	private static void saveDiscoveredScannerInfoToState(DiscoveredScannerInfo scannerInfo, IProject project) throws CoreException {
+		// Create document
+		try {
+			DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
+			Document doc = builder.newDocument();
+			Element rootElement = doc.createElement("scannerInfo");
+			rootElement.setAttribute("id", CDESCRIPTOR_ID);
+			doc.appendChild(rootElement);
+
+			saveDiscoveredScannerInfo(scannerInfo, rootElement, doc);
+		
+			// Transform the document to something we can save in a file
+			ByteArrayOutputStream stream = new ByteArrayOutputStream();
+			Transformer transformer = TransformerFactory.newInstance().newTransformer();
+			transformer.setOutputProperty(OutputKeys.METHOD, "xml");	//$NON-NLS-1$
+			transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8");	//$NON-NLS-1$
+			transformer.setOutputProperty(OutputKeys.INDENT, "yes");	//$NON-NLS-1$
+			DOMSource source = new DOMSource(doc);
+			StreamResult result = new StreamResult(stream);
+			transformer.transform(source, result);
+			
+			// Save the document
+			IPath path = MakeCorePlugin.getWorkingDirectory();
+			path = path.append(project.getName() + ".sc");
+			try {
+				FileOutputStream file = new FileOutputStream(path.toFile());
+				file.write(stream.toByteArray());
+				file.close();
+			} catch (IOException e) {
+				throw new CoreException(new Status(IStatus.ERROR,
+						MakeCorePlugin.getUniqueIdentifier(), -1,
+						MakeCorePlugin.getResourceString("GCCScannerConfigUtil.Error_Message"), e));	//$NON-NLS-1$
+			}
+			
+			// Close the streams
+			stream.close();
+		} catch (ParserConfigurationException e) {
+			MakeCorePlugin.log(e);
+		} catch (FactoryConfigurationError e) {
+			MakeCorePlugin.log(e);
+		} catch (TransformerConfigurationException e) {
+			MakeCorePlugin.log(e);
+		} catch (TransformerFactoryConfigurationError e) {
+			MakeCorePlugin.log(e);
+		} catch (TransformerException e) {
+			MakeCorePlugin.log(e);
+		} catch (IOException e) {
+			MakeCorePlugin.log(e);
+		} catch (CoreException e) {
+			// Save to IFile failed
+			MakeCorePlugin.log(e.getStatus());
+		}
+		
+	}
+}
Index: src/org/eclipse/cdt/make/core/scannerconfig/ScannerConfigBuilder.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/core/scannerconfig/ScannerConfigBuilder.java,v
retrieving revision 1.1
diff -u -r1.1 ScannerConfigBuilder.java
--- src/org/eclipse/cdt/make/core/scannerconfig/ScannerConfigBuilder.java	16 Mar 2004 20:35:25 -0000	1.1
+++ src/org/eclipse/cdt/make/core/scannerconfig/ScannerConfigBuilder.java	19 Apr 2004 21:10:55 -0000
@@ -36,10 +36,23 @@
 	 * @see IncrementalProjectBuilder#build
 	 */
 	protected IProject [] build(int kind, Map args, IProgressMonitor monitor) throws CoreException {
-		monitor.beginTask("", 100); //$NON-NLS-1$
-		monitor.subTask(MakeCorePlugin.getResourceString("ScannerConfigBuilder.Invoking_Builder") +	//$NON-NLS-1$ 
-				getProject().getName());
-		ScannerInfoCollector.getInstance().updateScannerConfiguration(getProject(), new SubProgressMonitor(monitor, 100));
+		// If auto discovery is disabled, do nothing
+		boolean autodiscoveryEnabled;
+		try {
+			IScannerConfigBuilderInfo buildInfo = MakeCorePlugin.createScannerConfigBuildInfo(getProject(), BUILDER_ID);
+			autodiscoveryEnabled = buildInfo.isAutoDiscoveryEnabled();
+		} 
+		catch (CoreException e) {
+			// builder not installed or disabled
+			autodiscoveryEnabled = false;
+		}
+		
+		if (autodiscoveryEnabled) {
+			monitor.beginTask("ScannerConfigBuilder.Invoking_Builder", 100); //$NON-NLS-1$
+			monitor.subTask(MakeCorePlugin.getResourceString("ScannerConfigBuilder.Invoking_Builder") +	//$NON-NLS-1$ 
+					getProject().getName());
+			ScannerInfoCollector.getInstance().updateScannerConfiguration(getProject(), new SubProgressMonitor(monitor, 100));
+		}
 		return getProject().getReferencedProjects();
 	}
 }
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.2
diff -u -r1.2 ScannerInfoConsoleParserFactory.java
--- src/org/eclipse/cdt/make/internal/core/scannerconfig/ScannerInfoConsoleParserFactory.java	15 Apr 2004 19:02:00 -0000	1.2
+++ src/org/eclipse/cdt/make/internal/core/scannerconfig/ScannerInfoConsoleParserFactory.java	19 Apr 2004 21:10:57 -0000
@@ -75,8 +75,15 @@
 		try {
 			// get the SC builder settings
 			if (currentProject.hasNature(ScannerConfigNature.NATURE_ID)) {
-				IScannerConfigBuilderInfo scBuildInfo = MakeCorePlugin.
-					createScannerConfigBuildInfo(currentProject, ScannerConfigBuilder.BUILDER_ID);
+				IScannerConfigBuilderInfo scBuildInfo;
+				try {
+					scBuildInfo = MakeCorePlugin.
+						createScannerConfigBuildInfo(currentProject, ScannerConfigBuilder.BUILDER_ID);
+				}
+				catch (CoreException e) {
+					// builder not installed or disabled
+					scBuildInfo = null;
+				}
 				if (scBuildInfo != null && scBuildInfo.isMakeBuilderConsoleParserEnabled()) {
 					// get the make builder console parser 
 					IScannerInfoConsoleParser clParser = MakeCorePlugin.getDefault().
Index: src/org/eclipse/cdt/make/internal/core/scannerconfig/gnu/GCCScannerInfoConsoleParser.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/internal/core/scannerconfig/gnu/GCCScannerInfoConsoleParser.java,v
retrieving revision 1.2
diff -u -r1.2 GCCScannerInfoConsoleParser.java
--- src/org/eclipse/cdt/make/internal/core/scannerconfig/gnu/GCCScannerInfoConsoleParser.java	15 Apr 2004 19:02:00 -0000	1.2
+++ src/org/eclipse/cdt/make/internal/core/scannerconfig/gnu/GCCScannerInfoConsoleParser.java	19 Apr 2004 21:10:57 -0000
@@ -14,7 +14,6 @@
 
 import org.eclipse.cdt.core.CCProjectNature;
 import org.eclipse.cdt.core.CProjectNature;
-import org.eclipse.cdt.core.IMarkerGenerator;
 import org.eclipse.core.resources.IFile;
 import org.eclipse.core.resources.IProject;
 import org.eclipse.core.runtime.CoreException;
@@ -23,9 +22,9 @@
 import org.eclipse.cdt.make.core.scannerconfig.IScannerInfoConsoleParser;
 import org.eclipse.cdt.make.internal.core.scannerconfig.IScannerInfoConsoleParserUtility;
 import org.eclipse.cdt.make.internal.core.scannerconfig.ScannerInfoCollector;
+import org.eclipse.cdt.make.internal.core.scannerconfig.util.TraceUtil;
 
 import java.util.ArrayList;
-import java.util.Iterator;
 import java.util.List;
 
 /**
@@ -105,16 +104,31 @@
 
 			rc = true;
 			String fileName = null;
-			String desc = "Found";
 			while (scanner.hasMoreTokens()) {
 				token = scanner.nextToken();
 				if (token.startsWith("-D")) {//$NON-NLS-1$
 					String symbol = token.substring(2);
+					if (symbol.length() == 0) {
+						if (scanner.hasMoreTokens()) {
+							symbol = scanner.nextToken();
+						}
+						else {
+							continue;
+						}
+					}
 					if (!symbols.contains(symbol))
 						symbols.add(symbol);
 				}
 				else if (token.startsWith("-I")) {//$NON-NLS-1$
 					String iPath = token.substring(2);
+					if (iPath.length() == 0) {
+						if (scanner.hasMoreTokens()) {
+							iPath = scanner.nextToken();
+						}
+						else {
+							continue;
+						}
+					}
 					String nPath = fUtil.normalizePath(iPath);
 					if (!includes.contains(nPath))
 						includes.add(nPath);
@@ -146,35 +160,29 @@
 			
 			IProject project = fProject;   
 			IFile file = null;
+			List translatedIncludes = includes;
 			if (includes.size() > 0) {
 				if (fileName != null) {
 					file = fUtil.findFile(fileName);
 					if (file != null) {
 						project = file.getProject();
-						includes = fUtil.translateRelativePaths(file, fileName, includes);
+						translatedIncludes = fUtil.translateRelativePaths(file, fileName, includes);
 					}
 				}
 				else {
-					fUtil.generateMarker(fProject, -1, "Unable to find file name: " + line, 
-							IMarkerGenerator.SEVERITY_ERROR_RESOURCE, null);
+					TraceUtil.outputError("Unable to find file name: ", line);	//$NON-NLS-1$
+//					fUtil.generateMarker(fProject, -1, "Unable to find file name: " + line, //$NON-NLS-1$
+//							IMarkerGenerator.SEVERITY_ERROR_RESOURCE, null);
 				}
 			}
 			// Contribute discovered includes and symbols to the ScannerInfoCollector
-			ScannerInfoCollector.getInstance().
-				contributeToScannerConfig(project, includes, symbols, targetSpecificOptions);
-			
-			// TODO : VMIR remove when debugging is done
-			int severity = IMarkerGenerator.SEVERITY_INFO;
-			
-			for (Iterator i = includes.iterator(); i.hasNext(); ) {
-				String iPath = (String)i.next();
-				fUtil.generateMarker(file, -1, "Found an include path: "+iPath, severity, iPath);
-			}
-			for (Iterator i = symbols.iterator(); i.hasNext(); ) {
-				String symbol = (String)i.next();
-				fUtil.generateMarker(file, -1, "Found a symbol definition: "+symbol, severity, symbol);
+			if (translatedIncludes.size() > 0 || symbols.size() > 0) {
+				ScannerInfoCollector.getInstance().
+					contributeToScannerConfig(project, translatedIncludes, symbols, targetSpecificOptions);
+				
+				TraceUtil.outputTrace("Discovered scanner info for file \'" + fileName + '\'',	//$NON-NLS-1$
+						"Include paths", includes, translatedIncludes, "Defined symbols", symbols);	//$NON-NLS-1$ //$NON-NLS-2$
 			}
-			
 		}
 		return rc;
 	}
Index: src/org/eclipse/cdt/make/internal/core/scannerconfig/gnu/GCCSpecsConsoleParser.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/internal/core/scannerconfig/gnu/GCCSpecsConsoleParser.java,v
retrieving revision 1.1
diff -u -r1.1 GCCSpecsConsoleParser.java
--- src/org/eclipse/cdt/make/internal/core/scannerconfig/gnu/GCCSpecsConsoleParser.java	16 Mar 2004 20:35:25 -0000	1.1
+++ src/org/eclipse/cdt/make/internal/core/scannerconfig/gnu/GCCSpecsConsoleParser.java	19 Apr 2004 21:10:57 -0000
@@ -17,6 +17,7 @@
 import org.eclipse.cdt.make.core.scannerconfig.IScannerInfoConsoleParser;
 import org.eclipse.cdt.make.internal.core.scannerconfig.IScannerInfoConsoleParserUtility;
 import org.eclipse.cdt.make.internal.core.scannerconfig.ScannerInfoCollector;
+import org.eclipse.cdt.make.internal.core.scannerconfig.util.TraceUtil;
 import org.eclipse.core.resources.IProject;
 
 /**
@@ -94,7 +95,9 @@
 		}
 			
 		ScannerInfoCollector.getInstance().contributeToScannerConfig(project, includes, symbols, null);
-			
+		TraceUtil.outputTrace("Scanner info from \'specs\' file",	//$NON-NLS-1$
+				"Include paths", includes, new ArrayList(), "Defined symbols", symbols);	//$NON-NLS-1$ //$NON-NLS-2$);
+		
 		return rc;
 	}
 
Index: .options
===================================================================
RCS file: .options
diff -N .options
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ .options	1 Jan 1970 00:00:00 -0000
@@ -0,0 +1,4 @@
+org.eclipse.cdt.make.core/debug=true
+
+# Reports scanner config discovery activity
+org.eclipse.cdt.make.core/debug/scdiscovery=false
Index: src/org/eclipse/cdt/make/internal/core/scannerconfig/util/TraceUtil.java
===================================================================
RCS file: src/org/eclipse/cdt/make/internal/core/scannerconfig/util/TraceUtil.java
diff -N src/org/eclipse/cdt/make/internal/core/scannerconfig/util/TraceUtil.java
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ src/org/eclipse/cdt/make/internal/core/scannerconfig/util/TraceUtil.java	1 Jan 1970 00:00:00 -0000
@@ -0,0 +1,76 @@
+/**********************************************************************
+ * Copyright (c) 2004 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Common Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/cpl-v10.html
+ * 
+ * Contributors: 
+ * IBM - Initial API and implementation
+ **********************************************************************/
+package org.eclipse.cdt.make.internal.core.scannerconfig.util;
+
+import java.util.Iterator;
+import java.util.List;
+
+/**
+ * Tracebility related utility functions
+ *
+ * @author vhirsl
+ */
+public class TraceUtil {
+	public static boolean SCANNER_CONFIG = false;
+	
+	public static boolean isTracing() {
+		return SCANNER_CONFIG;
+	}
+	
+	public static void outputTrace(String prefix, String msg, String postfix) {
+		System.out.println(prefix + ' ' + msg + ' ' + postfix);
+	}
+	
+	/**
+	 * For traces of type:
+	 *     Title:
+	 *         Subtitle1:
+	 *             item1[0]
+	 *             item1[1]
+	 *             ...
+	 *         Subtitle2:
+	 *             item2[0]
+	 *             item2[1]
+	 *             ...
+	 * @param title
+	 * @param col1
+	 * @param col2
+	 */
+	public static void outputTrace(String title, String subtitle1, List item1, List item1new, String subtitle2, List item2) {
+		if (isTracing()) {
+			System.out.println();
+			System.out.println(title);
+			final String prefix = "  ";	//$NON-NLS-1$
+			final String doublePrefix = "    ";	//$NON-NLS-1$
+			System.out.println(prefix + subtitle1 + " (" + item1.size() + "):");	//$NON-NLS-1$ //$NON-NLS-2$
+			int count = 0;
+			for (Iterator i = item1.iterator(), j = item1new.iterator(); i.hasNext(); ) {
+				System.out.println(doublePrefix + String.valueOf(++count) + "\t\'" +(String)i.next() + (j.hasNext()?"\' -> \'" + (String)j.next():"") + '\'');	//$NON-NLS-1$ //$NON-NLS-2$
+			}
+			System.out.println(prefix + subtitle2 + " (" + item2.size() + "):");	//$NON-NLS-1$
+			count = 0;
+			for (Iterator i = item2.iterator(); i.hasNext(); ) {
+				System.out.println(doublePrefix + String.valueOf(++count) + "\t\'" + (String)i.next() + '\'');	//$NON-NLS-1$
+			}
+		}
+	}
+
+	/**
+	 * @param string
+	 * @param line
+	 */
+	public static void outputError(String string, String line) {
+		if (isTracing()) {
+			System.out.println();
+			System.out.println("Error: " + string + line); //$NON-NLS-1$
+		}
+	}
+}
Index: src/org/eclipse/cdt/make/ui/dialogs/BuildPathInfoBlock.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.make.ui/src/org/eclipse/cdt/make/ui/dialogs/BuildPathInfoBlock.java,v
retrieving revision 1.8
diff -u -r1.8 BuildPathInfoBlock.java
--- src/org/eclipse/cdt/make/ui/dialogs/BuildPathInfoBlock.java	15 Apr 2004 19:01:33 -0000	1.8
+++ src/org/eclipse/cdt/make/ui/dialogs/BuildPathInfoBlock.java	19 Apr 2004 21:11:17 -0000
@@ -228,7 +228,12 @@
 		}
 		// First store scanner config options
 		if (scOptionsDialog.isInitialized()) {
-			scOptionsDialog.performApply(monitor);
+			try {
+				scOptionsDialog.performApply(monitor);
+			} 
+			catch (CoreException e) {
+				// builder was disabled while scOptionsDialog was initialized
+			}
 		}
 		
 		IProject project = getContainer().getProject();
Index: src/org/eclipse/cdt/make/ui/dialogs/ScannerConfigOptionsDialog.java
===================================================================
RCS file: /home/tools/org.eclipse.cdt.make.ui/src/org/eclipse/cdt/make/ui/dialogs/ScannerConfigOptionsDialog.java,v
retrieving revision 1.1
diff -u -r1.1 ScannerConfigOptionsDialog.java
--- src/org/eclipse/cdt/make/ui/dialogs/ScannerConfigOptionsDialog.java	15 Apr 2004 19:01:33 -0000	1.1
+++ src/org/eclipse/cdt/make/ui/dialogs/ScannerConfigOptionsDialog.java	19 Apr 2004 21:11:18 -0000
@@ -202,7 +202,7 @@
 				fInfo = MakeCorePlugin.createScannerConfigBuildInfo(project, ScannerConfigBuilder.BUILDER_ID);
 			}
 			catch (CoreException e) {
-//				fInitialized = false;
+				fInitialized = false;
 				fInfo = MakeCorePlugin.createScannerConfigBuildInfo(fPrefs, ScannerConfigBuilder.BUILDER_ID, true);
 			}
 		}

Back to the top