Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read this important communication.
Bug 343175 - NPE: Error in CDT UI during reconcile
Summary: NPE: Error in CDT UI during reconcile
Status: RESOLVED DUPLICATE of bug 343948
Alias: None
Product: CDT
Classification: Tools
Component: cdt-parser (show other bugs)
Version: 8.0   Edit
Hardware: All All
: P3 normal (vote)
Target Milestone: ---   Edit
Assignee: Project Inbox CLA
QA Contact: Markus Schorn CLA
URL:
Whiteboard:
Keywords:
: 344440 (view as bug list)
Depends on:
Blocks:
 
Reported: 2011-04-18 12:42 EDT by Andrew Gvozdev CLA
Modified: 2011-05-03 13:15 EDT (History)
4 users (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Andrew Gvozdev CLA 2011-04-18 12:42:46 EDT
Getting following persistent exception in log. Latest Hudson build for the HEAD.

Error in CDT UI during reconcile
java.lang.NullPointerException
at org.eclipse.cdt.internal.core.parser.scanner.ImageLocationInfo$MacroImageLocationInfo.createLocation(ImageLocationInfo.java:45)
at org.eclipse.cdt.internal.core.parser.scanner.ASTMacroReferenceName.getImageLocation(ASTPreprocessorName.java:187)
at org.eclipse.cdt.internal.ui.editor.SemanticHighlightingReconciler$PositionCollector.addNameLocation(SemanticHighlightingReconciler.java:216)
at org.eclipse.cdt.internal.ui.editor.SemanticHighlightingReconciler$PositionCollector.visitNode(SemanticHighlightingReconciler.java:197)
at org.eclipse.cdt.internal.ui.editor.SemanticHighlightingReconciler$PositionCollector.visit(SemanticHighlightingReconciler.java:108)
at org.eclipse.cdt.internal.core.dom.parser.ASTTranslationUnit.accept(ASTTranslationUnit.java:271)
at org.eclipse.cdt.internal.ui.editor.SemanticHighlightingReconciler.reconcilePositions(SemanticHighlightingReconciler.java:402)
at org.eclipse.cdt.internal.ui.editor.SemanticHighlightingReconciler.reconciled(SemanticHighlightingReconciler.java:357)
at org.eclipse.cdt.internal.ui.editor.CEditor.reconciled(CEditor.java:3065)
at org.eclipse.cdt.internal.ui.text.CReconcilingStrategy.reconcile(CReconcilingStrategy.java:105)
at org.eclipse.cdt.internal.ui.text.CReconcilingStrategy.reconcile(CReconcilingStrategy.java:71)
at org.eclipse.cdt.internal.ui.text.CompositeReconcilingStrategy.reconcile(CompositeReconcilingStrategy.java:84)
at org.eclipse.cdt.internal.ui.text.CCompositeReconcilingStrategy.reconcile(CCompositeReconcilingStrategy.java:90)
at org.eclipse.jface.text.reconciler.MonoReconciler.process(MonoReconciler.java:77)
at org.eclipse.cdt.internal.ui.text.CReconciler.process(CReconciler.java:408)
at org.eclipse.jface.text.reconciler.AbstractReconciler$BackgroundThread.run(AbstractReconciler.java:206)
Comment 1 Andrew Gvozdev CLA 2011-04-18 12:44:27 EDT
Also that one but that one appears only once in the log:

Unhandled event loop exception
java.lang.NullPointerException
at org.eclipse.cdt.internal.core.parser.scanner.ImageLocationInfo$MacroImageLocationInfo.createLocation(ImageLocationInfo.java:45)
at org.eclipse.cdt.internal.core.parser.scanner.LocationCtxMacroExpansion.getImageLocation(LocationCtxMacroExpansion.java:98)
at org.eclipse.cdt.internal.core.parser.scanner.ASTMacroExpansionLocation.getImageLocation(ASTPreprocessorNode.java:679)
at org.eclipse.cdt.internal.core.parser.scanner.LocationMap.getImageLocation(LocationMap.java:491)
at org.eclipse.cdt.internal.core.dom.parser.ASTNode.getImageLocation(ASTNode.java:148)
at org.eclipse.cdt.internal.core.parser.scanner.FindNodeByImageLocation.processNode(FindNodeByImageLocation.java:53)
at org.eclipse.cdt.internal.core.parser.scanner.FindNodeByImageLocation.visit(FindNodeByImageLocation.java:75)
at org.eclipse.cdt.internal.core.dom.parser.cpp.CPPASTName.accept(CPPASTName.java:165)
at org.eclipse.cdt.internal.core.dom.parser.cpp.CPPASTQualifiedName.accept(CPPASTQualifiedName.java:197)
at org.eclipse.cdt.internal.core.dom.parser.cpp.CPPASTIdExpression.accept(CPPASTIdExpression.java:101)
at org.eclipse.cdt.internal.core.dom.parser.cpp.CPPASTFunctionCallExpression.accept(CPPASTFunctionCallExpression.java:180)
at org.eclipse.cdt.internal.core.dom.parser.cpp.CPPASTExpressionStatement.accept(CPPASTExpressionStatement.java:71)
at org.eclipse.cdt.internal.core.dom.parser.cpp.CPPASTCompoundStatement.accept(CPPASTCompoundStatement.java:79)
at org.eclipse.cdt.internal.core.dom.parser.cpp.CPPASTFunctionDefinition.accept(CPPASTFunctionDefinition.java:187)
at org.eclipse.cdt.internal.core.dom.parser.cpp.CPPASTCompositeTypeSpecifier.accept(CPPASTCompositeTypeSpecifier.java:172)
at org.eclipse.cdt.internal.core.dom.parser.cpp.CPPASTSimpleDeclaration.accept(CPPASTSimpleDeclaration.java:96)
at org.eclipse.cdt.internal.core.dom.parser.ASTTranslationUnit.accept(ASTTranslationUnit.java:279)
at org.eclipse.cdt.internal.core.parser.scanner.LocationMap.findPreprocessorNode(LocationMap.java:532)
at org.eclipse.cdt.internal.core.dom.parser.ASTNodeSelector.getNode(ASTNodeSelector.java:98)
at org.eclipse.cdt.internal.core.dom.parser.ASTNodeSelector.findNode(ASTNodeSelector.java:89)
at org.eclipse.cdt.internal.core.dom.parser.ASTNodeSelector.findNode(ASTNodeSelector.java:51)
at org.eclipse.cdt.internal.core.dom.parser.ASTNodeSelector.findEnclosingName(ASTNodeSelector.java:159)
at org.eclipse.cdt.internal.ui.editor.CElementHyperlinkDetector$1.runOnAST(CElementHyperlinkDetector.java:78)
at org.eclipse.cdt.internal.core.model.ASTCache.runOnAST(ASTCache.java:223)
at org.eclipse.cdt.internal.ui.editor.ASTProvider.runOnAST(ASTProvider.java:347)
at org.eclipse.cdt.internal.ui.editor.CElementHyperlinkDetector.detectHyperlinks(CElementHyperlinkDetector.java:71)
at org.eclipse.ui.texteditor.HyperlinkDetectorRegistry$HyperlinkDetectorDelegate.detectHyperlinks(HyperlinkDetectorRegistry.java:80)
at org.eclipse.jface.text.hyperlink.HyperlinkManager.findHyperlinks(HyperlinkManager.java:286)
at org.eclipse.jface.text.hyperlink.HyperlinkManager.findHyperlinks(HyperlinkManager.java:258)
at org.eclipse.jface.text.hyperlink.HyperlinkManager.mouseMove(HyperlinkManager.java:462)
at org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:211)
at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1053)
at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:4150)
at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3739)
at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2696)
at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2660)
at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2494)
at org.eclipse.ui.internal.Workbench$7.run(Workbench.java:674)
at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332)
at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:667)
at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149)
at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:123)
at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196)
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110)
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:344)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:622)
at org.eclipse.equinox.launcher.Main.basicRun(Main.java:577)
at org.eclipse.equinox.launcher.Main.run(Main.java:1410)
Comment 2 Marc-André Laperle CLA 2011-04-19 11:36:18 EDT
I just got this too:

