diff --git a/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/core/scannerconfig/IScannerInfoCollector2.java b/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/core/scannerconfig/IScannerInfoCollector2.java index 005384bf4a0..39a8adf5061 100644 --- a/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/core/scannerconfig/IScannerInfoCollector2.java +++ b/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/core/scannerconfig/IScannerInfoCollector2.java @@ -42,26 +42,4 @@ public interface IScannerInfoCollector2 extends IScannerInfoCollector { */ public IDiscoveredPathInfo createPathInfoObject(); -// /** -// * Answers a map of collected defines that the the compiler uses by default. -// * The symbols are defined in the map as a (macro, value) pair as follows -// *

-DFOO will be stored as ("FOO","") -// *

-DFOO=BAR will be stored as ("FOO","BAR") -// *

Duplicates will not be stored in the map and any whitespaces in -// * the macro or value will be trimmed out. -// * -// * @return a Map of defined symbols and values -// */ -// public Map getDefinedSymbols(); -// -// -// /** -// * Answers a List of unique built-in includes paths that have been -// * collected for the receiver. The paths are stored as String in the proper -// * format for the host tools. -// * -// * @return a List of built-in compiler include search paths. -// */ -// public List getIncludePaths(); - } diff --git a/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/core/scannerconfig/ScannerInfoTypes.java b/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/core/scannerconfig/ScannerInfoTypes.java index 4f4c37002ba..98660365946 100644 --- a/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/core/scannerconfig/ScannerInfoTypes.java +++ b/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/core/scannerconfig/ScannerInfoTypes.java @@ -17,11 +17,12 @@ package org.eclipse.cdt.make.core.scannerconfig; */ public class ScannerInfoTypes { public static final ScannerInfoTypes COMPILER_COMMAND = new ScannerInfoTypes(1); // CCommandDSC - public static final ScannerInfoTypes INCLUDE_PATHS = new ScannerInfoTypes(2); - public static final ScannerInfoTypes QUOTE_INCLUDE_PATHS = new ScannerInfoTypes(3); - public static final ScannerInfoTypes SYMBOL_DEFINITIONS = new ScannerInfoTypes(4); - public static final ScannerInfoTypes TARGET_SPECIFIC_OPTION = new ScannerInfoTypes(5) ; - public static final ScannerInfoTypes COMPILER_VERSION_INFO = new ScannerInfoTypes(6); + public static final ScannerInfoTypes UNDISCOVERED_COMPILER_COMMAND = new ScannerInfoTypes(2); // CCommandDSC whose SI has not been resolved + public static final ScannerInfoTypes INCLUDE_PATHS = new ScannerInfoTypes(10); + public static final ScannerInfoTypes QUOTE_INCLUDE_PATHS = new ScannerInfoTypes(11); + public static final ScannerInfoTypes SYMBOL_DEFINITIONS = new ScannerInfoTypes(12); + public static final ScannerInfoTypes TARGET_SPECIFIC_OPTION = new ScannerInfoTypes(13) ; + public static final ScannerInfoTypes COMPILER_VERSION_INFO = new ScannerInfoTypes(14); private final int _enum; diff --git a/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/internal/core/scannerconfig/DiscoveredPathManager.java b/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/internal/core/scannerconfig/DiscoveredPathManager.java index 321c6517fb0..1482e669be9 100644 --- a/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/internal/core/scannerconfig/DiscoveredPathManager.java +++ b/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/internal/core/scannerconfig/DiscoveredPathManager.java @@ -29,6 +29,7 @@ import org.eclipse.cdt.make.core.scannerconfig.ScannerConfigScope; import org.eclipse.cdt.make.internal.core.MakeMessages; import org.eclipse.cdt.make.internal.core.scannerconfig2.SCProfileInstance; import org.eclipse.cdt.make.internal.core.scannerconfig2.ScannerConfigProfileManager; +import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IResource; import org.eclipse.core.resources.IResourceChangeEvent; @@ -170,7 +171,8 @@ public class DiscoveredPathManager implements IDiscoveredPathManager, IResourceC if (changedResources != null) { List changeDelta = new ArrayList(changedResources.size()); for (Iterator i = changedResources.iterator(); i.hasNext(); ) { - IPath path = (IPath) i.next(); + IFile file = (IFile) i.next(); + IPath path = file.getFullPath(); changeDelta.add(new PathEntryContainerChanged(path, 3)); // both include paths and symbols changed } CoreModel.pathEntryContainerUpdates(container, diff --git a/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/internal/core/scannerconfig/gnu/AbstractGCCBOPConsoleParser.java b/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/internal/core/scannerconfig/gnu/AbstractGCCBOPConsoleParser.java index 789a24e7f2f..636f9ec61b4 100644 --- a/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/internal/core/scannerconfig/gnu/AbstractGCCBOPConsoleParser.java +++ b/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/internal/core/scannerconfig/gnu/AbstractGCCBOPConsoleParser.java @@ -61,7 +61,7 @@ public abstract class AbstractGCCBOPConsoleParser implements IScannerInfoConsole bMultiline = false; sMultiline = ""; //$NON-NLS-1$ } - TraceUtil.outputTrace("AbstractGCCBOPConsoleParser parsing line:", TraceUtil.EOL, line); //$NON-NLS-1$ //$NON-NLS-2$ + TraceUtil.outputTrace("AbstractGCCBOPConsoleParser parsing line: [", line, "]"); //$NON-NLS-1$ //$NON-NLS-2$ // make\[[0-9]*\]: error_desc int firstColon= line.indexOf(':'); String make = line.substring(0, firstColon + 1); diff --git a/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/internal/core/scannerconfig/gnu/GCCPerFileBOPConsoleParser.java b/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/internal/core/scannerconfig/gnu/GCCPerFileBOPConsoleParser.java index eca0008cac8..8da0e9a2e8b 100644 --- a/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/internal/core/scannerconfig/gnu/GCCPerFileBOPConsoleParser.java +++ b/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/internal/core/scannerconfig/gnu/GCCPerFileBOPConsoleParser.java @@ -123,18 +123,18 @@ public class GCCPerFileBOPConsoleParser extends AbstractGCCBOPConsoleParser { } if (fUtil != null) { IPath pFilePath = fUtil.getAbsolutePath(filePath); - String longFileName = pFilePath.toString(); String shortFileName = pFilePath.removeFileExtension().lastSegment(); String genericLine = line.replaceAll(filePath, "LONG_NAME"); //$NON-NLS-1$ genericLine = genericLine.replaceAll(shortFileName+"\\.", "SHORT_NAME\\."); //$NON-NLS-1$ //$NON-NLS-2$ CCommandDSC cmd = fUtil.getNewCCommandDSC(genericLine, extensionsIndex > 0); - List cmdList = new ArrayList(); - cmdList.add(cmd); - Map sc = new HashMap(1); - sc.put(ScannerInfoTypes.COMPILER_COMMAND, cmdList); if (getProject().getLocation().isPrefixOf(pFilePath)) { - IPath relPath = pFilePath.removeFirstSegments(getProject().getLocation().segmentCount()); + List cmdList = new ArrayList(); + cmdList.add(cmd); + Map sc = new HashMap(1); + sc.put(ScannerInfoTypes.COMPILER_COMMAND, cmdList); + + IPath relPath = pFilePath.removeFirstSegments(getProject().getLocation().segmentCount()); IFile file = getProject().getFile(relPath); getCollector().contributeToScannerConfig(file, sc); } diff --git a/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/internal/core/scannerconfig/gnu/GCCPerFileSIPConsoleParser.java b/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/internal/core/scannerconfig/gnu/GCCPerFileSIPConsoleParser.java index 642e041db39..13d1afb5217 100644 --- a/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/internal/core/scannerconfig/gnu/GCCPerFileSIPConsoleParser.java +++ b/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/internal/core/scannerconfig/gnu/GCCPerFileSIPConsoleParser.java @@ -39,7 +39,6 @@ public class GCCPerFileSIPConsoleParser implements IScannerInfoConsoleParser { private final static int QUOTE_INCLUDES = 1; private final static int INCLUDES = 2; - private IProject fProject = null; private IScannerInfoCollector fCollector = null; private int expectingIncludes = NO_INCLUDES; @@ -52,7 +51,6 @@ public class GCCPerFileSIPConsoleParser implements IScannerInfoConsoleParser { * @see org.eclipse.cdt.make.core.scannerconfig.IScannerInfoConsoleParser#startup(org.eclipse.core.resources.IProject, org.eclipse.core.runtime.IPath, org.eclipse.cdt.make.core.scannerconfig.IScannerInfoCollector, org.eclipse.cdt.core.IMarkerGenerator) */ public void startup(IProject project, IPath workingDirectory, IScannerInfoCollector collector, IMarkerGenerator markerGenerator) { - this.fProject = project; this.fCollector = collector; } @@ -61,7 +59,7 @@ public class GCCPerFileSIPConsoleParser implements IScannerInfoConsoleParser { */ public boolean processLine(String line) { boolean rc = false; - TraceUtil.outputTrace("GCCPerFileSIPConsoleParser parsing line:", TraceUtil.EOL, line); //$NON-NLS-1$ //$NON-NLS-2$ + TraceUtil.outputTrace("GCCPerFileSIPConsoleParser parsing line: [", line, "]"); //$NON-NLS-1$//$NON-NLS-2$ if (line.startsWith(COMMAND_ID_BEGIN)) { commandId = Integer.parseInt(line.substring(COMMAND_ID_BEGIN.length())); diff --git a/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/internal/core/scannerconfig/gnu/GCCSpecsConsoleParser.java b/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/internal/core/scannerconfig/gnu/GCCSpecsConsoleParser.java index 5e99e58ac58..85d2ea4f2a6 100644 --- a/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/internal/core/scannerconfig/gnu/GCCSpecsConsoleParser.java +++ b/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/internal/core/scannerconfig/gnu/GCCSpecsConsoleParser.java @@ -54,7 +54,7 @@ public class GCCSpecsConsoleParser implements IScannerInfoConsoleParser { */ public boolean processLine(String line) { boolean rc = false; - TraceUtil.outputTrace("GCCSpecsConsoleParser parsing line:", TraceUtil.EOL, line); //$NON-NLS-1$ //$NON-NLS-2$ + TraceUtil.outputTrace("GCCSpecsConsoleParser parsing line: [", line, "]"); //$NON-NLS-1$ //$NON-NLS-2$ // contribution of -dD option if (line.startsWith(DEFINE)) { diff --git a/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/internal/core/scannerconfig/util/TraceUtil.java b/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/internal/core/scannerconfig/util/TraceUtil.java index f55fc92df1e..7cff40a6cd3 100644 --- a/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/internal/core/scannerconfig/util/TraceUtil.java +++ b/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/internal/core/scannerconfig/util/TraceUtil.java @@ -44,7 +44,7 @@ public class TraceUtil { public static void outputTrace(String prefix, String msg, String postfix) { if (isTracing()) { - System.out.println(); + //System.out.println(); System.out.println(prefix + ' ' + msg + ' ' + postfix); } } @@ -66,7 +66,7 @@ public class TraceUtil { */ public static void outputTrace(String title, String subtitle1, List item1, List item1new, String subtitle2, List item2) { if (isTracing()) { - System.out.println(); + //System.out.println(); System.out.println(title); final String prefix = " "; //$NON-NLS-1$ final String doublePrefix = " "; //$NON-NLS-1$ diff --git a/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/internal/core/scannerconfig2/PerFileSICollector.java b/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/internal/core/scannerconfig2/PerFileSICollector.java index c4bbd1269ff..cdc8c044738 100644 --- a/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/internal/core/scannerconfig2/PerFileSICollector.java +++ b/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/internal/core/scannerconfig2/PerFileSICollector.java @@ -123,6 +123,7 @@ public class PerFileSICollector implements IScannerInfoCollector2, IScannerInfoC IFile file = project.getFile(fileName); addCompilerCommand(file, command); } + applyFileDeltas(); } } } @@ -149,7 +150,9 @@ public class PerFileSICollector implements IScannerInfoCollector2, IScannerInfoC private ScannerInfoData sid; // scanner info data - private List siChangedForFileList; // list of files for which scanner info has changed +// private List siChangedForFileList; // list of files for which scanner info has changed + private Map siChangedForFileMap; // (file, comandId) map for deltas + private List siChangedForCommandIdList; // list of command ids for which scanner info has changed private SortedSet freeCommandIdPool; // sorted set of free command ids private int commandIdCounter = 0; @@ -162,8 +165,10 @@ public class PerFileSICollector implements IScannerInfoCollector2, IScannerInfoC public PerFileSICollector() { sid = new ScannerInfoData(); - siChangedForFileList = new ArrayList(); - +// siChangedForFileList = new ArrayList(); + siChangedForFileMap = new HashMap(); + siChangedForCommandIdList = new ArrayList(); + freeCommandIdPool = new TreeSet(); siAvailable = false; } @@ -267,38 +272,103 @@ public class PerFileSICollector implements IScannerInfoCollector2, IScannerInfoC cmd.setCommandId(commandId); sid.commandIdCommandMap.put(cmd.getCommandIdAsInteger(), cmd); } - Integer commandId = cmd.getCommandIdAsInteger(); - // update sid.commandIdToFilesMap - Set fileSet = (Set) sid.commandIdToFilesMap.get(commandId); - if (fileSet == null) { - fileSet = new HashSet(); - sid.commandIdToFilesMap.put(commandId, fileSet); - } - if (fileSet.add(file)) { - // update fileToCommandIdsMap - boolean change = true; - Integer oldCommandId = (Integer) sid.fileToCommandIdMap.get(file); - if (oldCommandId != null) { - if (oldCommandId.equals(commandId)) { - change = false; - } - else { - Set oldFileSet = (Set) sid.commandIdToFilesMap.get(oldCommandId); - oldFileSet.remove(file); - } - } - if (change) { - sid.fileToCommandIdMap.put(file, commandId); - // TODO generate change event for this resource - IPath path = file.getFullPath(); - if (!siChangedForFileList.contains(path)) { - siChangedForFileList.add(path); - } - } - } + + generateFileDelta(file, cmd); +// updateFileForCommand(file, cmd); + + +// Integer commandId = cmd.getCommandIdAsInteger(); +// // update sid.commandIdToFilesMap +// Set fileSet = (Set) sid.commandIdToFilesMap.get(commandId); +// if (fileSet == null) { +// fileSet = new HashSet(); +// sid.commandIdToFilesMap.put(commandId, fileSet); +// } +// if (fileSet.add(file)) { +// // update fileToCommandIdsMap +// boolean change = true; +// Integer oldCommandId = (Integer) sid.fileToCommandIdMap.get(file); +// if (oldCommandId != null) { +// if (oldCommandId.equals(commandId)) { +// change = false; +// } +// else { +// Set oldFileSet = (Set) sid.commandIdToFilesMap.get(oldCommandId); +// oldFileSet.remove(file); +// } +// } +// if (change) { +// sid.fileToCommandIdMap.put(file, commandId); +// // TODO generate change event for this resource +// IPath path = file.getFullPath(); +// if (!siChangedForFileList.contains(path)) { +// siChangedForFileList.add(path); +// } +// } +// } } - private void removeUnusedCommands() { + /** + * @param file + * @param cmd + */ + private void generateFileDelta(IFile file, CCommandDSC cmd) { + Integer commandId = cmd.getCommandIdAsInteger(); + Integer oldCommandId = (Integer) sid.fileToCommandIdMap.get(file); + + if (oldCommandId != null && oldCommandId.equals(commandId)) { + // already exists; remove form delta + siChangedForFileMap.remove(file); + } + else { + // new (file, commandId) pair + siChangedForFileMap.put(file, commandId); + } + } + + /** + * @param file + * @param cmd + */ + private void applyFileDeltas() { + for (Iterator i = siChangedForFileMap.keySet().iterator(); i.hasNext(); ) { + IFile file = (IFile) i.next(); + Integer commandId = (Integer) siChangedForFileMap.get(file); + if (commandId != null) { + + // update sid.commandIdToFilesMap + Set fileSet = (Set) sid.commandIdToFilesMap.get(commandId); + if (fileSet == null) { + fileSet = new HashSet(); + sid.commandIdToFilesMap.put(commandId, fileSet); + } + if (fileSet.add(file)) { + // update fileToCommandIdsMap + boolean change = true; + Integer oldCommandId = (Integer) sid.fileToCommandIdMap.get(file); + if (oldCommandId != null) { + if (oldCommandId.equals(commandId)) { + change = false; + } + else { + Set oldFileSet = (Set) sid.commandIdToFilesMap.get(oldCommandId); + oldFileSet.remove(file); + } + } + if (change) { + sid.fileToCommandIdMap.put(file, commandId); + // TODO generate change event for this resource +// IPath path = file.getFullPath(); +// if (!siChangedForFileList.contains(path)) { +// siChangedForFileList.add(path); +// } + } + } + } + } + } + + private void removeUnusedCommands() { for (Iterator i = sid.commandIdToFilesMap.entrySet().iterator(); i.hasNext(); ) { Entry entry = (Entry) i.next(); Integer cmdId = (Integer) entry.getKey(); @@ -341,25 +411,29 @@ public class PerFileSICollector implements IScannerInfoCollector2, IScannerInfoC monitor = new NullProgressMonitor(); } monitor.beginTask(MakeMessages.getString("ScannerInfoCollector.Processing"), 100); //$NON-NLS-1$ - removeUnusedCommands(); +// removeUnusedCommands(); monitor.subTask(MakeMessages.getString("ScannerInfoCollector.Processing")); //$NON-NLS-1$ - if (!siChangedForFileList.isEmpty()) { -// MakeCorePlugin.getDefault().getDiscoveryManager().getDiscoveredInfo(project); -// DiscoveredScannerInfoStore.getInstance().loadDiscoveredScannerInfoFromState(project, this); + if (scannerInfoChanged()) { + applyFileDeltas(); + removeUnusedCommands(); monitor.worked(50); monitor.subTask(MakeMessages.getString("ScannerInfoCollector.Updating") + project.getName()); //$NON-NLS-1$ try { // update scanner configuration +// MakeCorePlugin.getDefault().getDiscoveryManager(). +// updateDiscoveredInfo(createPathInfoObject(), siChangedForFileList); MakeCorePlugin.getDefault().getDiscoveryManager(). - updateDiscoveredInfo(createPathInfoObject(), siChangedForFileList); - // DiscoveredScannerInfoStore.getInstance().saveDiscoveredScannerInfoToState(project, this); + updateDiscoveredInfo(createPathInfoObject(), new ArrayList(siChangedForFileMap.keySet())); monitor.worked(50); } catch (CoreException e) { MakeCorePlugin.log(e); } - siChangedForFileList.clear(); } - monitor.done(); +// siChangedForFileList.clear(); + siChangedForFileMap.clear(); + siChangedForCommandIdList.clear(); + + monitor.done(); } /* (non-Javadoc) @@ -369,11 +443,16 @@ public class PerFileSICollector implements IScannerInfoCollector2, IScannerInfoC return new PerFileDiscoveredPathInfo(); } + private boolean scannerInfoChanged() { +// return !siChangedForFileList.isEmpty(); + return !siChangedForFileMap.isEmpty(); + } + /* (non-Javadoc) * @see org.eclipse.cdt.make.core.scannerconfig.IScannerInfoCollector#getCollectedScannerInfo(java.lang.Object, org.eclipse.cdt.make.core.scannerconfig.ScannerInfoTypes) */ public List getCollectedScannerInfo(Object resource, ScannerInfoTypes type) { - List rv = null; + List rv = new ArrayList(); // check the resource String errorMessage = null; if (resource == null) { @@ -394,7 +473,6 @@ public class PerFileSICollector implements IScannerInfoCollector2, IScannerInfoC } else if (project.equals(((IResource)resource).getProject())) { if (type.equals(ScannerInfoTypes.COMPILER_COMMAND)) { - rv = new ArrayList(); for (Iterator i = sid.commandIdCommandMap.keySet().iterator(); i.hasNext(); ) { Integer cmdId = (Integer) i.next(); Set fileSet = (Set) sid.commandIdToFilesMap.get(cmdId); @@ -403,6 +481,30 @@ public class PerFileSICollector implements IScannerInfoCollector2, IScannerInfoC } } } + else if (type.equals(ScannerInfoTypes.UNDISCOVERED_COMPILER_COMMAND)) { +// if (!siChangedForFileList.isEmpty()) { + if (scannerInfoChanged()) { + if (siChangedForCommandIdList.isEmpty()) { +// for (Iterator i = siChangedForFileList.iterator(); i.hasNext(); ) { + for (Iterator i = siChangedForFileMap.keySet().iterator(); i.hasNext(); ) { +// IPath path = (IPath) i.next(); + IFile file = (IFile) i.next(); + Integer cmdId = (Integer) siChangedForFileMap.get(file); + if (cmdId != null) { + if (!siChangedForCommandIdList.contains(cmdId)) { + siChangedForCommandIdList.add(cmdId); + } + } + } + } + Collections.sort(siChangedForCommandIdList); + for (Iterator i = siChangedForCommandIdList.iterator(); i.hasNext(); ) { + Integer cmdId = (Integer) i.next(); + CCommandDSC command = (CCommandDSC) sid.commandIdCommandMap.get(cmdId); + rv.add(command); + } + } + } } return rv; } @@ -444,17 +546,20 @@ public class PerFileSICollector implements IScannerInfoCollector2, IScannerInfoC */ public void deleteAll(IResource resource) { if (resource.equals(project)) { - siChangedForFileList = new ArrayList(); +// siChangedForFileList = new ArrayList(); + siChangedForFileMap.clear(); Set changedFiles = sid.fileToCommandIdMap.keySet(); for (Iterator i = changedFiles.iterator(); i.hasNext(); ) { IFile file = (IFile) i.next(); - IPath path = file.getFullPath(); - siChangedForFileList.add(path); +// IPath path = file.getFullPath(); +// siChangedForFileList.add(path); + siChangedForFileMap.put(file, null); } sid = new ScannerInfoData(); - freeCommandIdPool = new TreeSet(); + commandIdCounter = 0; + freeCommandIdPool.clear(); siAvailable = false; } } @@ -621,23 +726,27 @@ public class PerFileSICollector implements IScannerInfoCollector2, IScannerInfoC return sid; } - /** - * @param path - * @return - */ - private CCommandDSC getCommand(IPath path) { - CCommandDSC cmd = null; - IFile file = project.getWorkspace().getRoot().getFile(path); - if (file != null) { - Integer cmdId = (Integer) sid.fileToCommandIdMap.get(file); - if (cmdId != null) { - // get the command - cmd = (CCommandDSC) sid.commandIdCommandMap.get(cmdId); - } - } - return cmd; - } + } + /** + * @param path + * @return + */ + private CCommandDSC getCommand(IPath path) { + IFile file = project.getWorkspace().getRoot().getFile(path); + return getCommand(file); + } + + private CCommandDSC getCommand(IFile file) { + CCommandDSC cmd = null; + if (file != null) { + Integer cmdId = (Integer) sid.fileToCommandIdMap.get(file); + if (cmdId != null) { + // get the command + cmd = (CCommandDSC) sid.commandIdCommandMap.get(cmdId); + } + } + return cmd; } } diff --git a/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/internal/core/scannerconfig2/SCDMakefileGenerator.java b/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/internal/core/scannerconfig2/SCDMakefileGenerator.java index c9742d99ff8..a61b864c54f 100644 --- a/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/internal/core/scannerconfig2/SCDMakefileGenerator.java +++ b/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/internal/core/scannerconfig2/SCDMakefileGenerator.java @@ -60,7 +60,7 @@ public class SCDMakefileGenerator extends DefaultRunSIProvider { if (collector instanceof IScannerInfoCollector2) { IScannerInfoCollector2 collector2 = (IScannerInfoCollector2) collector; List commands = collector2.getCollectedScannerInfo( - resource.getProject(), ScannerInfoTypes.COMPILER_COMMAND); + resource.getProject(), ScannerInfoTypes.UNDISCOVERED_COMPILER_COMMAND); if (commands != null && commands.size() > 0) { StringBuffer buffer = new StringBuffer(); diff --git a/build/org.eclipse.cdt.make.ui/src/org/eclipse/cdt/make/ui/dialogs/DiscoveryOptionsBlock.java b/build/org.eclipse.cdt.make.ui/src/org/eclipse/cdt/make/ui/dialogs/DiscoveryOptionsBlock.java index be65c13154d..96a8fa66a6e 100644 --- a/build/org.eclipse.cdt.make.ui/src/org/eclipse/cdt/make/ui/dialogs/DiscoveryOptionsBlock.java +++ b/build/org.eclipse.cdt.make.ui/src/org/eclipse/cdt/make/ui/dialogs/DiscoveryOptionsBlock.java @@ -279,7 +279,9 @@ public class DiscoveryOptionsBlock extends AbstractDiscoveryOptionsBlock { } getBuildInfo().save(); if (isProfileDifferentThenPersisted()) { - changeDiscoveryContainer(project); + if (project != null) { + changeDiscoveryContainer(project); + } updatePersistedProfile(); } } diff --git a/core/org.eclipse.cdt.core/ChangeLog b/core/org.eclipse.cdt.core/ChangeLog index 930bbd59915..c6aa1935052 100644 --- a/core/org.eclipse.cdt.core/ChangeLog +++ b/core/org.eclipse.cdt.core/ChangeLog @@ -1,3 +1,12 @@ +2005-05-10 Vladimir Hirsl + Fix for PR 94500: [Path Entry] Problem marker: Invalid project path: DISCOVERED_SCANNER_INFO + + * model/org/eclipse/cdt/internal/core/model/PathEntryUtil.java + + Fix for infinite loop in LocationMap.createSoleLocation(..). Courtesy of John C. + + * parser/org/eclipse/cdt/internal/core/parser/scanner2/LoactionMap.java + 2005-05-02 Vladimir Hirsl Fix for PR 92599: [Indexer] Remove annotation markers preference from DOMIndexer & friends Removed indexer problem markers property page block for DOMIndexer. diff --git a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/PathEntryUtil.java b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/PathEntryUtil.java index 66a581d170d..39a5d8f6e0c 100644 --- a/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/PathEntryUtil.java +++ b/core/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/PathEntryUtil.java @@ -424,7 +424,8 @@ public class PathEntryUtil { boolean recurseInContainers) { IProject project = cProject.getProject(); IPath path = entry.getPath(); - if (entry.getEntryKind() != IPathEntry.CDT_PROJECT) { + if (entry.getEntryKind() != IPathEntry.CDT_PROJECT && + entry.getEntryKind() != IPathEntry.CDT_CONTAINER) { if (!isValidWorkspacePath(project, path)) { return new CModelStatus( ICModelStatusConstants.INVALID_PATHENTRY, diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner2/LocationMap.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner2/LocationMap.java index 91a3f287573..812b7466737 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner2/LocationMap.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner2/LocationMap.java @@ -1740,7 +1740,7 @@ public class LocationMap implements ILocationResolver, IScannerPreprocessorLog { if (c.containsInDirective(offset, length)) { _CompositeContext parent = c.parent; while (!(parent instanceof _CompositeFileContext)) - parent = c.parent; + parent = parent.parent; _CompositeFileContext fc = (_CompositeFileContext) parent; return new FileLocation(fc.reader.filename, reconcileOffset(fc, c, offset), length); @@ -1758,7 +1758,7 @@ public class LocationMap implements ILocationResolver, IScannerPreprocessorLog { { _CompositeContext parent = c.parent; while (!(parent instanceof _CompositeFileContext)) - parent = c.parent; + parent = parent.parent; _CompositeFileContext fc = (_CompositeFileContext) parent; return new FileLocation(fc.reader.filename, reconcileOffset(fc, c, offset), length);