Community
Participate
Working Groups
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.
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.
Synchronized DeltaProcessingState#addElementChangedListener() and removeElementChangedListener() as well as the access to those fields in DeltaProcessor#fire(IJavaElementDelta,int) and resourceChanged(IResourceChangedEvent)
Verified for 3.2M6 using build I20060327-0010.