java.lang.NullPointerException
	at org.eclipse.cdt.internal.core.parser.scanner.ImageLocationInfo$MacroImageLocationInfo.createLocation(ImageLocationInfo.java:45)
	at org.eclipse.cdt.internal.core.parser.scanner.LocationCtxMacroExpansion.getImageLocation(LocationCtxMacroExpansion.java:98)
	at org.eclipse.cdt.internal.core.parser.scanner.ASTMacroExpansionLocation.getImageLocation(ASTPreprocessorNode.java:679)
	at org.eclipse.cdt.internal.core.parser.scanner.LocationMap.getImageLocation(LocationMap.java:491)
	at org.eclipse.cdt.internal.core.dom.parser.ASTNode.getImageLocation(ASTNode.java:148)
	at org.eclipse.cdt.internal.ui.editor.SemanticHighlightingReconciler$PositionCollector.addNameLocation(SemanticHighlightingReconciler.java:216)
	at org.eclipse.cdt.internal.ui.editor.SemanticHighlightingReconciler$PositionCollector.visitNode(SemanticHighlightingReconciler.java:197)
	at org.eclipse.cdt.internal.ui.editor.SemanticHighlightingReconciler$PositionCollector.visit(SemanticHighlightingReconciler.java:184)
	at org.eclipse.cdt.internal.core.dom.parser.cpp.CPPASTName.accept(CPPASTName.java:165)
	at org.eclipse.cdt.internal.core.dom.parser.cpp.CPPASTTemplateId.accept(CPPASTTemplateId.java:166)
	at org.eclipse.cdt.internal.core.dom.parser.cpp.CPPASTNamedTypeSpecifier.accept(CPPASTNamedTypeSpecifier.java:93)
	at org.eclipse.cdt.internal.core.dom.parser.cpp.CPPASTSimpleDeclaration.accept(CPPASTSimpleDeclaration.java:96)
	at org.eclipse.cdt.internal.core.dom.parser.ASTTranslationUnit.accept(ASTTranslationUnit.java:279)
	at org.eclipse.cdt.internal.ui.editor.SemanticHighlightingReconciler.reconcilePositions(SemanticHighlightingReconciler.java:402)
	at org.eclipse.cdt.internal.ui.editor.SemanticHighlightingReconciler.reconciled(SemanticHighlightingReconciler.java:357)
	at org.eclipse.cdt.internal.ui.editor.CEditor.reconciled(CEditor.java:3091)
	at org.eclipse.cdt.internal.ui.text.CReconcilingStrategy.reconcile(CReconcilingStrategy.java:105)
	at org.eclipse.cdt.internal.ui.text.CReconcilingStrategy.reconcile(CReconcilingStrategy.java:71)
	at org.eclipse.cdt.internal.ui.text.CompositeReconcilingStrategy.reconcile(CompositeReconcilingStrategy.java:84)
	at org.eclipse.cdt.internal.ui.text.CCompositeReconcilingStrategy.reconcile(CCompositeReconcilingStrategy.java:90)
	at org.eclipse.jface.text.reconciler.MonoReconciler.process(MonoReconciler.java:77)
	at org.eclipse.cdt.internal.ui.text.CReconciler.process(CReconciler.java:408)
	at org.eclipse.jface.text.reconciler.AbstractReconciler$BackgroundThread.run(AbstractReconciler.java:206)
