diff --git a/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/internal/core/scannerconfig/AbstractDiscoveredPathContainer.java b/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/internal/core/scannerconfig/AbstractDiscoveredPathContainer.java deleted file mode 100644 index 07729f0b42f..00000000000 --- a/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/internal/core/scannerconfig/AbstractDiscoveredPathContainer.java +++ /dev/null @@ -1,85 +0,0 @@ -/*********************************************************************** - * Copyright (c) 2004 IBM Corporation and others. - * All rights reserved. This program and the accompanying materials - * are made available under the terms of the Eclipse Public License v1.0 - * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/epl-v10.html - * - * Contributors: - * IBM - Initial API and implementation - ***********************************************************************/ -package org.eclipse.cdt.make.internal.core.scannerconfig; - -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.Map.Entry; - -import org.eclipse.cdt.core.model.CoreModel; -import org.eclipse.cdt.core.model.IPathEntry; -import org.eclipse.cdt.core.model.IPathEntryContainer; -import org.eclipse.cdt.make.core.MakeCorePlugin; -import org.eclipse.cdt.make.core.scannerconfig.IDiscoveredPathManager.IDiscoveredPathInfo; -import org.eclipse.cdt.make.internal.core.MakeMessages; -import org.eclipse.core.resources.IProject; -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.IPath; -import org.eclipse.core.runtime.Path; - -public abstract class AbstractDiscoveredPathContainer implements IPathEntryContainer { - public static final IPath CONTAINER_ID = new Path("org.eclipse.cdt.make.core.DISCOVERED_SCANNER_INFO"); //$NON-NLS-1$ - - protected final IProject fProject; - - public AbstractDiscoveredPathContainer(IProject project) { - fProject = project; - } - - public IPathEntry[] getPathEntries() { - IPathEntry[] fPathEntries; - try { - fPathEntries = getPathEntries(getPathEntryMap(), fProject); - } catch (CoreException e) { - MakeCorePlugin.log(e); - return new IPathEntry[0]; - } - return fPathEntries; - } - - abstract protected Map getPathEntryMap(); - - public String getDescription() { - return MakeMessages.getString("DiscoveredContainer.description"); //$NON-NLS-1$ - } - - public IPath getPath() { - return CONTAINER_ID; - } - - public static IPathEntry[] getPathEntries(Map pathEntryMap, IProject project) throws CoreException { - IPathEntry[] entries = (IPathEntry[])pathEntryMap.get(project); - if (entries == null) { - entries = computeNewPathEntries(project); - pathEntryMap.put(project, entries); - } - return entries; - } - - private static IPathEntry[] computeNewPathEntries(IProject project) throws CoreException { - IDiscoveredPathInfo info = MakeCorePlugin.getDefault().getDiscoveryManager().getDiscoveredInfo(project); - IPath[] includes = info.getIncludePaths(); - Map syms = info.getSymbols(); - List entries = new ArrayList(includes.length + syms.size()); - for (int i = 0; i < includes.length; i++) { - entries.add(CoreModel.newIncludeEntry(Path.EMPTY, Path.EMPTY, includes[i], true)); //$NON-NLS-1$ //$NON-NLS-2$ - } - Iterator iter = syms.entrySet().iterator(); - while (iter.hasNext()) { - Entry entry = (Entry)iter.next(); - entries.add(CoreModel.newMacroEntry(Path.EMPTY, (String)entry.getKey(), (String)entry.getValue())); //$NON-NLS-1$ - } - return (IPathEntry[])entries.toArray(new IPathEntry[entries.size()]); - } - -} diff --git a/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/internal/core/scannerconfig/DiscoveredPathContainer.java b/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/internal/core/scannerconfig/DiscoveredPathContainer.java index a0b2ef4c190..3f35b9e8be7 100644 --- a/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/internal/core/scannerconfig/DiscoveredPathContainer.java +++ b/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/internal/core/scannerconfig/DiscoveredPathContainer.java @@ -8,53 +8,80 @@ ******************************************************************************/ package org.eclipse.cdt.make.internal.core.scannerconfig; -import java.util.HashMap; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; import java.util.Map; +import java.util.Map.Entry; +import org.eclipse.cdt.core.model.CoreModel; +import org.eclipse.cdt.core.model.IPathEntry; +import org.eclipse.cdt.core.model.IPathEntryContainer; import org.eclipse.cdt.make.core.MakeCorePlugin; -import org.eclipse.cdt.make.core.scannerconfig.IDiscoveredPathManager.IDiscoveredInfoListener; import org.eclipse.cdt.make.core.scannerconfig.IDiscoveredPathManager.IDiscoveredPathInfo; -import org.eclipse.cdt.make.core.scannerconfig.IDiscoveredPathManager.IPerProjectDiscoveredPathInfo; +import org.eclipse.cdt.make.internal.core.MakeMessages; import org.eclipse.core.resources.IProject; +import org.eclipse.core.runtime.CoreException; +import org.eclipse.core.runtime.IPath; +import org.eclipse.core.runtime.Path; -public class DiscoveredPathContainer extends AbstractDiscoveredPathContainer { - static Map fgPathEntries; +public class DiscoveredPathContainer implements IPathEntryContainer { + public static final IPath CONTAINER_ID = new Path("org.eclipse.cdt.make.core.DISCOVERED_SCANNER_INFO"); //$NON-NLS-1$ - public DiscoveredPathContainer(IProject project) { - super(project); - initialize(); + protected final IProject fProject; + private IPathEntry[] fPathEntries; + + public DiscoveredPathContainer(IProject project) { + fProject = project; + fPathEntries = null; + } + +// public IPathEntry[] getPathEntries() { +// IPathEntry[] fPathEntries; +// try { +// fPathEntries = getPathEntries(getPathEntryMap()); +// } catch (CoreException e) { +// MakeCorePlugin.log(e); +// return new IPathEntry[0]; +// } +// return fPathEntries; +// } + + public String getDescription() { + return MakeMessages.getString("DiscoveredContainer.description"); //$NON-NLS-1$ } - private static void initialize() { - if (fgPathEntries == null) { - fgPathEntries = new HashMap(10); + public IPath getPath() { + return CONTAINER_ID; + } - IDiscoveredInfoListener listener = new IDiscoveredInfoListener() { - - public void infoRemoved(IDiscoveredPathInfo info) { - if (info != null && - info instanceof IPerProjectDiscoveredPathInfo) { - fgPathEntries.remove(info.getProject()); - } - } - - public void infoChanged(IDiscoveredPathInfo info) { - if (info != null && - info instanceof IPerProjectDiscoveredPathInfo) { - fgPathEntries.remove(info.getProject()); - } - } - - }; - MakeCorePlugin.getDefault().getDiscoveryManager().addDiscoveredInfoListener(listener); + public IPathEntry[] getPathEntries() { + if (fPathEntries == null) { + try { + fPathEntries = computeNewPathEntries(); + } + catch (CoreException e) { + MakeCorePlugin.log(e); + return new IPathEntry[0]; + } } + return fPathEntries; } - /* (non-Javadoc) - * @see org.eclipse.cdt.make.internal.core.scannerconfig.AbstractDiscoveredPathContainer#getPathEntryMap() - */ - protected Map getPathEntryMap() { - return fgPathEntries; + private IPathEntry[] computeNewPathEntries() throws CoreException { + IDiscoveredPathInfo info = MakeCorePlugin.getDefault().getDiscoveryManager().getDiscoveredInfo(fProject); + IPath[] includes = info.getIncludePaths(); + Map syms = info.getSymbols(); + List entries = new ArrayList(includes.length + syms.size()); + for (int i = 0; i < includes.length; i++) { + entries.add(CoreModel.newIncludeEntry(Path.EMPTY, Path.EMPTY, includes[i], true)); //$NON-NLS-1$ //$NON-NLS-2$ + } + Iterator iter = syms.entrySet().iterator(); + while (iter.hasNext()) { + Entry entry = (Entry)iter.next(); + entries.add(CoreModel.newMacroEntry(Path.EMPTY, (String)entry.getKey(), (String)entry.getValue())); //$NON-NLS-1$ + } + return (IPathEntry[])entries.toArray(new IPathEntry[entries.size()]); } } diff --git a/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/internal/core/scannerconfig/PerFileDiscoveredPathContainer.java b/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/internal/core/scannerconfig/PerFileDiscoveredPathContainer.java index cdbe949a98b..676431726ab 100644 --- a/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/internal/core/scannerconfig/PerFileDiscoveredPathContainer.java +++ b/build/org.eclipse.cdt.make.core/src/org/eclipse/cdt/make/internal/core/scannerconfig/PerFileDiscoveredPathContainer.java @@ -11,7 +11,6 @@ package org.eclipse.cdt.make.internal.core.scannerconfig; import java.util.ArrayList; -import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.Map.Entry; @@ -20,7 +19,6 @@ import org.eclipse.cdt.core.model.CoreModel; import org.eclipse.cdt.core.model.IPathEntry; import org.eclipse.cdt.core.model.IPathEntryContainerExtension; import org.eclipse.cdt.make.core.MakeCorePlugin; -import org.eclipse.cdt.make.core.scannerconfig.IDiscoveredPathManager.IDiscoveredInfoListener; import org.eclipse.cdt.make.core.scannerconfig.IDiscoveredPathManager.IDiscoveredPathInfo; import org.eclipse.cdt.make.core.scannerconfig.IDiscoveredPathManager.IPerFileDiscoveredPathInfo; import org.eclipse.core.resources.IProject; @@ -28,39 +26,11 @@ import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.Path; -public class PerFileDiscoveredPathContainer extends AbstractDiscoveredPathContainer +public class PerFileDiscoveredPathContainer extends DiscoveredPathContainer implements IPathEntryContainerExtension { - static Map fgPathEntries; - public PerFileDiscoveredPathContainer(IProject project) { super(project); - initialize(); - } - - private static void initialize() { - if (fgPathEntries == null) { - fgPathEntries = new HashMap(10); - - IDiscoveredInfoListener listener = new IDiscoveredInfoListener() { - - public void infoRemoved(IDiscoveredPathInfo info) { - if (info != null && - info instanceof IPerFileDiscoveredPathInfo) { - fgPathEntries.remove(info.getProject()); - } - } - - public void infoChanged(IDiscoveredPathInfo info) { - if (info != null && - info instanceof IPerFileDiscoveredPathInfo) { - fgPathEntries.remove(info.getProject()); - } - } - - }; - MakeCorePlugin.getDefault().getDiscoveryManager().addDiscoveredInfoListener(listener); - } } /* (non-Javadoc) @@ -112,11 +82,4 @@ public class PerFileDiscoveredPathContainer extends AbstractDiscoveredPathContai return (IPathEntry[]) entries.toArray(new IPathEntry[entries.size()]); } - /* (non-Javadoc) - * @see org.eclipse.cdt.make.internal.core.scannerconfig.AbstractDiscoveredPathContainer#getPathEntryMap() - */ - protected Map getPathEntryMap() { - return fgPathEntries; - } - } diff --git a/core/org.eclipse.cdt.core/ChangeLog b/core/org.eclipse.cdt.core/ChangeLog index 1ac7d089e73..e64acca6dfd 100644 --- a/core/org.eclipse.cdt.core/ChangeLog +++ b/core/org.eclipse.cdt.core/ChangeLog @@ -1,3 +1,13 @@ +2005-05-13 Vladimir Hirsl + Files with empty scanner info are not indexed anymore. + Info problem marker is created for each such file. + * index/org/eclipse/cdt/internal/core/index/domsourceindexer/DOMSourceIndexerRunner.java + * src/org/eclipse/cdt/internal/core/CCorePluginResources.properties + + Fix for resolving header file name for #include "..." preprocessor statements. + (Should use both local and system include paths) + * parser/org/eclipse/cdt/internal/core/parser/scanner2/BaseScanner.java + 2005-05-12 Alain Magloire For the per file container, make sure we clean the project info. * model/org/eclipse/cdt/internal/core/model/PathEntryManager.java diff --git a/core/org.eclipse.cdt.core/index/org/eclipse/cdt/internal/core/index/domsourceindexer/DOMSourceIndexerRunner.java b/core/org.eclipse.cdt.core/index/org/eclipse/cdt/internal/core/index/domsourceindexer/DOMSourceIndexerRunner.java index 7705fde0911..1df9c0ba19e 100644 --- a/core/org.eclipse.cdt.core/index/org/eclipse/cdt/internal/core/index/domsourceindexer/DOMSourceIndexerRunner.java +++ b/core/org.eclipse.cdt.core/index/org/eclipse/cdt/internal/core/index/domsourceindexer/DOMSourceIndexerRunner.java @@ -34,6 +34,9 @@ import org.eclipse.cdt.core.dom.ast.IASTTranslationUnit.IDependencyTree.IASTIncl import org.eclipse.cdt.core.index.IIndexDelta; import org.eclipse.cdt.core.model.CoreModel; import org.eclipse.cdt.core.model.ICModelMarker; +import org.eclipse.cdt.core.parser.IExtendedScannerInfo; +import org.eclipse.cdt.core.parser.IScannerInfo; +import org.eclipse.cdt.core.parser.IScannerInfoProvider; import org.eclipse.cdt.core.parser.ParseError; import org.eclipse.cdt.core.parser.ParserLanguage; import org.eclipse.cdt.internal.core.index.IIndex; @@ -76,22 +79,29 @@ public class DOMSourceIndexerRunner extends AbstractIndexer { } protected void indexFile(IFile file) throws IOException { - // Add the name of the file to the index - output.addIndexedFile(file.getFullPath().toString()); - int problems = indexer.indexProblemsEnabled(resourceFile.getProject()); // enable inclusion problem markers problems |= SourceIndexer.INCLUSION_PROBLEMS_BIT; setProblemMarkersEnabled(problems); requestRemoveMarkers(resourceFile, null); + // do not index the file if there is no scanner info + if (isScannerInfoEmpty(resourceFile)) { + // generate info marker - file is not indexed + addInfoMarker(resourceFile, CCorePlugin.getResourceString("DOMIndexerMarker.EmptyScannerInfo")); //$NON-NLS-1$ + return; + } + + // Add the name of the file to the index + output.addIndexedFile(file.getFullPath().toString()); + //C or CPP? ParserLanguage language = CoreModel.hasCCNature(resourceFile.getProject()) ? ParserLanguage.CPP : ParserLanguage.C; IASTTranslationUnit tu = null; long startTime = 0, parseTime = 0, endTime = 0; String error = null; - try { + try { if (AbstractIndexer.TIMING) startTime = System.currentTimeMillis(); @@ -135,30 +145,30 @@ public class DOMSourceIndexerRunner extends AbstractIndexer { throw (IOException) ex; } finally { - if (AbstractIndexer.TIMING) { - endTime = System.currentTimeMillis(); - if (error != null) { - errorCount++; - System.out.print(error + ':' + resourceFile.getName() + ':'); - if (!errors.containsKey(error)) { - errors.put(error, new Integer(0)); - } - errors.put(error, new Integer(((Integer) errors.get(error)).intValue()+1)); - } - System.out.println("DOM Indexer - Total Parse Time for " + resourceFile.getName() + ": " + (parseTime - startTime)); //$NON-NLS-1$ //$NON-NLS-2$ - System.out.println("DOM Indexer - Total Visit Time for " + resourceFile.getName() + ": " + (endTime - parseTime)); //$NON-NLS-1$ //$NON-NLS-2$ - totalParseTime += parseTime - startTime; - totalVisitTime += endTime - parseTime; - long currentTime = endTime - startTime; - System.out.println("DOM Indexer - Total Index Time for " + resourceFile.getName() + ": " + currentTime); //$NON-NLS-1$ //$NON-NLS-2$ - long tempTotaltime = indexer.getTotalIndexTime() + currentTime; - indexer.setTotalIndexTime(tempTotaltime); - System.out.println("DOM Indexer - Overall Index Time: " + tempTotaltime + "(" + totalParseTime + ", " + totalVisitTime + ") " + errorCount + " errors"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ - System.out.flush(); - } - if (AbstractIndexer.VERBOSE){ - AbstractIndexer.verbose("DOM AST TRAVERSAL FINISHED " + resourceFile.getName().toString()); //$NON-NLS-1$ - } + if (AbstractIndexer.TIMING) { + endTime = System.currentTimeMillis(); + if (error != null) { + errorCount++; + System.out.print(error + ':' + resourceFile.getName() + ':'); + if (!errors.containsKey(error)) { + errors.put(error, new Integer(0)); + } + errors.put(error, new Integer(((Integer) errors.get(error)).intValue()+1)); + } + System.out.println("DOM Indexer - Total Parse Time for " + resourceFile.getName() + ": " + (parseTime - startTime)); //$NON-NLS-1$ //$NON-NLS-2$ + System.out.println("DOM Indexer - Total Visit Time for " + resourceFile.getName() + ": " + (endTime - parseTime)); //$NON-NLS-1$ //$NON-NLS-2$ + totalParseTime += parseTime - startTime; + totalVisitTime += endTime - parseTime; + long currentTime = endTime - startTime; + System.out.println("DOM Indexer - Total Index Time for " + resourceFile.getName() + ": " + currentTime); //$NON-NLS-1$ //$NON-NLS-2$ + long tempTotaltime = indexer.getTotalIndexTime() + currentTime; + indexer.setTotalIndexTime(tempTotaltime); + System.out.println("DOM Indexer - Overall Index Time: " + tempTotaltime + "(" + totalParseTime + ", " + totalVisitTime + ") " + errorCount + " errors"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ //$NON-NLS-5$ + System.out.flush(); + } + if (AbstractIndexer.VERBOSE){ + AbstractIndexer.verbose("DOM AST TRAVERSAL FINISHED " + resourceFile.getName().toString()); //$NON-NLS-1$ + } // if the user disable problem reporting since we last checked, don't report the collected problems if (areProblemMarkersEnabled()) { reportProblems(); @@ -174,6 +184,46 @@ public class DOMSourceIndexerRunner extends AbstractIndexer { } } + /** + * @param IFile + * @return boolean + */ + private boolean isScannerInfoEmpty(IFile file) { + boolean rc = true; + IScannerInfoProvider provider = CCorePlugin.getDefault().getScannerInfoProvider(file.getProject()); + if (provider != null){ + IScannerInfo scanInfo = provider.getScannerInformation(file); + if (scanInfo != null) { + if (!scanInfo.getDefinedSymbols().isEmpty() || + scanInfo.getIncludePaths().length > 0) { + rc = false; + } + if (scanInfo instanceof IExtendedScannerInfo) { + IExtendedScannerInfo extScanInfo = (IExtendedScannerInfo) scanInfo; + if (extScanInfo.getLocalIncludePath().length > 0) + rc = false; + if (extScanInfo.getIncludeFiles().length > 0) { + rc = false; + for (int i = 0; i < extScanInfo.getIncludeFiles().length; i++) { + String includeFile = extScanInfo.getIncludeFiles()[i]; + /* See if this file has been encountered before */ + indexer.haveEncounteredHeader(resourceFile.getProject().getFullPath(), new Path(includeFile)); + } + } + if (extScanInfo.getMacroFiles().length > 0) { + rc = false; + for (int i = 0; i < extScanInfo.getIncludeFiles().length; i++) { + String macrosFile = extScanInfo.getMacroFiles()[i]; + /* See if this file has been encountered before */ + indexer.haveEncounteredHeader(resourceFile.getProject().getFullPath(), new Path(macrosFile)); + } + } + } + } + } + return rc; + } + /** * @param tree */ @@ -364,6 +414,38 @@ public class DOMSourceIndexerRunner extends AbstractIndexer { return (getProblemMarkersEnabled() & SourceIndexer.SEMANTIC_PROBLEMS_BIT) != 0; } + /** + * @param file + * @param message + */ + private void addInfoMarker(IFile file, String message) { + try { + IMarker[] markers = file.findMarkers(ICModelMarker.INDEXER_MARKER, true, IResource.DEPTH_ZERO); + + boolean newProblem = true; + + if (markers.length > 0) { + IMarker tempMarker = null; + String tempMsgString = null; + + for (int i=0; i 0 ) - includePathsToUse = locIncludePaths; + if( local && locIncludePaths != null && locIncludePaths.length > 0 ) { + includePathsToUse = new String[locIncludePaths.length + stdIncludePaths.length]; + System.arraycopy(locIncludePaths, 0, includePathsToUse, 0, locIncludePaths.length); + System.arraycopy(stdIncludePaths, 0, includePathsToUse, locIncludePaths.length, stdIncludePaths.length); + } if (includePathsToUse != null ) { int startpos = 0; diff --git a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/core/CCorePluginResources.properties b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/core/CCorePluginResources.properties index d1e5a198653..021b574ca70 100644 --- a/core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/core/CCorePluginResources.properties +++ b/core/org.eclipse.cdt.core/src/org/eclipse/cdt/internal/core/CCorePluginResources.properties @@ -66,4 +66,5 @@ Util.unknownFormat=Unknown debug format PathEntryVariableResolver.0=CDT PathEntry variable not specified CTagsIndexMarker.fileMissing=CTags output file missing -CTagsIndexMarker.CTagsMissing=CTags not installed or not in path \ No newline at end of file +CTagsIndexMarker.CTagsMissing=CTags not installed or not in path +DOMIndexerMarker.EmptyScannerInfo=File not indexed because it was not built