From 574f68dad7b063c60cd6cf1f227894477a42c778 Mon Sep 17 00:00:00 2001 From: Andrew Niefer Date: Mon, 21 Jun 2004 17:56:37 +0000 Subject: [PATCH] 65623 - add rest of the index markers --- core/org.eclipse.cdt.core/index/ChangeLog | 6 ++ .../core/search/indexing/IndexManager.java | 61 +++++++++----- .../core/search/indexing/SourceIndexer.java | 8 +- .../indexing/SourceIndexerRequestor.java | 31 ++++--- .../cdt/internal/ui/CUIMessages.properties | 8 +- .../ui/dialogs/IndexerOptionDialogPage.java | 83 +++++++++++-------- .../ui/dialogs/IndexerOptionPropertyPage.java | 49 ++++++----- 7 files changed, 155 insertions(+), 91 deletions(-) diff --git a/core/org.eclipse.cdt.core/index/ChangeLog b/core/org.eclipse.cdt.core/index/ChangeLog index 6997ddda76c..2ae6096e8d4 100644 --- a/core/org.eclipse.cdt.core/index/ChangeLog +++ b/core/org.eclipse.cdt.core/index/ChangeLog @@ -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). diff --git a/core/org.eclipse.cdt.core/index/org/eclipse/cdt/internal/core/search/indexing/IndexManager.java b/core/org.eclipse.cdt.core/index/org/eclipse/cdt/internal/core/search/indexing/IndexManager.java index 90ccd39d495..67b5fdebcfe 100644 --- a/core/org.eclipse.cdt.core/index/org/eclipse/cdt/internal/core/search/indexing/IndexManager.java +++ b/core/org.eclipse.cdt.core/index/org/eclipse/cdt/internal/core/search/indexing/IndexManager.java @@ -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(); } diff --git a/core/org.eclipse.cdt.core/index/org/eclipse/cdt/internal/core/search/indexing/SourceIndexer.java b/core/org.eclipse.cdt.core/index/org/eclipse/cdt/internal/core/search/indexing/SourceIndexer.java index f820926ee58..ddd3a1ccedf 100644 --- a/core/org.eclipse.cdt.core/index/org/eclipse/cdt/internal/core/search/indexing/SourceIndexer.java +++ b/core/org.eclipse.cdt.core/index/org/eclipse/cdt/internal/core/search/indexing/SourceIndexer.java @@ -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 diff --git a/core/org.eclipse.cdt.core/index/org/eclipse/cdt/internal/core/search/indexing/SourceIndexerRequestor.java b/core/org.eclipse.cdt.core/index/org/eclipse/cdt/internal/core/search/indexing/SourceIndexerRequestor.java index e5e274589b3..4e1faca7e71 100644 --- a/core/org.eclipse.cdt.core/index/org/eclipse/cdt/internal/core/search/indexing/SourceIndexerRequestor.java +++ b/core/org.eclipse.cdt.core/index/org/eclipse/cdt/internal/core/search/indexing/SourceIndexerRequestor.java @@ -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; diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/CUIMessages.properties b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/CUIMessages.properties index 0bf9e4be87c..dfd68239da5 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/CUIMessages.properties +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/CUIMessages.properties @@ -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 + diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/dialogs/IndexerOptionDialogPage.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/dialogs/IndexerOptionDialogPage.java index efac97fdc8e..17c51972d35 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/dialogs/IndexerOptionDialogPage.java +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/dialogs/IndexerOptionDialogPage.java @@ -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(); - - boolean indexProject = getIndexerValue(); - boolean problemsEnabled = getIndexerProblemsValue(); - - saveIndexerEnabled(indexProject, rootElement, doc); - saveIndexerProblemsEnabled( problemsEnabled, rootElement, doc ); - - descriptor.saveProjectData(); - - //Update project session property - - project.setSessionProperty(IndexManager.activationKey,new Boolean(indexProject)); - project.setSessionProperty(IndexManager.problemsActivationKey, new Boolean( problemsEnabled )); + // 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(); + + saveIndexerEnabled(indexProject, rootElement, doc); + saveIndexerProblemsEnabled( problemValues, rootElement, doc ); + + descriptor.saveProjectData(); + + //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); - } } diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/dialogs/IndexerOptionPropertyPage.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/dialogs/IndexerOptionPropertyPage.java index 8984a192258..7f2ec1aeab9 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/dialogs/IndexerOptionPropertyPage.java +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/dialogs/IndexerOptionPropertyPage.java @@ -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; } }