Comment 3 Markus Schorn CLA 2011-04-20 03:25:31 EDT
Can you provide a piece of source code that triggers the bug?
Comment 4 Andrew Gvozdev CLA 2011-04-20 09:55:55 EDT
I am getting those coming to the log but haven't figured what causes it yet. Any pointers which user action could trigger that? Is it hovering, F3, opening a file, editing?
Comment 5 Chris Recoskie CLA 2011-04-20 10:32:49 EDT
(In reply to comment #4)
> I am getting those coming to the log but haven't figured what causes it yet.
> Any pointers which user action could trigger that? Is it hovering, F3, opening
> a file, editing?

The reconciler is called to build the CModel for the currently open source file.  It gets triggered when you open the file, and also when you make edits (after a short delay of non-activity on the user's part).
Comment 6 Marc-André Laperle CLA 2011-04-23 03:33:55 EDT
I got something different, maybe a different bug though:

java.lang.NullPointerException
	at org.eclipse.cdt.core.parser.util.CharArrayUtils.equals(CharArrayUtils.java:92)
	at org.eclipse.cdt.core.parser.util.CharTable.lookup(CharTable.java:163)
	at org.eclipse.cdt.core.parser.util.CharArrayObjectMap.get(CharArrayObjectMap.java:53)
	at org.eclipse.cdt.core.parser.util.CharArrayObjectMap.get(CharArrayObjectMap.java:60)
	at org.eclipse.cdt.internal.core.dom.parser.cpp.CPPScope.addName(CPPScope.java:108)
	at org.eclipse.cdt.internal.core.dom.parser.ASTInternal.addName(ASTInternal.java:54)
	at org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.CPPSemantics.populateCache(CPPSemantics.java:1577)
	at org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.CPPSemantics.populateCache(CPPSemantics.java:1467)
	at org.eclipse.cdt.internal.core.dom.parser.cpp.CPPScope.populateCache(CPPScope.java:321)
	at org.eclipse.cdt.internal.core.dom.parser.cpp.CPPScope.getBindingsInAST(CPPScope.java:251)
	at org.eclipse.cdt.internal.core.dom.parser.cpp.CPPScope.getBindings(CPPScope.java:207)
	at org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.CPPSemantics.getBindingsFromScope(CPPSemantics.java:1199)
	at org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.CPPSemantics.lookup(CPPSemantics.java:943)
	at org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.CPPSemantics.resolveBinding(CPPSemantics.java:255)
	at org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.CPPVisitor.createBinding(CPPVisitor.java:227)
	at org.eclipse.cdt.internal.core.dom.parser.cpp.CPPASTName.createIntermediateBinding(CPPASTName.java:63)
	at org.eclipse.cdt.internal.core.dom.parser.cpp.CPPASTNameBase.resolvePreBinding(CPPASTNameBase.java:74)
	at org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.CPPVisitor.getContainingScopeOrNull(CPPVisitor.java:1082)
	at org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.CPPVisitor.getContainingScope(CPPVisitor.java:1042)
	at org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.CPPSemantics.getLookupScope(CPPSemantics.java:783)
	at org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.CPPSemantics.lookup(CPPSemantics.java:896)
	at org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.CPPSemantics.resolveBinding(CPPSemantics.java:255)
	at org.eclipse.cdt.internal.core.dom.parser.cpp.semantics.CPPVisitor.createBinding(CPPVisitor.java:227)
	at org.eclipse.cdt.internal.core.dom.parser.cpp.CPPASTName.createIntermediateBinding(CPPASTName.java:63)
	at org.eclipse.cdt.internal.core.dom.parser.cpp.CPPASTNameBase.resolveBinding(CPPASTNameBase.java:86)
	at org.eclipse.cdt.internal.core.dom.parser.cpp.CPPASTQualifiedName.resolveBinding(CPPASTQualifiedName.java:92)
	at org.eclipse.cdt.internal.ui.editor.SemanticToken.getBinding(SemanticToken.java:47)
	at org.eclipse.cdt.internal.ui.editor.SemanticHighlightings$TemplateParameterHighlighting.consumes(SemanticHighlightings.java:1156)
	at org.eclipse.cdt.internal.ui.editor.SemanticHighlightingReconciler$PositionCollector.visitNode(SemanticHighlightingReconciler.java:195)
	at org.eclipse.cdt.internal.ui.editor.SemanticHighlightingReconciler$PositionCollector.visit(SemanticHighlightingReconciler.java:184)
	at org.eclipse.cdt.internal.core.dom.parser.cpp.CPPASTQualifiedName.accept(CPPASTQualifiedName.java:182)
	at org.eclipse.cdt.internal.core.dom.parser.cpp.CPPASTNamedTypeSpecifier.accept(CPPASTNamedTypeSpecifier.java:93)
	at org.eclipse.cdt.internal.core.dom.parser.cpp.CPPASTSimpleDeclaration.accept(CPPASTSimpleDeclaration.java:96)
	at org.eclipse.cdt.internal.core.dom.parser.cpp.CPPASTDeclarationStatement.accept(CPPASTDeclarationStatement.java:72)
	at org.eclipse.cdt.internal.core.dom.parser.cpp.CPPASTForStatement.accept(CPPASTForStatement.java:130)
	at org.eclipse.cdt.internal.core.dom.parser.cpp.CPPASTCompoundStatement.accept(CPPASTCompoundStatement.java:79)
	at org.eclipse.cdt.internal.core.dom.parser.cpp.CPPASTFunctionDefinition.accept(CPPASTFunctionDefinition.java:187)
	at org.eclipse.cdt.internal.core.dom.parser.cpp.CPPASTNamespaceDefinition.accept(CPPASTNamespaceDefinition.java:129)
	at org.eclipse.cdt.internal.core.dom.parser.ASTTranslationUnit.accept(ASTTranslationUnit.java:279)
	at org.eclipse.cdt.internal.ui.editor.SemanticHighlightingReconciler.reconcilePositions(SemanticHighlightingReconciler.java:402)
	at org.eclipse.cdt.internal.ui.editor.SemanticHighlightingReconciler.reconciled(SemanticHighlightingReconciler.java:357)
	at org.eclipse.cdt.internal.ui.editor.CEditor.reconciled(CEditor.java:3091)

Then after editing some more, I noticed that semantic highlighting was not working at all anymore. Looking at the threads:
- 3 CReconciler threads waiting in AbstractReconciler:179 fDirtyRegionQueue.wait(fDelay);
- 1 CReconciler in an infinite loop in org.eclipse.cdt.core.parser.util.HashTable.linkIntoHashTable(int, int)

while (nextTable[j] != 0) {
    //    if (nextTable[j] - 1 == j) {
    //        break;
    //    }
    j = nextTable[j] - 1;
}

value of nextTable[0] was 1

I was editing OgreMesh.cpp (http://www.ogre3d.org/)
Comment 7 Markus Schorn CLA 2011-04-27 08:10:59 EDT
(In reply to comment #6)
Most likely this exception is the result of concurrently accessing the same AST from different threads (The code of the HashTable has not been changed in the last 3 years).
Comment 8 Andrew Gvozdev CLA 2011-04-27 09:02:26 EDT
(In reply to comment #7)
> (In reply to comment #6)
> Most likely this exception is the result of concurrently accessing the same AST
> from different threads (The code of the HashTable has not been changed in the
> last 3 years).
It certainly looks this way. I have troubles to corner the exception, it always slips behind the radar. The closest I happen to notice was that I was doing a search on a macro (#define) then checking the occurrences. Then I manually renamed the macro, navigated to search results and fixed all the occurrences. When my attention released from rename process the exception was there. I don't really know what exactly action triggered it.
Comment 9 Markus Schorn CLA 2011-05-03 12:31:52 EDT
*** Bug 344440 has been marked as a duplicate of this bug. ***
Comment 10 Andrew Gvozdev CLA 2011-05-03 13:15:30 EDT
(In reply to bug 344440 comment #5)
> (In reply to comment #4)
> > The same infinite loop is reported in bug 343175 comment 6
> > *** This bug has been marked as a duplicate of bug 343175 ***
> Confirmed. After updating from yesterday's HEAD I don't see that problem any
> longer.
I do not see reconcile NPE reported in this bug any longer after applying the build with the fix either.

*** This bug has been marked as a duplicate of bug 343948 ***