diff --git a/core/org.eclipse.cdt.core/ChangeLog b/core/org.eclipse.cdt.core/ChangeLog index 1e0ff3891c5..930bbd59915 100644 --- a/core/org.eclipse.cdt.core/ChangeLog +++ b/core/org.eclipse.cdt.core/ChangeLog @@ -1,3 +1,18 @@ +2005-05-02 Vladimir Hirsl + Fix for PR 92599: [Indexer] Remove annotation markers preference from DOMIndexer & friends + Removed indexer problem markers property page block for DOMIndexer. + Only inclusion not found preprocessor problem markers are going to be + generated (there isn't an option in UI to disable/enable them yet). + Also, fixed deleting of indexer problem markers when indexer is changed. + + * index/org/eclipse/cdt/internal/core/index/ctagsindexer/CTagsIndexer.java + * index/org/eclipse/cdt/internal/core/index/domsourceindexer/CGenerateIndexVisitor.java + * index/org/eclipse/cdt/internal/core/index/domsourceindexer/CPPGenerateIndexVisitor.java + * index/org/eclipse/cdt/internal/core/index/domsourceindexer/DOMSourceIndexerRunner.java + * index/org/eclipse/cdt/internal/core/index/nullindexer/NullIndexer.java + * index/org/eclipse/cdt/internal/core/index/sourceindexer/SourceIndexer.java + * index/org/eclipse/cdt/internal/core/search/indexing/IndexManager.java + 2005-05-02 Vladimir Hirsl Fix for PR 96762: DOM indexer misses some obvious symbols Fixed calculation of file locations for names inside macro definitions diff --git a/core/org.eclipse.cdt.core/index/org/eclipse/cdt/internal/core/index/ctagsindexer/CTagsIndexer.java b/core/org.eclipse.cdt.core/index/org/eclipse/cdt/internal/core/index/ctagsindexer/CTagsIndexer.java index d963f38ba3c..7b3e535cd20 100644 --- a/core/org.eclipse.cdt.core/index/org/eclipse/cdt/internal/core/index/ctagsindexer/CTagsIndexer.java +++ b/core/org.eclipse.cdt.core/index/org/eclipse/cdt/internal/core/index/ctagsindexer/CTagsIndexer.java @@ -133,7 +133,7 @@ public class CTagsIndexer extends AbstractCExtension implements ICDTIndexer { * @see org.eclipse.cdt.core.index.ICDTIndexer#indexJobFinishedNotification(org.eclipse.cdt.internal.core.search.processing.IIndexJob) */ public void indexJobFinishedNotification(IIndexJob job) { - ((CIndexStorage)indexStorage).setNeedToSave(true); + indexStorage.setNeedToSave(true); if (job instanceof CTagsAddCompilationUnitToIndex){ CTagsAddCompilationUnitToIndex tempJob = (CTagsAddCompilationUnitToIndex) job; @@ -371,11 +371,7 @@ public class CTagsIndexer extends AbstractCExtension implements ICDTIndexer { } public void indexerRemoved(IProject project) { - //Remove any existing problem markers - try { - project.deleteMarkers(ICModelMarker.INDEXER_MARKER, true,IResource.DEPTH_ZERO); - } catch (CoreException e) {} - + indexManager.removeIndexerProblems(project); } diff --git a/core/org.eclipse.cdt.core/index/org/eclipse/cdt/internal/core/index/domsourceindexer/CGenerateIndexVisitor.java b/core/org.eclipse.cdt.core/index/org/eclipse/cdt/internal/core/index/domsourceindexer/CGenerateIndexVisitor.java index 89eb2c872af..ce812492cb4 100644 --- a/core/org.eclipse.cdt.core/index/org/eclipse/cdt/internal/core/index/domsourceindexer/CGenerateIndexVisitor.java +++ b/core/org.eclipse.cdt.core/index/org/eclipse/cdt/internal/core/index/domsourceindexer/CGenerateIndexVisitor.java @@ -10,13 +10,11 @@ ***********************************************************************/ package org.eclipse.cdt.internal.core.index.domsourceindexer; -import org.eclipse.cdt.core.CCorePlugin; import org.eclipse.cdt.core.dom.ast.ASTNodeProperty; import org.eclipse.cdt.core.dom.ast.DOMException; import org.eclipse.cdt.core.dom.ast.IASTElaboratedTypeSpecifier; import org.eclipse.cdt.core.dom.ast.IASTFileLocation; import org.eclipse.cdt.core.dom.ast.IASTName; -import org.eclipse.cdt.core.dom.ast.IASTNode; import org.eclipse.cdt.core.dom.ast.IASTProblem; import org.eclipse.cdt.core.dom.ast.IBinding; import org.eclipse.cdt.core.dom.ast.ICompositeType; @@ -31,12 +29,9 @@ import org.eclipse.cdt.core.dom.ast.IVariable; import org.eclipse.cdt.core.dom.ast.c.CASTVisitor; import org.eclipse.cdt.internal.core.index.IIndex; import org.eclipse.cdt.internal.core.index.domsourceindexer.IndexerOutputWrapper.EntryType; -import org.eclipse.core.resources.IFile; -import org.eclipse.core.runtime.Path; public class CGenerateIndexVisitor extends CASTVisitor { private DOMSourceIndexerRunner indexer; - private IFile resourceFile; { shouldVisitNames = true; // shouldVisitDeclarations = false; @@ -54,10 +49,9 @@ public class CGenerateIndexVisitor extends CASTVisitor { // shouldVisitDesignators = false } - public CGenerateIndexVisitor(DOMSourceIndexerRunner indexer, IFile resourceFile) { + public CGenerateIndexVisitor(DOMSourceIndexerRunner indexer) { super(); this.indexer = indexer; - this.resourceFile = resourceFile; } /* (non-Javadoc) @@ -84,7 +78,7 @@ public class CGenerateIndexVisitor extends CASTVisitor { if (indexer.areProblemMarkersEnabled() && indexer.shouldRecordProblem(problem)){ // Get the location IASTFileLocation loc = IndexEncoderUtil.getFileLocation(problem); - processProblem(problem, loc); + indexer.processProblem(problem, loc); } return super.visit(problem); } @@ -101,7 +95,7 @@ public class CGenerateIndexVisitor extends CASTVisitor { if (indexer.areProblemMarkersEnabled() && indexer.shouldRecordProblem(problem)){ // Get the location IASTFileLocation loc = IndexEncoderUtil.getFileLocation(name); - processProblem(name, loc); + indexer.processProblem(name, loc); } return; } @@ -116,21 +110,6 @@ public class CGenerateIndexVisitor extends CASTVisitor { } } - /** - * @param name - */ - private void processProblem(IASTNode node, IASTFileLocation loc) { - IFile tempFile = resourceFile; - //If we are in an include file, get the include file - if (loc != null) { - String fileName = loc.getFileName(); - tempFile = CCorePlugin.getWorkspace().getRoot().getFileForLocation(new Path(fileName)); - if (tempFile != null) { - indexer.generateMarkerProblem(tempFile, resourceFile, node, loc); - } - } - } - /** * @param name * @param binding diff --git a/core/org.eclipse.cdt.core/index/org/eclipse/cdt/internal/core/index/domsourceindexer/CPPGenerateIndexVisitor.java b/core/org.eclipse.cdt.core/index/org/eclipse/cdt/internal/core/index/domsourceindexer/CPPGenerateIndexVisitor.java index 7dbe29dada3..a29f6855712 100644 --- a/core/org.eclipse.cdt.core/index/org/eclipse/cdt/internal/core/index/domsourceindexer/CPPGenerateIndexVisitor.java +++ b/core/org.eclipse.cdt.core/index/org/eclipse/cdt/internal/core/index/domsourceindexer/CPPGenerateIndexVisitor.java @@ -10,13 +10,11 @@ ***********************************************************************/ package org.eclipse.cdt.internal.core.index.domsourceindexer; -import org.eclipse.cdt.core.CCorePlugin; import org.eclipse.cdt.core.dom.ast.ASTNodeProperty; import org.eclipse.cdt.core.dom.ast.DOMException; import org.eclipse.cdt.core.dom.ast.IASTElaboratedTypeSpecifier; import org.eclipse.cdt.core.dom.ast.IASTFileLocation; import org.eclipse.cdt.core.dom.ast.IASTName; -import org.eclipse.cdt.core.dom.ast.IASTNode; import org.eclipse.cdt.core.dom.ast.IASTProblem; import org.eclipse.cdt.core.dom.ast.IBinding; import org.eclipse.cdt.core.dom.ast.ICompositeType; @@ -42,12 +40,9 @@ import org.eclipse.cdt.core.search.ICSearchConstants; import org.eclipse.cdt.core.search.ICSearchConstants.LimitTo; import org.eclipse.cdt.internal.core.index.IIndex; import org.eclipse.cdt.internal.core.index.domsourceindexer.IndexerOutputWrapper.EntryType; -import org.eclipse.core.resources.IFile; -import org.eclipse.core.runtime.Path; public class CPPGenerateIndexVisitor extends CPPASTVisitor { private DOMSourceIndexerRunner indexer; - private IFile resourceFile; { shouldVisitNames = true; @@ -68,10 +63,9 @@ public class CPPGenerateIndexVisitor extends CPPASTVisitor { // shouldVisitTemplateParameters = false; } - public CPPGenerateIndexVisitor(DOMSourceIndexerRunner indexer, IFile resourceFile) { + public CPPGenerateIndexVisitor(DOMSourceIndexerRunner indexer) { super(); this.indexer = indexer; - this.resourceFile = resourceFile; } /* (non-Javadoc) @@ -98,7 +92,7 @@ public class CPPGenerateIndexVisitor extends CPPASTVisitor { if (indexer.areProblemMarkersEnabled() && indexer.shouldRecordProblem(problem)) { // Get the location IASTFileLocation loc = IndexEncoderUtil.getFileLocation(problem); - processProblem(problem, loc); + indexer.processProblem(problem, loc); } return super.visit(problem); } @@ -115,7 +109,7 @@ public class CPPGenerateIndexVisitor extends CPPASTVisitor { if (indexer.areProblemMarkersEnabled() && indexer.shouldRecordProblem(problem)){ // Get the location IASTFileLocation loc = IndexEncoderUtil.getFileLocation(name); - processProblem(name, loc); + indexer.processProblem(name, loc); } return; } @@ -131,21 +125,6 @@ public class CPPGenerateIndexVisitor extends CPPASTVisitor { } } - /** - * @param name - */ - private void processProblem(IASTNode node, IASTFileLocation loc) { - IFile tempFile = resourceFile; - //If we are in an include file, get the include file - if (loc != null) { - String fileName = loc.getFileName(); - tempFile = CCorePlugin.getWorkspace().getRoot().getFileForLocation(new Path(fileName)); - if (tempFile != null) { - indexer.generateMarkerProblem(tempFile, resourceFile, node, loc); - } - } - } - /** * @param name * @param binding 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 07a61ef81e7..7705fde0911 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 @@ -24,6 +24,7 @@ import org.eclipse.cdt.core.dom.IASTServiceProvider.UnsupportedDialectException; import org.eclipse.cdt.core.dom.ast.ASTVisitor; import org.eclipse.cdt.core.dom.ast.IASTFileLocation; import org.eclipse.cdt.core.dom.ast.IASTName; +import org.eclipse.cdt.core.dom.ast.IASTNode; import org.eclipse.cdt.core.dom.ast.IASTPreprocessorMacroDefinition; import org.eclipse.cdt.core.dom.ast.IASTProblem; import org.eclipse.cdt.core.dom.ast.IASTTranslationUnit; @@ -79,6 +80,8 @@ public class DOMSourceIndexerRunner extends AbstractIndexer { 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); @@ -100,12 +103,13 @@ public class DOMSourceIndexerRunner extends AbstractIndexer { processIncludeDirectives(tu.getDependencyTree()); processMacroDefinitions(tu.getMacroDefinitions()); + processPreprocessorProblems(tu.getPreprocessorProblems()); ASTVisitor visitor = null; if (language == ParserLanguage.CPP) { - visitor = new CPPGenerateIndexVisitor(this, resourceFile); + visitor = new CPPGenerateIndexVisitor(this); } else { - visitor = new CGenerateIndexVisitor(this, resourceFile); + visitor = new CGenerateIndexVisitor(this); } tu.accept(visitor); @@ -239,6 +243,36 @@ public class DOMSourceIndexerRunner extends AbstractIndexer { } + /** + * @param preprocessorProblems + */ + private void processPreprocessorProblems(IASTProblem[] preprocessorProblems) { + for (int i = 0; i < preprocessorProblems.length; i++) { + IASTProblem problem = preprocessorProblems[i]; + + if (areProblemMarkersEnabled() && shouldRecordProblem(problem)) { + // Get the location + IASTFileLocation loc = IndexEncoderUtil.getFileLocation(problem); + processProblem(problem, loc); + } + } + } + + /** + * @param name + */ + public void processProblem(IASTNode node, IASTFileLocation loc) { + IFile tempFile = resourceFile; + //If we are in an include file, get the include file + if (loc != null) { + String fileName = loc.getFileName(); + tempFile = CCorePlugin.getWorkspace().getRoot().getFileForLocation(new Path(fileName)); + if (tempFile != null) { + generateMarkerProblem(tempFile, resourceFile, node, loc); + } + } + } + /* (non-Javadoc) * @see org.eclipse.cdt.internal.core.index.sourceindexer.AbstractIndexer#addMarkers(org.eclipse.core.resources.IFile, org.eclipse.core.resources.IFile, java.lang.Object, java.lang.Object) */ @@ -289,11 +323,9 @@ public class DOMSourceIndexerRunner extends AbstractIndexer { int start = fileLoc.getNodeOffset(); int end = start + fileLoc.getNodeLength(); marker.setAttribute(IMarker.LOCATION, fileLoc.getStartingLineNumber()); - marker.setAttribute(IMarker.LOCATION, 1); marker.setAttribute(IMarker.MESSAGE, INDEXER_MARKER_PREFIX + errorMessage); marker.setAttribute(IMarker.SEVERITY, IMarker.SEVERITY_WARNING); marker.setAttribute(IMarker.LINE_NUMBER, fileLoc.getStartingLineNumber()); - marker.setAttribute(IMarker.LINE_NUMBER, 1); marker.setAttribute(IMarker.CHAR_START, start); marker.setAttribute(IMarker.CHAR_END, end); marker.setAttribute(INDEXER_MARKER_ORIGINATOR, originator.getFullPath().toString()); @@ -310,7 +342,10 @@ public class DOMSourceIndexerRunner extends AbstractIndexer { boolean semantics = (getProblemMarkersEnabled() & SourceIndexer.SEMANTIC_PROBLEMS_BIT ) != 0; boolean syntax = (getProblemMarkersEnabled() & SourceIndexer.SYNTACTIC_PROBLEMS_BIT ) != 0; - if (problem.checkCategory(IASTProblem.PREPROCESSOR_RELATED) || + if (problem.checkCategory(IASTProblem.PREPROCESSOR_INCLUSION_NOT_FOUND)) { + return true; + } + else if (problem.checkCategory(IASTProblem.PREPROCESSOR_RELATED) || problem.checkCategory(IASTProblem.SCANNER_RELATED)) return preprocessor && problem.getID() != IASTProblem.PREPROCESSOR_CIRCULAR_INCLUSION; else if (problem.checkCategory(IASTProblem.SEMANTICS_RELATED)) diff --git a/core/org.eclipse.cdt.core/index/org/eclipse/cdt/internal/core/index/nullindexer/NullIndexer.java b/core/org.eclipse.cdt.core/index/org/eclipse/cdt/internal/core/index/nullindexer/NullIndexer.java index 2d35505c312..3eecc217b26 100644 --- a/core/org.eclipse.cdt.core/index/org/eclipse/cdt/internal/core/index/nullindexer/NullIndexer.java +++ b/core/org.eclipse.cdt.core/index/org/eclipse/cdt/internal/core/index/nullindexer/NullIndexer.java @@ -3,6 +3,7 @@ package org.eclipse.cdt.internal.core.index.nullindexer; import java.io.IOException; import org.eclipse.cdt.core.AbstractCExtension; +import org.eclipse.cdt.core.CCorePlugin; import org.eclipse.cdt.core.index.ICDTIndexer; import org.eclipse.cdt.core.index.IIndexStorage; import org.eclipse.cdt.internal.core.index.IIndex; @@ -67,8 +68,7 @@ public class NullIndexer extends AbstractCExtension implements ICDTIndexer { } public void indexerRemoved(IProject project) { - // TODO Auto-generated method stub - + CCorePlugin.getDefault().getCoreModel().getIndexManager().removeIndexerProblems(project); } public void index(IFile document, IIndexerOutput output) throws IOException { diff --git a/core/org.eclipse.cdt.core/index/org/eclipse/cdt/internal/core/index/sourceindexer/SourceIndexer.java b/core/org.eclipse.cdt.core/index/org/eclipse/cdt/internal/core/index/sourceindexer/SourceIndexer.java index a7f5e405ac8..6e02e26c7fa 100644 --- a/core/org.eclipse.cdt.core/index/org/eclipse/cdt/internal/core/index/sourceindexer/SourceIndexer.java +++ b/core/org.eclipse.cdt.core/index/org/eclipse/cdt/internal/core/index/sourceindexer/SourceIndexer.java @@ -25,7 +25,6 @@ import org.eclipse.cdt.core.index.ICDTIndexer; import org.eclipse.cdt.core.index.IIndexChangeListener; import org.eclipse.cdt.core.index.IIndexStorage; import org.eclipse.cdt.core.index.IndexChangeEvent; -import org.eclipse.cdt.core.model.ICModelMarker; import org.eclipse.cdt.core.parser.util.ObjectSet; import org.eclipse.cdt.internal.core.Util; import org.eclipse.cdt.internal.core.index.IIndex; @@ -74,6 +73,7 @@ public class SourceIndexer extends AbstractCExtension implements ICDTIndexer { public static final int PREPROCESSOR_PROBLEMS_BIT = 1; public static final int SEMANTIC_PROBLEMS_BIT = 1 << 1; public static final int SYNTACTIC_PROBLEMS_BIT = 1 << 2; + public static final int INCLUSION_PROBLEMS_BIT = 1 << 3; public static final String SOURCE_INDEXER_ID = "originalsourceindexer"; //$NON-NLS-1$ public static final String SOURCE_INDEXER_UNIQUE_ID = CCorePlugin.PLUGIN_ID + "." + SOURCE_INDEXER_ID; //$NON-NLS-1$; @@ -84,7 +84,6 @@ public class SourceIndexer extends AbstractCExtension implements ICDTIndexer { protected IndexManager indexManager = null; protected HashSet jobSet = null; - private boolean indexEnabled = false; protected long totalIndexTime = 0; @@ -161,12 +160,7 @@ public class SourceIndexer extends AbstractCExtension implements ICDTIndexer { * Warning: Does not check whether index is consistent (not being used) */ public synchronized boolean haveEncounteredHeader(IPath projectPath, IPath filePath) { - - if (!(indexStorage instanceof CIndexStorage)) - return false; - - SimpleLookupTable headerTable = ((CIndexStorage)indexStorage).getEncounteredHeaders(); - + SimpleLookupTable headerTable = indexStorage.getEncounteredHeaders(); // Path is already canonical per construction ObjectSet headers = (ObjectSet) headerTable.get(projectPath); @@ -269,7 +263,6 @@ public class SourceIndexer extends AbstractCExtension implements ICDTIndexer { if (cext.length > 0) { //initializeIndexerId(); for (int i = 0; i < cext.length; i++) { - String id = cext[i].getID(); String orig = cext[i].getExtensionData("indexmarkers"); //$NON-NLS-1$ if (orig != null){ Integer tempInt = new Integer(orig); @@ -336,30 +329,9 @@ public class SourceIndexer extends AbstractCExtension implements ICDTIndexer { } - static private class RemoveIndexMarkersJob extends Job{ - private final IResource resource; - public RemoveIndexMarkersJob( IResource resource, String name ){ - super( name ); - this.resource = resource; - } - protected IStatus run(IProgressMonitor monitor) { - try { - resource.deleteMarkers( ICModelMarker.INDEXER_MARKER, true, IResource.DEPTH_INFINITE ); - } catch (CoreException e) { - return Status.CANCEL_STATUS; - } - return Status.OK_STATUS; - } - - } - public void removeIndexerProblems( IResource resource){ - String jobName = "remove markers"; //$NON-NLS-1$ - RemoveIndexMarkersJob job = new RemoveIndexMarkersJob( resource, jobName ); - job.setRule( resource ); - job.setPriority( Job.DECORATE ); - job.schedule(); - } + indexManager.removeIndexerProblems(resource); + } public void addIndexChangeListener(IIndexChangeListener listener) { synchronized(indexChangeListeners) { @@ -422,8 +394,8 @@ public class SourceIndexer extends AbstractCExtension implements ICDTIndexer { * No more job awaiting. */ public void notifyIdle(long idlingTime){ - if (idlingTime > 1000 && ((CIndexStorage) indexStorage).getNeedToSave()) - ((CIndexStorage) indexStorage).saveIndexes(); + if (idlingTime > 1000 && indexStorage.getNeedToSave()) + indexStorage.saveIndexes(); } /* (non-Javadoc) @@ -504,7 +476,7 @@ public class SourceIndexer extends AbstractCExtension implements ICDTIndexer { * @see org.eclipse.cdt.core.index2.IIndexer#indexJobFinishedNotification(org.eclipse.cdt.internal.core.search.processing.IIndexJob) */ public void indexJobFinishedNotification(IIndexJob job) { - ((CIndexStorage)indexStorage).setNeedToSave(true); + indexStorage.setNeedToSave(true); if (job instanceof AddCompilationUnitToIndex){ AddCompilationUnitToIndex tempJob = (AddCompilationUnitToIndex) job; @@ -655,15 +627,7 @@ public class SourceIndexer extends AbstractCExtension implements ICDTIndexer { } public void indexerRemoved(IProject project) { - //Remove any existing problem markers - /*try { - IMarker[] markers = project.findMarkers(ICModelMarker.INDEXER_MARKER, true, IResource.DEPTH_INFINITE); - for (int i=0; i + +