1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-07-01 06:05:24 +02:00

Fixed problem marker updating for files that are not indexed due to empty scanner info. Some refactoring of problem marker generation code.

This commit is contained in:
Vladimir Hirsl 2005-05-17 18:41:26 +00:00
parent 0751a71a3a
commit 693f2a4708
8 changed files with 232 additions and 238 deletions

View file

@ -1,3 +1,15 @@
2005-05-17 Vladimir Hirsl
Fixed problem marker updating for files that are not indexed due to
empty scanner info. Some refactoring of problem marker generation code.
* index/org/eclipse/cdt/internal/core/index/ctagsindexer/CTagsIndexerRunner.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/sourceindexer/AbstractIndexer.java
* index/org/eclipse/cdt/internal/core/index/sourceindexer/SourceIndexerRequestor.java
* index/org/eclipse/cdt/internal/core/index/sourceindexer/SourceIndexerRunner.java
2005-05-13 Vladimir Hirsl
Files with empty scanner info are not indexed anymore.
Info problem marker is created for each such file.

View file

@ -32,7 +32,6 @@ import org.eclipse.core.runtime.Path;
* @author Bogdan Gheorghe
*/
public class CTagsIndexerRunner extends AbstractIndexer {
IFile resourceFile;
private CTagsIndexer indexer;
/**
* @param resource
@ -43,13 +42,6 @@ public class CTagsIndexerRunner extends AbstractIndexer {
this.indexer = indexer;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.index.sourceindexer.AbstractIndexer#getResourceFile()
*/
public IFile getResourceFile() {
return resourceFile;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.index.sourceindexer.AbstractIndexer#indexFile(org.eclipse.cdt.internal.core.index.IDocument)
*/

View file

@ -78,7 +78,7 @@ public class CGenerateIndexVisitor extends CASTVisitor {
if (indexer.areProblemMarkersEnabled() && indexer.shouldRecordProblem(problem)){
// Get the location
IASTFileLocation loc = IndexEncoderUtil.getFileLocation(problem);
indexer.processProblem(problem, loc);
indexer.processProblem(problem.getMessage(), loc);
}
return super.visit(problem);
}
@ -95,7 +95,7 @@ public class CGenerateIndexVisitor extends CASTVisitor {
if (indexer.areProblemMarkersEnabled() && indexer.shouldRecordProblem(problem)){
// Get the location
IASTFileLocation loc = IndexEncoderUtil.getFileLocation(name);
indexer.processProblem(name, loc);
indexer.processProblem(problem.getMessage(), loc);
}
return;
}

View file

@ -92,7 +92,7 @@ public class CPPGenerateIndexVisitor extends CPPASTVisitor {
if (indexer.areProblemMarkersEnabled() && indexer.shouldRecordProblem(problem)) {
// Get the location
IASTFileLocation loc = IndexEncoderUtil.getFileLocation(problem);
indexer.processProblem(problem, loc);
indexer.processProblem(problem.getMessage(), loc);
}
return super.visit(problem);
}
@ -109,7 +109,7 @@ public class CPPGenerateIndexVisitor extends CPPASTVisitor {
if (indexer.areProblemMarkersEnabled() && indexer.shouldRecordProblem(problem)){
// Get the location
IASTFileLocation loc = IndexEncoderUtil.getFileLocation(name);
indexer.processProblem(name, loc);
indexer.processProblem(problem.getMessage(), loc);
}
return;
}

View file

@ -11,6 +11,7 @@
package org.eclipse.cdt.internal.core.index.domsourceindexer;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Iterator;
@ -24,7 +25,6 @@ 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;
@ -57,7 +57,6 @@ import org.eclipse.core.runtime.Path;
*/
public class DOMSourceIndexerRunner extends AbstractIndexer {
private IFile resourceFile;
private SourceIndexer indexer;
// timing & errors
static int totalParseTime = 0;
@ -70,10 +69,6 @@ public class DOMSourceIndexerRunner extends AbstractIndexer {
this.indexer = indexer;
}
public IFile getResourceFile() {
return resourceFile;
}
public void setFileTypes(String[] fileTypes) {
// TODO Auto-generated method stub
}
@ -89,6 +84,9 @@ public class DOMSourceIndexerRunner extends AbstractIndexer {
if (isScannerInfoEmpty(resourceFile)) {
// generate info marker - file is not indexed
addInfoMarker(resourceFile, CCorePlugin.getResourceString("DOMIndexerMarker.EmptyScannerInfo")); //$NON-NLS-1$
if (areProblemMarkersEnabled()) {
reportProblems();
}
return;
}
@ -303,7 +301,7 @@ public class DOMSourceIndexerRunner extends AbstractIndexer {
if (areProblemMarkersEnabled() && shouldRecordProblem(problem)) {
// Get the location
IASTFileLocation loc = IndexEncoderUtil.getFileLocation(problem);
processProblem(problem, loc);
processProblem(problem.getMessage(), loc);
}
}
}
@ -311,81 +309,88 @@ public class DOMSourceIndexerRunner extends AbstractIndexer {
/**
* @param name
*/
public void processProblem(IASTNode node, IASTFileLocation loc) {
public void processProblem(String message, 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);
generateMarkerProblem(tempFile, resourceFile, message, 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)
*/
protected void addMarkers(IFile tempFile, IFile originator, Object problem, Object location) {
String errorMessage = ""; //$NON-NLS-1$
if (problem instanceof IASTProblem) {
IASTProblem astProblem = (IASTProblem) problem;
errorMessage = astProblem.getMessage();
private void generateMarkerProblem(IFile tempFile, IFile originator, String message, IASTFileLocation loc) {
Problem tempProblem = new AddMarkerProblem(tempFile, originator, message, loc);
if (getProblemsMap().containsKey(tempFile)) {
List list = (List) getProblemsMap().get(tempFile);
list.add(tempProblem);
} else {
List list = new ArrayList();
list.add(new RemoveMarkerProblem(tempFile, resourceFile)); //remove existing markers
list.add(tempProblem);
getProblemsMap().put(tempFile, list);
}
else if (problem instanceof IASTName) { // semantic error specified in IProblemBinding
IASTName name = (IASTName) problem;
if (name.resolveBinding() instanceof IProblemBinding) {
IProblemBinding problemBinding = (IProblemBinding) name.resolveBinding();
errorMessage = problemBinding.getMessage();
}
}
if (location != null && location instanceof IASTFileLocation) {
IASTFileLocation fileLoc = (IASTFileLocation) location;
try {
//we only ever add index markers on the file, so DEPTH_ZERO is far enough
IMarker[] markers = tempFile.findMarkers(ICModelMarker.INDEXER_MARKER, true,IResource.DEPTH_ZERO);
boolean newProblem = true;
if (markers.length > 0) {
IMarker tempMarker = null;
int nameStart = -1;
int nameLen = -1;
String tempMsgString = null;
for (int i=0; i<markers.length; i++) {
tempMarker = markers[i];
nameStart = ((Integer) tempMarker.getAttribute(IMarker.CHAR_START)).intValue();
nameLen = ((Integer) tempMarker.getAttribute(IMarker.CHAR_END)).intValue() - nameStart;
tempMsgString = (String) tempMarker.getAttribute(IMarker.MESSAGE);
if (nameStart != -1 &&
nameStart == fileLoc.getNodeOffset() &&
nameLen == fileLoc.getNodeLength() &&
tempMsgString.equalsIgnoreCase(INDEXER_MARKER_PREFIX + errorMessage)) {
newProblem = false;
break;
}
}
}
if (newProblem) {
IMarker marker = tempFile.createMarker(ICModelMarker.INDEXER_MARKER);
int start = fileLoc.getNodeOffset();
int end = start + fileLoc.getNodeLength();
marker.setAttribute(IMarker.LOCATION, fileLoc.getStartingLineNumber());
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.CHAR_START, start);
marker.setAttribute(IMarker.CHAR_END, end);
marker.setAttribute(INDEXER_MARKER_ORIGINATOR, originator.getFullPath().toString());
}
} catch (CoreException e) {
// You need to handle the cases where attribute value is rejected
}
}
}
}
class AddMarkerProblem extends Problem {
private String message;
private IASTFileLocation location;
public AddMarkerProblem(IResource resource, IResource originator, String message, IASTFileLocation location) {
super(resource, originator);
this.message = message;
this.location = location;
}
public void run() {
if (location != null) {
try {
//we only ever add index markers on the file, so DEPTH_ZERO is far enough
IMarker[] markers = resource.findMarkers(ICModelMarker.INDEXER_MARKER, true,IResource.DEPTH_ZERO);
boolean newProblem = true;
if (markers.length > 0) {
IMarker tempMarker = null;
int nameStart = -1;
int nameLen = -1;
String tempMsgString = null;
for (int i=0; i<markers.length; i++) {
tempMarker = markers[i];
nameStart = ((Integer) tempMarker.getAttribute(IMarker.CHAR_START)).intValue();
nameLen = ((Integer) tempMarker.getAttribute(IMarker.CHAR_END)).intValue() - nameStart;
tempMsgString = (String) tempMarker.getAttribute(IMarker.MESSAGE);
if (nameStart != -1 &&
nameStart == location.getNodeOffset() &&
nameLen == location.getNodeLength() &&
tempMsgString.equalsIgnoreCase(INDEXER_MARKER_PREFIX + message)) {
newProblem = false;
break;
}
}
}
if (newProblem) {
IMarker marker = resource.createMarker(ICModelMarker.INDEXER_MARKER);
int start = location.getNodeOffset();
int end = start + location.getNodeLength();
marker.setAttribute(IMarker.LOCATION, location.getStartingLineNumber());
marker.setAttribute(IMarker.MESSAGE, INDEXER_MARKER_PREFIX + message);
marker.setAttribute(IMarker.SEVERITY, IMarker.SEVERITY_WARNING);
marker.setAttribute(IMarker.LINE_NUMBER, location.getStartingLineNumber());
marker.setAttribute(IMarker.CHAR_START, start);
marker.setAttribute(IMarker.CHAR_END, end);
marker.setAttribute(INDEXER_MARKER_ORIGINATOR, originator.getFullPath().toString());
}
} catch (CoreException e) {
// You need to handle the cases where attribute value is rejected
}
}
}
}
public boolean shouldRecordProblem(IASTProblem problem) {
boolean preprocessor = (getProblemMarkersEnabled() & SourceIndexer.PREPROCESSOR_PROBLEMS_BIT ) != 0;
@ -414,38 +419,6 @@ public class DOMSourceIndexerRunner extends AbstractIndexer {
return (getProblemMarkersEnabled() & SourceIndexer.SEMANTIC_PROBLEMS_BIT) != 0;
}
/**
* @param file
* @param message
*/
private void addInfoMarker(IFile file, String message) {
try {
IMarker[] markers = file.findMarkers(ICModelMarker.INDEXER_MARKER, true, IResource.DEPTH_ZERO);
boolean newProblem = true;
if (markers.length > 0) {
IMarker tempMarker = null;
String tempMsgString = null;
for (int i=0; i<markers.length; i++) {
tempMarker = markers[i];
tempMsgString = (String) tempMarker.getAttribute(IMarker.MESSAGE);
if (tempMsgString.equalsIgnoreCase( message )) {
newProblem = false;
break;
}
}
}
if (newProblem){
IMarker marker = file.createMarker(ICModelMarker.INDEXER_MARKER);
marker.setAttribute(IMarker.MESSAGE, message);
marker.setAttribute(IMarker.SEVERITY, IMarker.SEVERITY_INFO);
}
} catch (CoreException e) {}
}
/**
*
*/

View file

@ -50,6 +50,7 @@ public abstract class AbstractIndexer implements IIndexer, ICSearchConstants {
protected static final String INDEXER_MARKER_PREFIX = Util.bind("indexerMarker.prefix" ) + " "; //$NON-NLS-1$ //$NON-NLS-2$
protected static final String INDEXER_MARKER_ORIGINATOR = ICModelMarker.INDEXER_MARKER + ".originator"; //$NON-NLS-1$
private static final String INDEXER_MARKER_PROCESSING = Util.bind( "indexerMarker.processing" ); //$NON-NLS-1$
protected IFile resourceFile;
public AbstractIndexer() {
super();
@ -64,10 +65,10 @@ public abstract class AbstractIndexer implements IIndexer, ICSearchConstants {
}
/**
* Returns the file types being indexed.
*/
public abstract IFile getResourceFile();
public Map getProblemsMap() {
return problemsMap;
}
/**
* @see IIndexer#index(IFile document, IIndexerOutput output)
*/
@ -77,6 +78,7 @@ public abstract class AbstractIndexer implements IIndexer, ICSearchConstants {
}
protected abstract void indexFile(IFile file) throws IOException;
/**
* @param fileToBeIndexed
* @see IIndexer#shouldIndex(IFile file)
@ -97,51 +99,107 @@ public abstract class AbstractIndexer implements IIndexer, ICSearchConstants {
return false;
}
abstract private class Problem {
public IFile file;
public IFile originator;
public Problem( IFile file, IFile orig ){
this.file = file;
this.originator = orig;
protected abstract class Problem {
public IResource resource;
public IResource originator;
public Problem (IResource resource, IResource originator) {
this.resource = resource;
this.originator = originator;
}
abstract public boolean isAddProblem();
abstract public Object getProblem();
abstract public Object getLocation();
/**
* Method to actually add/remove problem markers
*/
abstract public void run();
}
private class AddMarkerProblem extends Problem {
private Object problem;
private Object location;
public AddMarkerProblem(IFile file, IFile orig, Object problem, Object location) {
super( file, orig );
this.problem = problem;
this.location = location;
}
public boolean isAddProblem(){
return true;
}
public Object getProblem(){
return problem;
}
public Object getLocation() {
return location;
protected class FileInfoMarker extends Problem {
private String message;
public FileInfoMarker(IResource resource, IResource originator, String message) {
super(resource, originator);
this.message = message;
}
public void run() {
try {
IMarker[] markers = resource.findMarkers(ICModelMarker.INDEXER_MARKER, true, IResource.DEPTH_ZERO);
boolean newProblem = true;
if (markers.length > 0) {
IMarker tempMarker = null;
String tempMsgString = null;
for (int i=0; i<markers.length; i++) {
tempMarker = markers[i];
tempMsgString = (String) tempMarker.getAttribute(IMarker.MESSAGE);
if (tempMsgString.equalsIgnoreCase( message )) {
newProblem = false;
break;
}
}
}
if (newProblem){
IMarker marker = resource.createMarker(ICModelMarker.INDEXER_MARKER);
marker.setAttribute(IMarker.MESSAGE, message);
marker.setAttribute(IMarker.SEVERITY, IMarker.SEVERITY_INFO);
}
} catch (CoreException e) {}
}
}
/**
* @param file
* @param message
*/
protected void addInfoMarker(IFile tempFile, String message) {
Problem tempProblem = new FileInfoMarker(tempFile, tempFile, message);
if (getProblemsMap().containsKey(tempFile)) {
List list = (List) getProblemsMap().get(tempFile);
list.add(tempProblem);
} else {
List list = new ArrayList();
list.add(new RemoveMarkerProblem(tempFile, getResourceFile())); //remove existing markers
list.add(tempProblem);
getProblemsMap().put(tempFile, list);
}
}
private class RemoveMarkerProblem extends Problem {
protected class RemoveMarkerProblem extends Problem {
public RemoveMarkerProblem(IFile file, IFile orig) {
super(file, orig);
}
public boolean isAddProblem() {
return false;
}
public Object getProblem() {
return null;
}
public Object getLocation() {
return null;
}
public void run() {
if (originator == null) {
//remove all markers
try {
resource.deleteMarkers(ICModelMarker.INDEXER_MARKER, true, IResource.DEPTH_INFINITE);
} catch (CoreException e) {
}
return;
}
// else remove only those markers with matching originator
IMarker[] markers;
try {
markers = resource.findMarkers(ICModelMarker.INDEXER_MARKER, true, IResource.DEPTH_INFINITE);
} catch (CoreException e1) {
return;
}
String origPath = originator.getFullPath().toString();
IMarker mark = null;
String orig = null;
for (int i = 0; i < markers.length; i++) {
mark = markers[ i ];
try {
orig = (String) mark.getAttribute(INDEXER_MARKER_ORIGINATOR);
if( orig != null && orig.equals(origPath )) {
mark.delete();
}
} catch (CoreException e) {
}
}
}
}
// Problem markers ******************************
@ -161,24 +219,7 @@ public abstract class AbstractIndexer implements IIndexer, ICSearchConstants {
this.problemMarkersEnabled = value;
}
/**
* @param tempFile - not null
* @param resourceFile
* @param problem
* @param location
*/
public void generateMarkerProblem(IFile tempFile, IFile resourceFile, Object problem, Object location) {
Problem tempProblem = new AddMarkerProblem(tempFile, resourceFile, problem, location);
if (problemsMap.containsKey(tempFile)) {
List list = (List) problemsMap.get(tempFile);
list.add(tempProblem);
} else {
List list = new ArrayList();
list.add(new RemoveMarkerProblem(tempFile, resourceFile)); //remove existing markers
list.add(tempProblem);
problemsMap.put(tempFile, list);
}
}
// abstract public void generateMarkerProblem(Problem problem);
public void requestRemoveMarkers(IFile resource, IFile originator ){
if (!areProblemMarkersEnabled())
@ -264,47 +305,17 @@ public abstract class AbstractIndexer implements IIndexer, ICSearchConstants {
Iterator i = problemsList.iterator();
while (i.hasNext()) {
Problem prob = (Problem) i.next();
if (prob.isAddProblem()) {
addMarkers(prob.file, prob.originator, prob.getProblem(), prob.getLocation());
} else {
removeMarkers(prob.file, prob.originator);
}
prob.run();
}
}
public void run() {
// TODO Auto-generated method stub
}
abstract protected void addMarkers(IFile tempFile, IFile originator, Object problem, Object location);
public void removeMarkers(IFile resource, IFile originator) {
if (originator == null) {
//remove all markers
try {
resource.deleteMarkers(ICModelMarker.INDEXER_MARKER, true, IResource.DEPTH_INFINITE);
} catch (CoreException e) {
}
return;
}
// else remove only those markers with matching originator
IMarker[] markers;
try {
markers = resource.findMarkers(ICModelMarker.INDEXER_MARKER, true, IResource.DEPTH_INFINITE);
} catch (CoreException e1) {
return;
}
String origPath = originator.getFullPath().toString();
IMarker mark = null;
String orig = null;
for (int i = 0; i < markers.length; i++) {
mark = markers[ i ];
try {
orig = (String) mark.getAttribute(INDEXER_MARKER_ORIGINATOR);
if( orig != null && orig.equals(origPath )) {
mark.delete();
}
} catch (CoreException e) {
}
}
}
public IFile getResourceFile() {
return resourceFile;
}
}

View file

@ -116,7 +116,7 @@ public class SourceIndexerRequestor implements ISourceElementRequestor {
}
if( tempFile != null ){
indexer.generateMarkerProblem(tempFile, resourceFile, problem, null);
indexer.generateMarkerProblem(tempFile, resourceFile, problem);
}
}

View file

@ -19,6 +19,7 @@ import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.eclipse.cdt.core.CCorePlugin;
import org.eclipse.cdt.core.ICLogConstants;
@ -86,7 +87,6 @@ import org.eclipse.core.runtime.Path;
* - Unions
*/
public class SourceIndexerRunner extends AbstractIndexer {
IFile resourceFile;
private SourceIndexer indexer;
/**
@ -191,13 +191,6 @@ public class SourceIndexerRunner extends AbstractIndexer {
}
}
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.search.indexing.AbstractIndexer#getResourceFile()
*/
public IFile getResourceFile() {
return resourceFile;
}
/**
* @param fullPath
* @param path
@ -206,16 +199,17 @@ public class SourceIndexerRunner extends AbstractIndexer {
return indexer.haveEncounteredHeader(fullPath, path);
}
/* (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)
*/
protected void addMarkers(IFile tempFile, IFile originator, Object problem, Object location) {
if (problem instanceof IProblem) {
IProblem iProblem = (IProblem) problem;
protected class AddMarkerProblem extends Problem {
private IProblem problem;
public AddMarkerProblem(IResource file, IResource orig, IProblem problem) {
super(file, orig);
this.problem = problem;
}
public void run() {
try {
//we only ever add index markers on the file, so DEPTH_ZERO is far enough
IMarker[] markers = tempFile.findMarkers(ICModelMarker.INDEXER_MARKER, true,IResource.DEPTH_ZERO);
IMarker[] markers = resource.findMarkers(ICModelMarker.INDEXER_MARKER, true,IResource.DEPTH_ZERO);
boolean newProblem = true;
@ -228,8 +222,8 @@ public class SourceIndexerRunner extends AbstractIndexer {
tempMarker = markers[i];
tempInt = (Integer) tempMarker.getAttribute(IMarker.LINE_NUMBER);
tempMsgString = (String) tempMarker.getAttribute(IMarker.MESSAGE);
if (tempInt != null && tempInt.intValue()==iProblem.getSourceLineNumber() &&
tempMsgString.equalsIgnoreCase( INDEXER_MARKER_PREFIX + iProblem.getMessage()))
if (tempInt != null && tempInt.intValue() == problem.getSourceLineNumber() &&
tempMsgString.equalsIgnoreCase( INDEXER_MARKER_PREFIX + problem.getMessage()))
{
newProblem = false;
break;
@ -238,24 +232,23 @@ public class SourceIndexerRunner extends AbstractIndexer {
}
if (newProblem) {
IMarker marker = tempFile.createMarker(ICModelMarker.INDEXER_MARKER);
int start = iProblem.getSourceStart();
int end = iProblem.getSourceEnd();
IMarker marker = resource.createMarker(ICModelMarker.INDEXER_MARKER);
int start = problem.getSourceStart();
int end = problem.getSourceEnd();
if (end <= start)
end = start + 1;
marker.setAttribute(IMarker.LOCATION, iProblem.getSourceLineNumber());
marker.setAttribute(IMarker.MESSAGE, INDEXER_MARKER_PREFIX + iProblem.getMessage());
marker.setAttribute(IMarker.LOCATION, problem.getSourceLineNumber());
marker.setAttribute(IMarker.MESSAGE, INDEXER_MARKER_PREFIX + problem.getMessage());
marker.setAttribute(IMarker.SEVERITY, IMarker.SEVERITY_WARNING);
marker.setAttribute(IMarker.LINE_NUMBER, iProblem.getSourceLineNumber());
marker.setAttribute(IMarker.LINE_NUMBER, problem.getSourceLineNumber());
marker.setAttribute(IMarker.CHAR_START, start);
marker.setAttribute(IMarker.CHAR_END, end);
marker.setAttribute(INDEXER_MARKER_ORIGINATOR, originator.getFullPath().toString() );
}
} catch (CoreException e) {
// You need to handle the cases where attribute value is rejected
}
}
}
}
public void addClassSpecifier(IASTClassSpecifier classSpecification, int fileNumber){
@ -647,4 +640,17 @@ public class SourceIndexerRunner extends AbstractIndexer {
int BOGUS_ENTRY = 1;
this.output.addIncludeRef(fileNumber, incName,1,1, IIndex.OFFSET);
}
public void generateMarkerProblem(IFile tempFile, IFile originator, IProblem problem) {
Problem tempProblem = new AddMarkerProblem(tempFile, originator, problem);
if (getProblemsMap().containsKey(tempFile)) {
List list = (List) getProblemsMap().get(tempFile);
list.add(tempProblem);
} else {
List list = new ArrayList();
list.add(new RemoveMarkerProblem(tempFile, originator)); //remove existing markers
list.add(tempProblem);
getProblemsMap().put(tempFile, list);
}
}
}