Bug 130683 - NPE in DeltaProcessingState.addElementChangedListener()
Summary: NPE in DeltaProcessingState.addElementChangedListener()
Status: VERIFIED FIXED
Alias: None
Product: JDT
Classification: Eclipse Project
Component: Core (show other bugs)
Version: 3.1.2   Edit
Hardware: PC Windows XP
: P3 normal (vote)
Target Milestone: 3.2 M6   Edit
Assignee: Jerome Lanneluc CLA
QA Contact:
URL:
Whiteboard:
Keywords:
Depends on:
Blocks:
 
Reported: 2006-03-06 20:36 EST by Jess Garms CLA
Modified: 2006-03-28 04:11 EST (History)
0 users

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Jess Garms CLA 2006-03-06 20:36:01 EST
Ran into the following NPE:

java.lang.NullPointerException
    at org.eclipse.jdt.internal.core.DeltaProcessingState.addElementChangedListener(DeltaProcessingState.java:171)
    at org.eclipse.jdt.core.JavaCore.addElementChangedListener(JavaCore.java:1087)
    at org.eclipse.jem.internal.adapters.jdom.JavaModelListener.<init>(JavaModelListener.java:38)
    at org.eclipse.jem.internal.adapters.jdom.JavaModelListener.<init>(JavaModelListener.java:34)
    at org.eclipse.jem.internal.adapters.jdom.JavaReflectionSynchronizer.<init>(JavaReflectionSynchronizer.java:45)
    at org.eclipse.jem.internal.adapters.jdom.JavaJDOMAdapterFactory.initializeSynchronizer(JavaJDOMAdapterFactory.java:191)
    at org.eclipse.jem.internal.adapters.jdom.JavaJDOMAdapterFactory.setJavaProject(JavaJDOMAdapterFactory.java:231)
    at org.eclipse.jem.internal.adapters.jdom.JavaJDOMAdapterFactory.<init>(JavaJDOMAdapterFactory.java:45)
    at org.eclipse.jem.internal.plugin.JavaEMFNature.addJavaReflectionAdapterFactories(JavaEMFNature.java:177)
    at org.eclipse.jem.internal.plugin.JavaEMFNature.addAdapterFactories(JavaEMFNature.java:165)
    at org.eclipse.jem.internal.plugin.JavaEMFNature.primaryContributeToContext(JavaEMFNature.java:141)
    at org.eclipse.jem.internal.util.emf.workbench.EMFWorkbenchContextFactory.initializeEMFContextFromContributors(EMFWorkbenchContextFactory.java:127)
    at org.eclipse.jem.internal.util.emf.workbench.EMFWorkbenchContextFactory.createEMFContext(EMFWorkbenchContextFactory.java:110)
    at org.eclipse.jem.util.emf.workbench.WorkbenchResourceHelperBase.createEMFContext(WorkbenchResourceHelperBase.java:222)
    at org.eclipse.jem.util.emf.workbench.nature.EMFNature.createEmfContext(EMFNature.java:105)
    at org.eclipse.jem.util.emf.workbench.nature.EMFNature.getEmfContextBase(EMFNature.java:229)
    at org.eclipse.wst.common.internal.emfworkbench.integration.EditModelNature.getEmfContext(EditModelNature.java:61)
    at org.eclipse.wst.common.internal.emfworkbench.integration.EditModelNature.getEditModelForRead(EditModelNature.java:48)
    at org.eclipse.wst.common.internal.emfworkbench.integration.EditModelNature.getEditModelForRead(EditModelNature.java:39)
    at org.eclipse.wst.common.componentcore.ModuleCoreNature.getModuleStructuralModelForRead(ModuleCoreNature.java:238)
    at org.eclipse.wst.common.componentcore.internal.StructureEdit.<init>(StructureEdit.java:315)
    at org.eclipse.wst.common.componentcore.internal.StructureEdit.getStructureEditForRead(StructureEdit.java:114)
    at org.eclipse.wst.common.componentcore.internal.resources.VirtualComponent.exists(VirtualComponent.java:87)
    at com.bea.wlw.webproject.core.util.WebProject.refreshWebProjectInfo(WebProject.java:747)
    at com.bea.wlw.webproject.core.util.WebProjectManager.rescanWebProject(WebProjectManager.java:366)
    at com.bea.wlw.webproject.core.util.WebProjectManager.access$0(WebProjectManager.java:362)
    at com.bea.wlw.webproject.core.util.WebProjectManager$1.run(WebProjectManager.java:188)
    at org.eclipse.core.internal.jobs.Worker.run(Worker.java:76)

As far as I can tell, this looks like a race condition between adding and/or removing element change listeners on different threads. It could be fixed by adding synchronization in either JavaCore or DeltaProcessingState.
Comment 1 Jess Garms CLA 2006-03-07 13:02:21 EST
I should mention that I tried adding a null check for the argument passed in to DeltaProcessingState.addElementChangedListener(), but it was not triggered before I saw the NPE later.

The NPE happens periodically, but I do not have a reliable repro.
Comment 2 Jerome Lanneluc CLA 2006-03-09 06:46:39 EST
Synchronized DeltaProcessingState#addElementChangedListener() and removeElementChangedListener() as well as the access to those fields in DeltaProcessor#fire(IJavaElementDelta,int) and resourceChanged(IResourceChangedEvent)
Comment 3 Maxime Daniel CLA 2006-03-28 04:11:53 EST
Verified for 3.2M6 using build I20060327-0010.