mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-04-29 19:45:01 +02:00
fix for bug 245443, standalone indexer needs to provide a Scanner Info object when parsing files up front
This commit is contained in:
parent
5b5efea7eb
commit
07a880257d
3 changed files with 46 additions and 3 deletions
|
@ -15,8 +15,6 @@ import org.eclipse.cdt.core.parser.IScannerInfo;
|
||||||
import org.eclipse.cdt.core.parser.IScannerInfoProvider;
|
import org.eclipse.cdt.core.parser.IScannerInfoProvider;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns a IScannerInfo for the given file by a path.
|
|
||||||
*
|
|
||||||
* Similar to IScannerInfoProvider but computes the IScannerInfo
|
* Similar to IScannerInfoProvider but computes the IScannerInfo
|
||||||
* based on a String path instead of IResource.
|
* based on a String path instead of IResource.
|
||||||
*
|
*
|
||||||
|
@ -24,5 +22,20 @@ import org.eclipse.cdt.core.parser.IScannerInfoProvider;
|
||||||
*/
|
*/
|
||||||
public interface IStandaloneScannerInfoProvider {
|
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);
|
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);
|
||||||
}
|
}
|
||||||
|
|
|
@ -98,6 +98,7 @@ public abstract class StandaloneIndexer {
|
||||||
* be provided, but not both. If a single IScannerInfo object is provided
|
* be provided, but not both. If a single IScannerInfo object is provided
|
||||||
* it will always be used. Otherwise the provider will be used.
|
* it will always be used. Otherwise the provider will be used.
|
||||||
*/
|
*/
|
||||||
|
@Deprecated
|
||||||
protected IScannerInfo fScanner;
|
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,
|
public StandaloneIndexer(IWritableIndex index, boolean indexAllFiles,
|
||||||
ILanguageMapper mapper, IParserLogService log, IScannerInfo scanner) {
|
ILanguageMapper mapper, IParserLogService log, IScannerInfo scanner) {
|
||||||
fIndex = index;
|
fIndex = index;
|
||||||
|
@ -217,7 +222,10 @@ public abstract class StandaloneIndexer {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the IScannerInfo that provides include paths and defined symbols.
|
* 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() {
|
public IScannerInfo getScannerInfo() {
|
||||||
return fScanner;
|
return fScanner;
|
||||||
}
|
}
|
||||||
|
@ -237,6 +245,13 @@ public abstract class StandaloneIndexer {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 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.
|
* Returns the ILanguageMapper that determines the ILanguage for a file.
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -20,6 +20,7 @@ import java.util.Iterator;
|
||||||
import org.eclipse.cdt.core.model.AbstractLanguage;
|
import org.eclipse.cdt.core.model.AbstractLanguage;
|
||||||
import org.eclipse.cdt.core.model.ILanguage;
|
import org.eclipse.cdt.core.model.ILanguage;
|
||||||
import org.eclipse.cdt.core.parser.IParserLogService;
|
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.index.IWritableIndex;
|
||||||
import org.eclipse.cdt.internal.core.pdom.AbstractIndexerTask;
|
import org.eclipse.cdt.internal.core.pdom.AbstractIndexerTask;
|
||||||
import org.eclipse.cdt.internal.core.pdom.IndexerProgress;
|
import org.eclipse.cdt.internal.core.pdom.IndexerProgress;
|
||||||
|
@ -219,5 +220,19 @@ public abstract class StandaloneIndexerTask extends AbstractIndexerTask {
|
||||||
getLogService().traceLog(s.getMessage());
|
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);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue