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

65623 - add rest of the index markers

This commit is contained in:
Andrew Niefer 2004-06-21 17:56:37 +00:00
parent 395aab5426
commit 574f68dad7
7 changed files with 155 additions and 91 deletions

View file

@ -1,3 +1,9 @@
2004-06-21 Andrew Niefer
enable reporting of semantic problems:
* index/org/eclipse/cdt/internal/core/search/indexing/IndexManager.java
* index/org/eclipse/cdt/internal/core/search/indexing/SourceIndexer.java
* index/org/eclipse/cdt/internal/core/search/indexing/SourceIndexerRequestor.java
2004-06-21 Alain Magloire
IndexManager, call CCorePlugin.getCDescriptor(.., false).

View file

@ -110,6 +110,10 @@ public class IndexManager extends JobManager implements IIndexConstants {
public static final String INDEXER_VALUE = "indexValue"; //$NON-NLS-1$
public static final String INDEXER_PROBLEMS_VALUE = "indexProblemsValue"; //$NON-NLS-1$
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 synchronized void aboutToUpdateIndex(IPath path, Integer newIndexState) {
// newIndexState is either UPDATING_STATE or REBUILDING_STATE
// must tag the index as inconsistent, in case we exit before the update job is started
@ -359,33 +363,33 @@ public class IndexManager extends JobManager implements IIndexConstants {
return false;
}
public boolean isIndexProblemsEnabled(IProject project) {
Boolean value = null;
public int indexProblemsEnabled(IProject project) {
Integer value = null;
try {
value = (Boolean) project.getSessionProperty(problemsActivationKey);
value = (Integer) project.getSessionProperty(problemsActivationKey);
} catch (CoreException e) {
}
if (value != null)
return value.booleanValue();
return value.intValue();
try {
//Load value for project
value = loadIndexerProblemsEnabledFromCDescriptor(project);
if (value != null){
project.setSessionProperty(IndexManager.problemsActivationKey, value);
return value.booleanValue();
return value.intValue();
}
//TODO: Indexer Block Place holder for Managed Make - take out
value = new Boolean(false);
value = new Integer(0);
project.setSessionProperty(IndexManager.problemsActivationKey, value);
return value.booleanValue();
return value.intValue();
} catch (CoreException e1) {
}
return false;
return 0;
}
/**
* Index the content of the given source folder.
@ -773,32 +777,44 @@ public class IndexManager extends JobManager implements IIndexConstants {
return strBool;
}
private Boolean loadIndexerProblemsEnabledFromCDescriptor(IProject project) throws CoreException {
// we are only checking for the settings do not create the descriptor.
private Integer loadIndexerProblemsEnabledFromCDescriptor(IProject project) throws CoreException {
// we are only checking for the settings do not create the descriptor.
ICDescriptor descriptor = CCorePlugin.getDefault().getCProjectDescription(project, false);
Boolean strBool = null;
if (descriptor != null) {
Integer strInt = null;
if( descriptor != null ){
Node child = descriptor.getProjectData(CDT_INDEXER).getFirstChild();
while (child != null) {
if (child.getNodeName().equals(INDEXER_PROBLEMS_ENABLED))
strBool = Boolean.valueOf(((Element)child).getAttribute(INDEXER_PROBLEMS_VALUE));
if (child.getNodeName().equals(INDEXER_PROBLEMS_ENABLED)){
String val = ((Element)child).getAttribute(INDEXER_PROBLEMS_VALUE);
try{
strInt = Integer.valueOf( val );
} catch( NumberFormatException e ){
//some old projects might have a boolean stored, translate that into just preprocessors
Boolean bool = Boolean.valueOf( val );
if( bool.booleanValue() )
strInt = new Integer( IndexManager.PREPROCESSOR_PROBLEMS_BIT );
else
strInt = new Integer( 0 );
}
break;
}
child = child.getNextSibling();
}
}
return strBool;
return strInt;
}
static private class RemoveIndexMarkersJob extends Job{
private final IProject project;
public RemoveIndexMarkersJob( IProject project, String name ){
private final IResource resource;
public RemoveIndexMarkersJob( IResource resource, String name ){
super( name );
this.project = project;
this.resource = resource;
}
protected IStatus run(IProgressMonitor monitor) {
try {
project.deleteMarkers( ICModelMarker.INDEXER_MARKER, true, IResource.DEPTH_INFINITE );
resource.deleteMarkers( ICModelMarker.INDEXER_MARKER, true, IResource.DEPTH_INFINITE );
} catch (CoreException e) {
return Status.CANCEL_STATUS;
}
@ -807,9 +823,10 @@ public class IndexManager extends JobManager implements IIndexConstants {
}
public void removeAllIndexerProblems( IProject project){
public void removeIndexerProblems( IResource resource){
String jobName = "remove markers"; //$NON-NLS-1$
RemoveIndexMarkersJob job = new RemoveIndexMarkersJob( project, jobName );
RemoveIndexMarkersJob job = new RemoveIndexMarkersJob( resource, jobName );
job.setRule( resource );
job.setPriority( Job.DECORATE );
job.schedule();
}

View file

@ -15,7 +15,6 @@ package org.eclipse.cdt.internal.core.search.indexing;
* @author bgheorgh
*/
import java.io.BufferedInputStream;
import java.io.IOException;
import java.util.ArrayList;
@ -80,8 +79,8 @@ public class SourceIndexer extends AbstractIndexer {
SourceIndexerRequestor requestor = new SourceIndexerRequestor(this, resourceFile, timeOut);
IndexManager manager = CCorePlugin.getDefault().getCoreModel().getIndexManager();
boolean problemsEnabled = manager.isIndexProblemsEnabled( resourceFile.getProject() );
requestor.setProblemMarkersEnabled( problemsEnabled );
int problems = manager.indexProblemsEnabled( resourceFile.getProject() );
requestor.setProblemMarkersEnabled( problems );
requestor.requestRemoveMarkers( resourceFile, null );
//Get the scanner info
@ -103,7 +102,6 @@ public class SourceIndexer extends AbstractIndexer {
try
{
CodeReader reader = new CodeReader(resourceFile.getLocation().toOSString(), resourceFile.getContents());
BufferedInputStream inStream = new BufferedInputStream(resourceFile.getContents());
parser = ParserFactory.createParser(
ParserFactory.createScanner(reader, scanInfo, ParserMode.COMPLETE_PARSE, language, requestor, ParserUtil.getScannerLogService(), null ),
requestor, ParserMode.COMPLETE_PARSE, language, ParserUtil.getParserLogService() );
@ -145,7 +143,7 @@ public class SourceIndexer extends AbstractIndexer {
finally{
requestor.stopTimer();
//if the user disable problem reporting since we last checked, don't report the collected problems
if( manager.isIndexProblemsEnabled( resourceFile.getProject() ) )
if( manager.indexProblemsEnabled( resourceFile.getProject() ) != 0 )
requestor.reportProblems();
//Report events

View file

@ -100,7 +100,7 @@ public class SourceIndexerRequestor implements ISourceElementRequestor, IIndexCo
private IASTInclusion currentInclude = null;
private LinkedList includeStack = new LinkedList();
private boolean problemMarkersEnabled = false;
private int problemMarkersEnabled = 0;
private Map problemsMap = null;
private IProgressMonitor pm = new NullProgressMonitor();
@ -704,14 +704,14 @@ public class SourceIndexerRequestor implements ISourceElementRequestor, IIndexCo
public boolean areProblemMarkersEnabled(){
return problemMarkersEnabled;
return problemMarkersEnabled != 0;
}
public void setProblemMarkersEnabled( boolean enabled ){
if( enabled ){
public void setProblemMarkersEnabled( int value ){
if( value != 0 ){
problemsMap = new HashMap();
}
this.problemMarkersEnabled = enabled;
this.problemMarkersEnabled = value;
}
public void reportProblems(){
@ -754,9 +754,20 @@ public class SourceIndexerRequestor implements ISourceElementRequestor, IIndexCo
}
public boolean shouldRecordProblem( IProblem problem ){
if( problem.checkCategory( IProblem.PREPROCESSOR_RELATED ) ){
return problem.getID() != IProblem.PREPROCESSOR_CIRCULAR_INCLUSION;
}
if( problem.getSourceLineNumber() == -1 )
return false;
boolean preprocessor = ( problemMarkersEnabled & IndexManager.PREPROCESSOR_PROBLEMS_BIT ) != 0;
boolean semantics = ( problemMarkersEnabled & IndexManager.SEMANTIC_PROBLEMS_BIT ) != 0;
boolean syntax = ( problemMarkersEnabled & IndexManager.SYNTACTIC_PROBLEMS_BIT ) != 0;
if( problem.checkCategory( IProblem.PREPROCESSOR_RELATED ) )
return preprocessor && problem.getID() != IProblem.PREPROCESSOR_CIRCULAR_INCLUSION;
else if( problem.checkCategory( IProblem.SEMANTICS_RELATED ) )
return semantics;
else if( problem.checkCategory( IProblem.SYNTAX_RELATED ) )
return syntax;
return false;
}
@ -779,7 +790,7 @@ public class SourceIndexerRequestor implements ISourceElementRequestor, IIndexCo
}
private class ProcessMarkersJob extends Job{
private final List problems;
protected final List problems;
private final IFile resource;
public ProcessMarkersJob( IFile resource, List problems, String name ){
super( name );
@ -799,7 +810,7 @@ public class SourceIndexerRequestor implements ISourceElementRequestor, IIndexCo
}
return Status.OK_STATUS;
}
};
}
abstract private class Problem {
public IFile file;

View file

@ -51,5 +51,9 @@ AbstractErrorParserBlock.label.errorParsers=Error Parsers
ICElementPropertyConstants.catagory=Binary Info
IndexerOptions.indexer = C/C++ Indexer
IndexerOptions.enableIndexing = Enable C/C++ Indexing
IndexerOptions.enableProblems = Enable C/C++ Index problem reporting
IndexerOptions.enableIndexing = Enable C/C++ &Indexing
IndexerOptions.problemReporting = C/C++ Index problem reporting
IndexerOptions.enablePreprocessor = Report &preprocessor problems
IndexerOptions.enableSemantic = Report &semantic problems
IndexerOptions.enableSyntactic = Report s&yntactic problems

View file

@ -32,12 +32,17 @@ import org.w3c.dom.Node;
public class IndexerOptionDialogPage extends DialogPage {
private static final String ENABLE_PROBLEMS = CUIMessages.getString( "IndexerOptions.enableProblems" ); //$NON-NLS-1$
private static final String ENABLE_PREPROCESSOR_PROBLEMS = CUIMessages.getString( "IndexerOptions.enablePreprocessor" ); //$NON-NLS-1$
private static final String ENABLE_SEMANTIC_PROBLEMS = CUIMessages.getString( "IndexerOptions.enableSemantic" ); //$NON-NLS-1$
private static final String ENABLE_SYNTACTIC_PROBLEMS = CUIMessages.getString( "IndexerOptions.enableSyntactic" ); //$NON-NLS-1$
private static final String ENABLE_INDEXING = CUIMessages.getString( "IndexerOptions.enableIndexing" ); //$NON-NLS-1$
private static final String INDEXER = CUIMessages.getString("IndexerOptions.indexer" ); //$NON-NLS-1$
private static final String INDEXER_PROBLEMS = CUIMessages.getString("IndexerOptions.problemReporting" ); //$NON-NLS-1$
private Button indexerEnabled;
private Button indexerProblemsEnabled;
private Button preprocessorProblemsEnabled;
private Button syntacticProblemsEnabled;
private Button semanticProblemsEnabled;
public IndexerOptionDialogPage(){
super();
@ -60,8 +65,16 @@ public class IndexerOptionDialogPage extends DialogPage {
group.setText( INDEXER );
indexerEnabled = createCheckButton(group, ENABLE_INDEXING );
indexerProblemsEnabled = createCheckButton( group, ENABLE_PROBLEMS );
Group problemsGroup = new Group(result, SWT.NONE );
problemsGroup.setLayout(new GridLayout());
problemsGroup.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
problemsGroup.setText( INDEXER_PROBLEMS );
preprocessorProblemsEnabled = createCheckButton( problemsGroup, ENABLE_PREPROCESSOR_PROBLEMS );
semanticProblemsEnabled = createCheckButton( problemsGroup, ENABLE_SEMANTIC_PROBLEMS );
//uncomment when we want to report syntax problems
//syntacticProblemsEnabled = createCheckButton( problemsGroup, ENABLE_SYNTACTIC_PROBLEMS );
setControl(result);
}
@ -83,16 +96,24 @@ public class IndexerOptionDialogPage extends DialogPage {
indexerEnabled.setSelection(value);
}
public void setIndexerProblemsValue( boolean value ){
indexerProblemsEnabled.setSelection( value );
public void setIndexerProblemValues( int value ){
preprocessorProblemsEnabled.setSelection( (value & IndexManager.PREPROCESSOR_PROBLEMS_BIT) != 0 );
if( syntacticProblemsEnabled != null )
syntacticProblemsEnabled.setSelection( (value & IndexManager.SYNTACTIC_PROBLEMS_BIT) != 0 );
semanticProblemsEnabled.setSelection( (value & IndexManager.SEMANTIC_PROBLEMS_BIT) != 0 );
}
public boolean getIndexerValue(){
return indexerEnabled.getSelection();
}
public boolean getIndexerProblemsValue(){
return indexerProblemsEnabled.getSelection();
public int getIndexerProblemsValues(){
int result = 0;
result |= preprocessorProblemsEnabled.getSelection() ? IndexManager.PREPROCESSOR_PROBLEMS_BIT : 0;
if( syntacticProblemsEnabled != null )
result |= syntacticProblemsEnabled.getSelection() ? IndexManager.SYNTACTIC_PROBLEMS_BIT : 0;
result |= semanticProblemsEnabled.getSelection() ? IndexManager.SEMANTIC_PROBLEMS_BIT : 0;
return result;
}
public void persistIndexerValues(IProject project){
@ -105,31 +126,28 @@ public class IndexerOptionDialogPage extends DialogPage {
descriptor = CCorePlugin.getDefault().getCProjectDescription(newProject, true);
rootElement = descriptor.getProjectData(IndexManager.CDT_INDEXER);
// Clear out all current children
Node child = rootElement.getFirstChild();
while (child != null) {
rootElement.removeChild(child);
child = rootElement.getFirstChild();
}
Document doc = rootElement.getOwnerDocument();
// Clear out all current children
Node child = rootElement.getFirstChild();
while (child != null) {
rootElement.removeChild(child);
child = rootElement.getFirstChild();
}
Document doc = rootElement.getOwnerDocument();
boolean indexProject = getIndexerValue();
int problemValues = getIndexerProblemsValues();
boolean indexProject = getIndexerValue();
boolean problemsEnabled = getIndexerProblemsValue();
saveIndexerEnabled(indexProject, rootElement, doc);
saveIndexerProblemsEnabled( problemValues, rootElement, doc );
saveIndexerEnabled(indexProject, rootElement, doc);
saveIndexerProblemsEnabled( problemsEnabled, rootElement, doc );
descriptor.saveProjectData();
descriptor.saveProjectData();
//Update project session property
project.setSessionProperty(IndexManager.activationKey,new Boolean(indexProject));
project.setSessionProperty(IndexManager.problemsActivationKey, new Boolean( problemsEnabled ));
//Update project session property
project.setSessionProperty(IndexManager.activationKey,new Boolean(indexProject));
project.setSessionProperty(IndexManager.problemsActivationKey, new Integer( problemValues ));
} catch (CoreException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@ -143,13 +161,12 @@ public class IndexerOptionDialogPage extends DialogPage {
rootElement.appendChild(indexEnabled);
}
private static void saveIndexerProblemsEnabled (boolean problemsEnabled, Element rootElement, Document doc ) {
private static void saveIndexerProblemsEnabled ( int problemValues, Element rootElement, Document doc ) {
Element enabled = doc.createElement(IndexManager.INDEXER_PROBLEMS_ENABLED);
Boolean tempValue= new Boolean( problemsEnabled );
Integer tempValue= new Integer( problemValues );
enabled.setAttribute(IndexManager.INDEXER_PROBLEMS_VALUE,tempValue.toString());
enabled.setAttribute(IndexManager.INDEXER_PROBLEMS_VALUE, tempValue.toString());
rootElement.appendChild(enabled);
}
}

View file

@ -31,7 +31,7 @@ public class IndexerOptionPropertyPage extends PropertyPage {
private IndexerOptionDialogPage optionPage;
private boolean oldIndexerValue;
private boolean oldIndexerProblemsValue;
private int oldIndexerProblemsValue;
public IndexerOptionPropertyPage(){
super();
@ -64,12 +64,11 @@ public class IndexerOptionPropertyPage extends PropertyPage {
oldIndexerValue = getIndexerEnabled(project);
oldIndexerProblemsValue = getIndexerProblemsEnabled( project );
} catch (CoreException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
optionPage.setIndexerValue(oldIndexerValue);
optionPage.setIndexerProblemsValue( oldIndexerProblemsValue );
optionPage.setIndexerProblemValues( oldIndexerProblemsValue );
}
/*
@ -78,10 +77,10 @@ public class IndexerOptionPropertyPage extends PropertyPage {
public boolean performOk() {
boolean newIndexerValue = optionPage.getIndexerValue();
boolean newIndexerProblemsValue = optionPage.getIndexerProblemsValue();
int newIndexerProblemsValue = optionPage.getIndexerProblemsValues();
boolean indexChanged = (oldIndexerValue != newIndexerValue);
boolean problemsChanged = (oldIndexerProblemsValue != newIndexerProblemsValue);
boolean problemsChanged = (oldIndexerProblemsValue != newIndexerProblemsValue );
if ( indexChanged || problemsChanged){
//persist new values
@ -89,12 +88,12 @@ public class IndexerOptionPropertyPage extends PropertyPage {
optionPage.persistIndexerValues(tempProject);
//if indexer is now on send a index all request
if( (indexChanged && newIndexerValue) || (problemsChanged && newIndexerProblemsValue && newIndexerValue) )
if( indexChanged && newIndexerValue )
CCorePlugin.getDefault().getCoreModel().getIndexManager().indexAll(tempProject);
else if( indexChanged && !newIndexerValue )
CCorePlugin.getDefault().getCoreModel().getIndexManager().discardJobs( tempProject.getName() );
else if( problemsChanged && !newIndexerProblemsValue ){
CCorePlugin.getDefault().getCoreModel().getIndexManager().removeAllIndexerProblems(tempProject);
else if( problemsChanged && newIndexerProblemsValue == 0){
CCorePlugin.getDefault().getCoreModel().getIndexManager().removeIndexerProblems(tempProject);
}
}
return true;
@ -134,10 +133,10 @@ public class IndexerOptionPropertyPage extends PropertyPage {
return indexValue.booleanValue();
}
public boolean getIndexerProblemsEnabled( IProject project ) throws CoreException
public int getIndexerProblemsEnabled( IProject project ) throws CoreException
{
// See if there's already one associated with the resource for this session
Boolean value = (Boolean) project.getSessionProperty(IndexManager.problemsActivationKey);
Integer value = (Integer) project.getSessionProperty( IndexManager.problemsActivationKey );
// Try to load one for the project
if (value == null) {
@ -149,13 +148,13 @@ public class IndexerOptionPropertyPage extends PropertyPage {
if (value != null) {
project.setSessionProperty(IndexManager.problemsActivationKey, value);
} else {
//Hmm, no persisted indexer value. Could be an old project - set to false and persist
value = new Boolean(false);
optionPage.setIndexerProblemsValue(false);
//Hmm, no persisted indexer value. Could be an old project - set all to false and persist
value = new Integer( 0 );
optionPage.setIndexerProblemValues( 0 );
optionPage.persistIndexerValues(project);
}
return value.booleanValue();
return value.intValue();
}
/**
* Loads dis from .cdtproject file
@ -181,20 +180,32 @@ public class IndexerOptionPropertyPage extends PropertyPage {
return strBool;
}
private Boolean loadIndexerProblemsEnabledFromCDescriptor( IProject project ) throws CoreException
private Integer loadIndexerProblemsEnabledFromCDescriptor( IProject project ) throws CoreException
{
ICDescriptor descriptor = CCorePlugin.getDefault().getCProjectDescription(project, true);
Node child = descriptor.getProjectData(IndexManager.CDT_INDEXER).getFirstChild();
Boolean strBool = null;
Integer strInt = null;
while (child != null) {
if (child.getNodeName().equals(IndexManager.INDEXER_PROBLEMS_ENABLED))
strBool = Boolean.valueOf(((Element)child).getAttribute(IndexManager.INDEXER_VALUE));
if (child.getNodeName().equals(IndexManager.INDEXER_PROBLEMS_ENABLED)) {
String val = ((Element)child).getAttribute(IndexManager.INDEXER_PROBLEMS_VALUE);
try{
strInt = Integer.valueOf( val );
} catch( NumberFormatException e ){
//some old projects might have a boolean stored, translate that into just preprocessors
Boolean bool = Boolean.valueOf( val );
if( bool.booleanValue() )
strInt = new Integer( IndexManager.PREPROCESSOR_PROBLEMS_BIT );
else
strInt = new Integer( 0 );
}
break;
}
child = child.getNextSibling();
}
return strBool;
return strInt;
}
}