From 39e465b9a81448b2c5173d9c6ff22478bd4ceb4f Mon Sep 17 00:00:00 2001 From: Vladimir Hirsl Date: Wed, 4 May 2005 18:58:40 +0000 Subject: [PATCH] Fix for PR 92599: [Indexer] Remove annotation markers preference from DOMIndexer & friends - Replaced indexer problem markers property page block for DOMIndexer. (from SourceIndexerBlock to NullIndexerBlock). 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. --- core/org.eclipse.cdt.core/ChangeLog | 15 ++++++ .../core/index/ctagsindexer/CTagsIndexer.java | 8 +-- .../CGenerateIndexVisitor.java | 27 ++-------- .../CPPGenerateIndexVisitor.java | 27 ++-------- .../DOMSourceIndexerRunner.java | 45 ++++++++++++++-- .../core/index/nullindexer/NullIndexer.java | 4 +- .../index/sourceindexer/SourceIndexer.java | 52 +++---------------- .../core/search/indexing/IndexManager.java | 28 ++++++++++ core/org.eclipse.cdt.ui/ChangeLog | 9 ++++ core/org.eclipse.cdt.ui/plugin.xml | 8 +++ 10 files changed, 118 insertions(+), 105 deletions(-) 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 + +