From 693f2a470822c74636bf5de664a8dcdefa168ffc Mon Sep 17 00:00:00 2001 From: Vladimir Hirsl Date: Tue, 17 May 2005 18:41:26 +0000 Subject: [PATCH] Fixed problem marker updating for files that are not indexed due to empty scanner info. Some refactoring of problem marker generation code. --- core/org.eclipse.cdt.core/ChangeLog | 12 ++ .../ctagsindexer/CTagsIndexerRunner.java | 8 - .../CGenerateIndexVisitor.java | 4 +- .../CPPGenerateIndexVisitor.java | 4 +- .../DOMSourceIndexerRunner.java | 179 +++++++-------- .../index/sourceindexer/AbstractIndexer.java | 203 +++++++++--------- .../sourceindexer/SourceIndexerRequestor.java | 2 +- .../sourceindexer/SourceIndexerRunner.java | 58 ++--- 8 files changed, 232 insertions(+), 238 deletions(-) diff --git a/core/org.eclipse.cdt.core/ChangeLog b/core/org.eclipse.cdt.core/ChangeLog index e64acca6dfd..9e065a84eca 100644 --- a/core/org.eclipse.cdt.core/ChangeLog +++ b/core/org.eclipse.cdt.core/ChangeLog @@ -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. diff --git a/core/org.eclipse.cdt.core/index/org/eclipse/cdt/internal/core/index/ctagsindexer/CTagsIndexerRunner.java b/core/org.eclipse.cdt.core/index/org/eclipse/cdt/internal/core/index/ctagsindexer/CTagsIndexerRunner.java index fe35dac7428..fc884c99bfe 100644 --- a/core/org.eclipse.cdt.core/index/org/eclipse/cdt/internal/core/index/ctagsindexer/CTagsIndexerRunner.java +++ b/core/org.eclipse.cdt.core/index/org/eclipse/cdt/internal/core/index/ctagsindexer/CTagsIndexerRunner.java @@ -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) */ 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 ce812492cb4..eac311e3e2b 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 @@ -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; } 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 a29f6855712..7e28221608e 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 @@ -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; } 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 1df9c0ba19e..5765abf0fb5 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 @@ -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 0) { + IMarker tempMarker = null; + int nameStart = -1; + int nameLen = -1; + String tempMsgString = null; + + for (int i=0; i 0) { - IMarker tempMarker = null; - String tempMsgString = null; - - for (int i=0; i 0) { + IMarker tempMarker = null; + String tempMsgString = null; + + for (int i=0; i