1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-04-29 19:45:01 +02:00

Fix for 232155 and other associated changes to get the StandaloneFastIndexer running

This commit is contained in:
Chris Recoskie 2008-05-16 01:40:40 +00:00
parent 41132eeef2
commit 20dcecc930
6 changed files with 173 additions and 16 deletions

View file

@ -23,6 +23,7 @@ import org.eclipse.cdt.core.parser.IScannerInfo;
import org.eclipse.cdt.internal.core.index.IIndexFragment; import org.eclipse.cdt.internal.core.index.IIndexFragment;
import org.eclipse.cdt.internal.core.index.WritableCIndex; import org.eclipse.cdt.internal.core.index.WritableCIndex;
import org.eclipse.cdt.internal.core.pdom.WritablePDOM; import org.eclipse.cdt.internal.core.pdom.WritablePDOM;
import org.eclipse.cdt.internal.core.pdom.dom.IPDOMLinkageFactory;
import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.CoreException;
/** /**
@ -50,7 +51,7 @@ public class StandaloneFastIndexer extends StandaloneIndexer{
* @param log - logger * @param log - logger
* @throws CoreException * @throws CoreException
*/ */
public StandaloneFastIndexer(File writableIndexFile, IIndexLocationConverter converter, Map linkageFactoryMappings, public StandaloneFastIndexer(File writableIndexFile, IIndexLocationConverter converter, Map<String, IPDOMLinkageFactory> linkageFactoryMappings,
IScannerInfo scanner, ILanguageMapper mapper, IParserLogService log) throws CoreException { IScannerInfo scanner, ILanguageMapper mapper, IParserLogService log) throws CoreException {
WritablePDOM pdom = new WritablePDOM(writableIndexFile, converter, linkageFactoryMappings); WritablePDOM pdom = new WritablePDOM(writableIndexFile, converter, linkageFactoryMappings);
fIndex = new WritableCIndex( fIndex = new WritableCIndex(
@ -66,7 +67,7 @@ public class StandaloneFastIndexer extends StandaloneIndexer{
* Create a delegate standalone indexing task * Create a delegate standalone indexing task
*/ */
@Override @Override
protected StandaloneIndexerTask createTask(List added, List changed, List removed) { protected StandaloneIndexerTask createTask(List<String> added, List<String> changed, List<String> removed) {
return new StandaloneFastIndexerTask(this, added, changed, removed); return new StandaloneFastIndexerTask(this, added, changed, removed);
} }

View file

@ -289,7 +289,7 @@ public abstract class StandaloneIndexer {
* @param monitor * @param monitor
* @throws IOException * @throws IOException
*/ */
public void rebuild(List tus, IProgressMonitor monitor) throws IOException { public void rebuild(List<String> tus, IProgressMonitor monitor) throws IOException {
fProgress = createProgress(); fProgress = createProgress();
try { try {
@ -314,7 +314,7 @@ public abstract class StandaloneIndexer {
* @param monitor * @param monitor
* @throws IOException * @throws IOException
*/ */
public void handleDelta(List added, List changed, List removed, IProgressMonitor monitor) throws IOException { public void handleDelta(List<String> added, List<String> changed, List<String> removed, IProgressMonitor monitor) throws IOException {
fProgress= new IndexerProgress(); fProgress= new IndexerProgress();
fDelegate= createTask(getFilesAdded(added), changed, removed); fDelegate= createTask(getFilesAdded(added), changed, removed);
@ -334,17 +334,17 @@ public abstract class StandaloneIndexer {
* @param tus * @param tus
* @return * @return
*/ */
private List getFilesAdded(List tus) { private List<String> getFilesAdded(List<String> tus) {
List added = new ArrayList(); List<String> added = new ArrayList<String>();
FilenameFilter filter = getExclusionFilter(); FilenameFilter filter = getExclusionFilter();
if (filter == null) { if (filter == null) {
filter = DEFAULT_FILTER; filter = DEFAULT_FILTER;
} }
Iterator iter = tus.iterator(); Iterator<String> iter = tus.iterator();
while (iter.hasNext()) { while (iter.hasNext()) {
String path = (String) iter.next(); String path = iter.next();
File file = new File(path); File file = new File(path);
if (file.isDirectory()) { if (file.isDirectory()) {
String[] files = file.list(filter); String[] files = file.list(filter);
@ -364,7 +364,7 @@ public abstract class StandaloneIndexer {
/** /**
* Creates a delegate standalone indexing task * Creates a delegate standalone indexing task
*/ */
protected abstract StandaloneIndexerTask createTask(List added, List changed, List removed); protected abstract StandaloneIndexerTask createTask(List<String> added, List<String> changed, List<String> removed);
/** /**
* Return the type of references the parser should skip. * Return the type of references the parser should skip.

View file

@ -18,10 +18,13 @@ 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.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;
import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
/** /**
* A task for index updates. * A task for index updates.
@ -168,4 +171,53 @@ public abstract class StandaloneIndexerTask extends AbstractIndexerTask {
} }
} }
} }
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.pdom.AbstractIndexerTask#createStatus(java.lang.String)
*/
@Override
protected IStatus createStatus(String msg) {
return new Status(IStatus.ERROR, "org.eclipse.cdt.core", IStatus.ERROR, msg, null); //$NON-NLS-1$
}
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.pdom.AbstractIndexerTask#getMessage(org.eclipse.cdt.internal.core.pdom.AbstractIndexerTask.MessageKind, java.lang.Object[])
*/
@Override
protected String getMessage(MessageKind kind, Object... arguments) {
// unfortunately we don't have OSGi on the remote system so for now we'll just settle for
// English strings
// TODO: find a way to do non-OSGi NLS
switch(kind) {
case parsingFileTask:
return new String("parsing {0} ({1})"); //$NON-NLS-1$
case errorWhileParsing:
return new String("Error while parsing {0}."); //$NON-NLS-1$
case tooManyIndexProblems:
return new String("Too many errors while indexing, stopping indexer."); //$NON-NLS-1$
}
return null;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.pdom.AbstractIndexerTask#getLogService()
*/
@Override
protected IParserLogService getLogService() {
return new StdoutLogService();
}
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.pdom.AbstractIndexerTask#logError(org.eclipse.core.runtime.IStatus)
*/
@Override
protected void logError(IStatus s) {
getLogService().traceLog(s.getMessage());
}
} }

View file

@ -0,0 +1,56 @@
/*******************************************************************************
* Copyright (c) 2008 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.internal.core.indexer;
import org.eclipse.cdt.core.parser.AbstractParserLogService;
import org.eclipse.cdt.core.parser.IParserLogService;
/**
* @author crecoskie
*
*/
public class StdoutLogService extends AbstractParserLogService{
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.AbstractParserLogService#errorLog(java.lang.String)
*/
@Override
public void errorLog(String message) {
System.out.println("Parser Error Trace: " + message); //$NON-NLS-1$
System.out.flush();
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.AbstractParserLogService#isTracing()
*/
@Override
public boolean isTracing() {
return true;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.AbstractParserLogService#isTracingExceptions()
*/
@Override
public boolean isTracingExceptions() {
return true;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.core.parser.AbstractParserLogService#traceLog(java.lang.String)
*/
@Override
public void traceLog(String message) {
System.out.println("Parser Trace: " + message); //$NON-NLS-1$
System.out.flush();
}
}

View file

@ -40,6 +40,7 @@ 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.CodeReader; import org.eclipse.cdt.core.parser.CodeReader;
import org.eclipse.cdt.core.parser.IExtendedScannerInfo; import org.eclipse.cdt.core.parser.IExtendedScannerInfo;
import org.eclipse.cdt.core.parser.IParserLogService;
import org.eclipse.cdt.core.parser.IScannerInfo; import org.eclipse.cdt.core.parser.IScannerInfo;
import org.eclipse.cdt.core.parser.ParserUtil; import org.eclipse.cdt.core.parser.ParserUtil;
import org.eclipse.cdt.core.parser.ScannerInfo; import org.eclipse.cdt.core.parser.ScannerInfo;
@ -54,6 +55,7 @@ import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Path; import org.eclipse.core.runtime.Path;
import org.eclipse.core.runtime.Status; import org.eclipse.core.runtime.Status;
import org.eclipse.osgi.util.NLS;
/** /**
* Task for the actual indexing. Various indexers need to implement the abstract methods. * Task for the actual indexing. Various indexers need to implement the abstract methods.
@ -90,6 +92,8 @@ public abstract class AbstractIndexerTask extends PDOMWriter {
public ICPPUsingDirective[] fDirectives; public ICPPUsingDirective[] fDirectives;
} }
protected enum MessageKind {parsingFileTask, errorWhileParsing, tooManyIndexProblems};
private int fUpdateFlags= IIndexManager.UPDATE_ALL; private int fUpdateFlags= IIndexManager.UPDATE_ALL;
private boolean fIndexHeadersWithoutContext= true; private boolean fIndexHeadersWithoutContext= true;
private boolean fIndexFilesWithoutConfiguration= true; private boolean fIndexFilesWithoutConfiguration= true;
@ -182,7 +186,7 @@ public abstract class AbstractIndexerTask extends PDOMWriter {
} }
try { try {
IASTTranslationUnit ast= language.getASTTranslationUnit(codeReader, scanInfo, fCodeReaderFactory, fIndex, options, ParserUtil.getParserLogService()); IASTTranslationUnit ast= language.getASTTranslationUnit(codeReader, scanInfo, fCodeReaderFactory, fIndex, options, getLogService());
if (pm.isCanceled()) { if (pm.isCanceled()) {
return null; return null;
} }
@ -195,6 +199,13 @@ public abstract class AbstractIndexerTask extends PDOMWriter {
} }
} }
/**
* @return
*/
protected IParserLogService getLogService() {
return ParserUtil.getParserLogService();
}
public final void runTask(IProgressMonitor monitor) throws InterruptedException { public final void runTask(IProgressMonitor monitor) throws InterruptedException {
if (!fIndexFilesWithoutConfiguration) { if (!fIndexFilesWithoutConfiguration) {
fIndexHeadersWithoutContext= false; fIndexHeadersWithoutContext= false;
@ -433,7 +444,7 @@ public abstract class AbstractIndexerTask extends PDOMWriter {
if (fShowActivity) { if (fShowActivity) {
System.out.println("Indexer: parsing " + filePath + " up front"); //$NON-NLS-1$ //$NON-NLS-2$ System.out.println("Indexer: parsing " + filePath + " up front"); //$NON-NLS-1$ //$NON-NLS-2$
} }
monitor.subTask(MessageFormat.format(Messages.AbstractIndexerTask_parsingFileTask, monitor.subTask(MessageFormat.format(getMessage(MessageKind.parsingFileTask),
new Object[]{fileName, path.removeLastSegments(1).toString()})); new Object[]{fileName, path.removeLastSegments(1).toString()}));
AbstractLanguage[] langs= getLanguages(fileName); AbstractLanguage[] langs= getLanguages(fileName);
@ -582,7 +593,7 @@ public abstract class AbstractIndexerTask extends PDOMWriter {
if (fShowActivity) { if (fShowActivity) {
System.out.println("Indexer: parsing " + path.toOSString()); //$NON-NLS-1$ System.out.println("Indexer: parsing " + path.toOSString()); //$NON-NLS-1$
} }
pm.subTask(MessageFormat.format(Messages.AbstractIndexerTask_parsingFileTask, pm.subTask(MessageFormat.format(getMessage(MessageKind.parsingFileTask),
new Object[]{path.lastSegment(), path.removeLastSegments(1).toString()})); new Object[]{path.lastSegment(), path.removeLastSegments(1).toString()}));
long start= System.currentTimeMillis(); long start= System.currentTimeMillis();
IASTTranslationUnit ast= createAST(tu, lang, scanInfo, fASTOptions, pm); IASTTranslationUnit ast= createAST(tu, lang, scanInfo, fASTOptions, pm);
@ -698,14 +709,21 @@ public abstract class AbstractIndexerTask extends PDOMWriter {
} }
else { else {
s= CCorePlugin.createStatus( s= CCorePlugin.createStatus(
MessageFormat.format(Messages.AbstractIndexerTask_errorWhileParsing, new Object[]{file}), e); MessageFormat.format(getMessage(MessageKind.errorWhileParsing), new Object[]{file}), e);
} }
CCorePlugin.log(s); logError(s);
if (++fStatistics.fErrorCount > MAX_ERRORS) { if (++fStatistics.fErrorCount > MAX_ERRORS) {
throw new CoreException(CCorePlugin.createStatus(Messages.AbstractIndexerTask_tooManyIndexProblems)); throw new CoreException(createStatus(getMessage(MessageKind.tooManyIndexProblems)));
} }
} }
/**
* @param s
*/
protected void logError(IStatus s) {
CCorePlugin.log(s);
}
private static int computeHashCode(IScannerInfo scannerInfo) { private static int computeHashCode(IScannerInfo scannerInfo) {
int result= 0; int result= 0;
Map<String, String> macros= scannerInfo.getDefinedSymbols(); Map<String, String> macros= scannerInfo.getDefinedSymbols();
@ -777,4 +795,27 @@ public abstract class AbstractIndexerTask extends PDOMWriter {
} }
return null; return null;
} }
protected String getMessage(MessageKind kind, Object... arguments) {
switch (kind) {
case parsingFileTask:
return NLS.bind(Messages.AbstractIndexerTask_parsingFileTask,
arguments);
case errorWhileParsing:
return NLS.bind(Messages.AbstractIndexerTask_errorWhileParsing,
arguments);
case tooManyIndexProblems:
return NLS.bind(Messages.AbstractIndexerTask_tooManyIndexProblems,
arguments);
}
return null;
}
protected IStatus createStatus(String msg) {
return CCorePlugin.createStatus(msg);
}
} }

View file

@ -47,6 +47,8 @@ import org.eclipse.cdt.internal.core.pdom.db.IBTreeComparator;
import org.eclipse.cdt.internal.core.pdom.db.IBTreeVisitor; import org.eclipse.cdt.internal.core.pdom.db.IBTreeVisitor;
import org.eclipse.cdt.internal.core.pdom.db.IString; import org.eclipse.cdt.internal.core.pdom.db.IString;
import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
/** /**
* Represents a file containing names. * Represents a file containing names.
@ -260,7 +262,7 @@ public class PDOMFile implements IIndexFragmentFile {
final String linkageName = Linkage.getLinkageName(getLinkageID()); final String linkageName = Linkage.getLinkageName(getLinkageID());
fLinkage= pdom.createLinkage(linkageName); fLinkage= pdom.createLinkage(linkageName);
if (fLinkage == null) { if (fLinkage == null) {
throw new CoreException(CCorePlugin.createStatus("Unsupported linkage: " + linkageName)); //$NON-NLS-1$ throw new CoreException(createStatus("Unsupported linkage: " + linkageName)); //$NON-NLS-1$
} }
} }
return fLinkage; return fLinkage;
@ -628,4 +630,9 @@ public class PDOMFile implements IIndexFragmentFile {
} }
return ICPPUsingDirective.EMPTY_ARRAY; return ICPPUsingDirective.EMPTY_ARRAY;
} }
// required because we cannot reference CCorePlugin in order for StandaloneIndexer to work
private IStatus createStatus(String msg) {
return new Status(IStatus.ERROR, "org.eclipse.cdt.core", IStatus.ERROR, msg, null); //$NON-NLS-1$
}
} }