From d0de0c79eee67ba866bd61493da924d229ab40c2 Mon Sep 17 00:00:00 2001 From: Markus Schorn Date: Wed, 7 Jul 2010 09:16:56 +0000 Subject: [PATCH] Bug 319033: Exception in stand-alone indexer. --- .../core/indexer/StandaloneIndexerInputAdapter.java | 5 +++++ .../cdt/internal/core/parser/scanner/CPreprocessor.java | 4 ++++ .../cdt/internal/core/pdom/AbstractIndexerTask.java | 3 +-- .../cdt/internal/core/pdom/IndexerInputAdapter.java | 7 ++++++- .../core/pdom/indexer/ProjectIndexerInputAdapter.java | 5 +++++ 5 files changed, 21 insertions(+), 3 deletions(-) diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/indexer/StandaloneIndexerInputAdapter.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/indexer/StandaloneIndexerInputAdapter.java index a2d3c69ec45..c6371e4083a 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/indexer/StandaloneIndexerInputAdapter.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/indexer/StandaloneIndexerInputAdapter.java @@ -66,6 +66,11 @@ public class StandaloneIndexerInputAdapter extends IndexerInputAdapter { return isValidSourceUnitName((String) tu); } + @Override + public boolean isIndexedOnlyIfIncluded(Object tu) { + return false; + } + @Override public boolean isSource(String filename) { return isValidSourceUnitName(filename); diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner/CPreprocessor.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner/CPreprocessor.java index 0fa422443ee..bd94edf2cc4 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner/CPreprocessor.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/scanner/CPreprocessor.java @@ -172,6 +172,7 @@ public class CPreprocessor implements ILexerLog, IScanner, IAdaptable { private int fContentAssistLimit= -1; private boolean fHandledCompletion= false; private boolean fSplitShiftRightOperator= false; + private int fTokenCount= 0; // state information private final CharArrayMap fMacroDictionary = new CharArrayMap(512); @@ -462,6 +463,9 @@ public class CPreprocessor implements ILexerLog, IScanner, IAdaptable { if (t != null) { fPrefetchedTokens= (Token) t.getNext(); t.setNext(null); + if (++fTokenCount > 1000) { + throw new OffsetLimitReachedException(0, t); + } return t; } diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/AbstractIndexerTask.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/AbstractIndexerTask.java index 44caaddfd82..65c3068efce 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/AbstractIndexerTask.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/AbstractIndexerTask.java @@ -53,7 +53,6 @@ import org.eclipse.cdt.internal.core.index.IndexBasedFileContentProvider; import org.eclipse.cdt.internal.core.parser.scanner.InternalFileContentProvider; import org.eclipse.cdt.internal.core.parser.scanner.StreamHasher; import org.eclipse.cdt.internal.core.pdom.dom.PDOMNotImplementedError; -import org.eclipse.cdt.internal.core.pdom.indexer.PotentialTranslationUnit; import org.eclipse.cdt.utils.EFSExtensionManager; import org.eclipse.core.runtime.Assert; import org.eclipse.core.runtime.CoreException; @@ -385,7 +384,7 @@ public abstract class AbstractIndexerTask extends PDOMWriter { continue; final IIndexFragmentFile[] indexFiles= fIndex.getWritableFiles(ifl); - if (!(tu instanceof PotentialTranslationUnit)) { + if (!fResolver.isIndexedOnlyIfIncluded(tu)) { final boolean isSourceUnit= fResolver.isSourceUnit(tu); final boolean isExcludedSource= isSourceUnit && !fIndexFilesWithoutConfiguration && !fResolver.isFileBuildConfigured(tu); diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/IndexerInputAdapter.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/IndexerInputAdapter.java index e83b16a52db..4e20c6b6b50 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/IndexerInputAdapter.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/IndexerInputAdapter.java @@ -49,6 +49,12 @@ public abstract class IndexerInputAdapter extends ASTFilePathResolver { */ public abstract boolean isFileBuildConfigured(Object tu); + /** + * Returns whether the given translation-unit is not indexed unless it gets included. + * This applies to files that are outside of a source root. + */ + public abstract boolean isIndexedOnlyIfIncluded(Object tu); + /** * Tests whether the file in the index is allowed to be part of an SDK. If not * it will be indexed. @@ -69,7 +75,6 @@ public abstract class IndexerInputAdapter extends ASTFilePathResolver { * Returns a code reader for the given input file. */ public abstract FileContent getCodeReader(Object tu); - /** * Returns the encoding for the file. */ diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/indexer/ProjectIndexerInputAdapter.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/indexer/ProjectIndexerInputAdapter.java index 142bb47444e..21860d2a47a 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/indexer/ProjectIndexerInputAdapter.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/indexer/ProjectIndexerInputAdapter.java @@ -234,6 +234,11 @@ public class ProjectIndexerInputAdapter extends IndexerInputAdapter { return !CoreModel.isScannerInformationEmpty(tu.getResource()); } + @Override + public boolean isIndexedOnlyIfIncluded(Object tu) { + return tu instanceof PotentialTranslationUnit; + } + @Override public boolean isSourceUnit(Object tuo) { ITranslationUnit tu= (ITranslationUnit) tuo;