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

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.
This commit is contained in:
Vladimir Hirsl 2005-05-04 18:58:40 +00:00
parent 2bd5960655
commit 39e465b9a8
10 changed files with 118 additions and 105 deletions

View file

@ -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

View file

@ -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);
}

View file

@ -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

View file

@ -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

View file

@ -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))

View file

@ -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 {

View file

@ -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<markers.length; i++){
removeIndexerProblems(markers[i].getResource());
}
} catch (CoreException e) {}*/
removeIndexerProblems(project);
}
}

View file

@ -19,12 +19,14 @@ import org.eclipse.cdt.core.ICDescriptor;
import org.eclipse.cdt.core.ICExtensionReference;
import org.eclipse.cdt.core.index.ICDTIndexer;
import org.eclipse.cdt.core.index.IIndexStorage;
import org.eclipse.cdt.core.model.ICModelMarker;
import org.eclipse.cdt.internal.core.index.ctagsindexer.CTagsIndexRequest;
import org.eclipse.cdt.internal.core.index.sourceindexer.CIndexStorage;
import org.eclipse.cdt.internal.core.index.sourceindexer.IndexRequest;
import org.eclipse.cdt.internal.core.index.sourceindexer.SourceIndexer;
import org.eclipse.cdt.internal.core.search.processing.IIndexJob;
import org.eclipse.cdt.internal.core.search.processing.JobManager;
import org.eclipse.core.resources.IMarker;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.IResourceDelta;
@ -375,4 +377,30 @@ public class IndexManager extends JobManager{
job.schedule();
}
}
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();
}
}

View file

@ -1,3 +1,12 @@
2005-05-04 Vladimir Hirsl
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).
* plugin.xml
2005-04-22 Vladimir Hirsl
Added per file C/C++ Includes & Symbols property page to display
per file scanner info (discovered and user specified).

View file

@ -1357,11 +1357,19 @@
indexerID="org.eclipse.cdt.core.nullindexer"
name="%CDTIndexer.nullindexer"
id="org.eclipse.cdt.ui.nullindexerUI"/>
<indexerUI
class="org.eclipse.cdt.ui.dialogs.NullIndexerBlock"
id="org.eclipse.cdt.ui.DOMASTSourceIndexerUI"
indexerID="org.eclipse.cdt.core.domsourceindexer"
name="%CDTIndexer.domsourceindexer"/>
<!-- to enable indexer problem markers property page
uncomment this entry and comment the previous one
<indexerUI
class="org.eclipse.cdt.ui.dialogs.SourceIndexerBlock"
id="org.eclipse.cdt.ui.DOMASTSourceIndexerUI"
indexerID="org.eclipse.cdt.core.domsourceindexer"
name="%CDTIndexer.domsourceindexer"/>
-->
<indexerUI
class="org.eclipse.cdt.ui.dialogs.CTagsIndexerBlock"
indexerID="org.eclipse.cdt.core.ctagsindexer"