diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/indexer/IStandaloneScannerInfoProvider.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/indexer/IStandaloneScannerInfoProvider.java index 0e33a448c19..7ac5697dfb0 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/indexer/IStandaloneScannerInfoProvider.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/indexer/IStandaloneScannerInfoProvider.java @@ -15,8 +15,6 @@ import org.eclipse.cdt.core.parser.IScannerInfo; import org.eclipse.cdt.core.parser.IScannerInfoProvider; /** - * Returns a IScannerInfo for the given file by a path. - * * Similar to IScannerInfoProvider but computes the IScannerInfo * based on a String path instead of IResource. * @@ -24,5 +22,20 @@ import org.eclipse.cdt.core.parser.IScannerInfoProvider; */ public interface IStandaloneScannerInfoProvider { + /** + * Returns an IScannerInfo for the given file path, + * or an empty IScannerInfo object if the file path is invalid. + */ IScannerInfo getScannerInformation(String path); + + /** + * Returns an IScannerInfo when you don't necessary have access to a path. + * + * This is used by the "parse up front" feature. Since we are parsing + * files outside of the project a "default" IScannerInfo object + * is needed to get the minimal amount of available info in order + * to parse the file. + * @param linkageID + */ + IScannerInfo getDefaultScannerInformation(int linkageID); } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/indexer/StandaloneIndexer.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/indexer/StandaloneIndexer.java index c7faec4f8fd..9cf6c388de7 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/indexer/StandaloneIndexer.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/indexer/StandaloneIndexer.java @@ -98,6 +98,7 @@ public abstract class StandaloneIndexer { * be provided, but not both. If a single IScannerInfo object is provided * it will always be used. Otherwise the provider will be used. */ + @Deprecated protected IScannerInfo fScanner; /** @@ -158,6 +159,10 @@ public abstract class StandaloneIndexer { } }; + /** + * @deprecated Its better to provide a scanner info provider instead. + */ + @Deprecated public StandaloneIndexer(IWritableIndex index, boolean indexAllFiles, ILanguageMapper mapper, IParserLogService log, IScannerInfo scanner) { fIndex = index; @@ -217,7 +222,10 @@ public abstract class StandaloneIndexer { /** * Returns the IScannerInfo that provides include paths and defined symbols. + * @deprecated Should probably be using a IStandaloneScannerInfoProvider instead and + * calling getScannerInfo(String). */ + @Deprecated public IScannerInfo getScannerInfo() { return fScanner; } @@ -235,7 +243,14 @@ public abstract class StandaloneIndexer { return fScannerInfoProvider.getScannerInformation(path); } - + + + /** + * Returns the IStandaloneScannerInfoProvider or null if one was not provided. + */ + public IStandaloneScannerInfoProvider getScannerInfoProvider() { + return fScannerInfoProvider; + } /** * Returns the ILanguageMapper that determines the ILanguage for a file. diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/indexer/StandaloneIndexerTask.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/indexer/StandaloneIndexerTask.java index 073a2efe17a..0ce353b421f 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/indexer/StandaloneIndexerTask.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/indexer/StandaloneIndexerTask.java @@ -20,6 +20,7 @@ import java.util.Iterator; import org.eclipse.cdt.core.model.AbstractLanguage; import org.eclipse.cdt.core.model.ILanguage; import org.eclipse.cdt.core.parser.IParserLogService; +import org.eclipse.cdt.core.parser.IScannerInfo; import org.eclipse.cdt.internal.core.index.IWritableIndex; import org.eclipse.cdt.internal.core.pdom.AbstractIndexerTask; import org.eclipse.cdt.internal.core.pdom.IndexerProgress; @@ -218,6 +219,20 @@ public abstract class StandaloneIndexerTask extends AbstractIndexerTask { protected void logError(IStatus s) { getLogService().traceLog(s.getMessage()); } + + @SuppressWarnings("deprecation") + @Override + protected IScannerInfo createDefaultScannerConfig(int linkageID) { + IStandaloneScannerInfoProvider provider = fIndexer.getScannerInfoProvider(); + if(provider != null) + return provider.getDefaultScannerInformation(linkageID); + + IScannerInfo scannerInfo = fIndexer.getScannerInfo(); + if(scannerInfo != null) + return scannerInfo; + + return super.createDefaultScannerConfig(linkageID); + } }