Fix for pmc approved: https://bugs.eclipse.org/bugs/show_bug.cgi?id=312358
diff --git a/jsf/tests/org.eclipse.jst.jsf.designtime.tests/src/org/eclipse/jst/jsf/designtime/tests/TestJSPModelProcessor.java b/jsf/tests/org.eclipse.jst.jsf.designtime.tests/src/org/eclipse/jst/jsf/designtime/tests/TestJSPModelProcessor.java
index 7892ab0..a92493e 100644
--- a/jsf/tests/org.eclipse.jst.jsf.designtime.tests/src/org/eclipse/jst/jsf/designtime/tests/TestJSPModelProcessor.java
+++ b/jsf/tests/org.eclipse.jst.jsf.designtime.tests/src/org/eclipse/jst/jsf/designtime/tests/TestJSPModelProcessor.java
@@ -21,6 +21,7 @@
 import junit.framework.TestCase;
 
 import org.eclipse.core.resources.IFile;
+import org.eclipse.core.runtime.CoreException;
 import org.eclipse.jst.jsf.context.symbol.ISymbol;
 import org.eclipse.jst.jsf.context.symbol.source.ISymbolConstants;
 import org.eclipse.jst.jsf.core.IJSFCoreConstants;
@@ -295,6 +296,22 @@
         }
     }
 
+    public void testFileDoesnotExist()
+    {
+        IFile file = _testJSP1.getProject().getFile("/doesNotExist.jsp");
+        assertFalse(file.isAccessible());
+        boolean caughtException = false;
+        try
+        {
+            JSPModelProcessor.get(file);
+        }
+        catch (CoreException e)
+        {
+            caughtException = true;
+        }
+        assertTrue(caughtException);
+    }
+
     public void testExplicitRefresh() throws Exception
     {
         // random order of access to the jsps, but always the same between runs
diff --git a/jsf/tests/org.eclipse.jst.jsf.designtime.tests/src/org/eclipse/jst/jsf/designtime/tests/resources/ChangeTester.java b/jsf/tests/org.eclipse.jst.jsf.designtime.tests/src/org/eclipse/jst/jsf/designtime/tests/resources/ChangeTester.java
index aa92791..e047c3b 100644
--- a/jsf/tests/org.eclipse.jst.jsf.designtime.tests/src/org/eclipse/jst/jsf/designtime/tests/resources/ChangeTester.java
+++ b/jsf/tests/org.eclipse.jst.jsf.designtime.tests/src/org/eclipse/jst/jsf/designtime/tests/resources/ChangeTester.java
@@ -42,6 +42,7 @@
         final IResourceChangeEvent event = _eventFactory
                 .createSimpleFileChange((MockFile) file, true);
         _context.fireWorkspaceEvent(event);
+        removeListener();
     }
 
     public void fireResourceFileAdd(final String resourceId)
@@ -51,6 +52,7 @@
         final IResourceChangeEvent event = _eventFactory
                 .createSimpleFileAdded((MockFile) file);
         _context.fireWorkspaceEvent(event);
+        removeListener();
     }
 
     private IFile getFile(final String resourceId)
@@ -81,7 +83,7 @@
         final IResourceChangeEvent event = _eventFactory
                 .createSimpleFileRemove((MockFile) file);
         _context.fireWorkspaceEvent(event);
-
+        removeListener();
     }
 
     public void fireResourceFolderAdd(final String folderName)
@@ -91,6 +93,7 @@
         final IResourceChangeEvent event = _eventFactory
                 .createSimpleFolderAdded(folder);
         _context.fireWorkspaceEvent(event);
+        removeListener();
     }
 
     public void fireResourceFolderDelete(final String folderName)
@@ -100,8 +103,21 @@
         final IResourceChangeEvent event = _eventFactory
                 .createSimpleFolderDeleted(folder);
         _context.fireWorkspaceEvent(event);
+        removeListener();
     }
 
+    public void fireResourceFileDeleteRecusive(final String folderName)
+    {
+        installListener();
+        final IFolder folder = getFolder(folderName);
+        final IResourceChangeEvent event = _eventFactory
+                .createRecursiveFolderDeleted(folder);
+        _context.fireWorkspaceEvent(event);
+        removeListener();
+    }
+
+    protected abstract void removeListener();
+
     public void fireResourceFolderRename(final String folderName,
             final String newFolderName)
     {
@@ -111,6 +127,7 @@
         final IResourceChangeEvent event = _eventFactory
                 .createSimpleFolderRename(folder, newFolder);
         _context.fireWorkspaceEvent(event);
+        removeListener();
     }
 
     public void fireResourceFileRename(String fileName, String newFileName)
@@ -121,7 +138,9 @@
         final IResourceChangeEvent event = _eventFactory
                 .createSimpleFileRename(folder, newFolder);
         _context.fireWorkspaceEvent(event);
+        removeListener();
     }
+
     public EVENTTYPE getEvent(final int eventNum)
     {
         return _events.get(eventNum);
@@ -157,6 +176,4 @@
     {
         assertEquals(numEvents, _events.size());
     }
-
-
 }
\ No newline at end of file
diff --git a/jsf/tests/org.eclipse.jst.jsf.designtime.tests/src/org/eclipse/jst/jsf/designtime/tests/resources/TestWorkspaceBasedResourceLocator.java b/jsf/tests/org.eclipse.jst.jsf.designtime.tests/src/org/eclipse/jst/jsf/designtime/tests/resources/TestWorkspaceBasedResourceLocator.java
index a25810a..192a600 100644
--- a/jsf/tests/org.eclipse.jst.jsf.designtime.tests/src/org/eclipse/jst/jsf/designtime/tests/resources/TestWorkspaceBasedResourceLocator.java
+++ b/jsf/tests/org.eclipse.jst.jsf.designtime.tests/src/org/eclipse/jst/jsf/designtime/tests/resources/TestWorkspaceBasedResourceLocator.java
@@ -20,21 +20,25 @@
 import org.eclipse.jst.jsf.common.internal.resource.ContentTypeResolver;
 import org.eclipse.jst.jsf.designtime.internal.resources.IJSFResourceFragment;
 import org.eclipse.jst.jsf.designtime.internal.resources.IJSFResourceFragment.Type;
+import org.eclipse.jst.jsf.designtime.internal.resources.IWorkspaceJSFResourceFragment;
 import org.eclipse.jst.jsf.designtime.internal.resources.JSFResource;
 import org.eclipse.jst.jsf.designtime.internal.resources.JSFResourceChangeListener;
 import org.eclipse.jst.jsf.designtime.internal.resources.JSFResourceChangeListener.JSFResourceChangedEvent;
 import org.eclipse.jst.jsf.designtime.internal.resources.JSFResourceChangeListener.JSFResourceChangedEvent.CHANGE_TYPE;
 import org.eclipse.jst.jsf.designtime.internal.resources.JSFResourceContainer;
+import org.eclipse.jst.jsf.designtime.internal.resources.ResourceFragmentIdentifier;
 import org.eclipse.jst.jsf.designtime.internal.resources.ResourceIdentifier;
 import org.eclipse.jst.jsf.designtime.internal.resources.ResourceIdentifierFactory;
 import org.eclipse.jst.jsf.designtime.internal.resources.ResourceIdentifierFactory.InvalidIdentifierException;
 import org.eclipse.jst.jsf.designtime.internal.resources.WorkspaceJSFResource;
 import org.eclipse.jst.jsf.designtime.internal.resources.WorkspaceJSFResourceContainer;
 import org.eclipse.jst.jsf.designtime.internal.resources.WorkspaceJSFResourceLocator;
+import org.eclipse.jst.jsf.test.util.junit4.BugRegressionTest;
 import org.eclipse.jst.jsf.test.util.junit4.NoPluginEnvironment;
 import org.eclipse.jst.jsf.test.util.mock.MockContainer;
 import org.eclipse.jst.jsf.test.util.mock.MockContentTypeManager;
 import org.eclipse.jst.jsf.test.util.mock.MockProject;
+import org.eclipse.jst.jsf.test.util.mock.MockResource;
 import org.eclipse.jst.jsf.test.util.mock.MockResourceChangeEventFactory;
 import org.eclipse.jst.jsf.test.util.mock.MockVirtualComponentQuery;
 import org.eclipse.jst.jsf.test.util.mock.MockWorkspaceContext;
@@ -50,7 +54,6 @@
     private MockProject _project;
     private MockContainer _webContentFolder;
     private IFolder _resourceRoot;
-
     private MockResourceChangeEventFactory _eventFactory;
     private ResourceIdentifierFactory _resourceIdFactory;
     private ChangeTester<JSFResourceChangedEvent, CHANGE_TYPE> _changeTester;
@@ -82,18 +85,21 @@
         _changeTester = new ChangeTester<JSFResourceChangedEvent, CHANGE_TYPE>(
                 _context, _eventFactory, _resourceRoot)
         {
+            private JSFResourceChangeListener _listener;
+
             @Override
             protected void installListener()
             {
                 _events.clear();
-                _locator.addListener(new JSFResourceChangeListener()
+                _listener = new JSFResourceChangeListener()
                 {
                     @Override
                     public void changed(final JSFResourceChangedEvent event)
                     {
                         _events.add(event);
                     }
-                });
+                };
+                _locator.addListener(_listener);
             }
 
             @Override
@@ -102,6 +108,12 @@
             {
                 return event.getChangeType() == type;
             }
+
+            @Override
+            protected void removeListener()
+            {
+                _locator.removeListener(_listener);
+            }
         };
     }
 
@@ -198,7 +210,7 @@
         _locator.start(_project);
         assertEquals(3, _locator.locate(_project).size());
         _changeTester.fireResourceFolderRename("mylib333", "mylib1111");
-        _changeTester.assertNumEvents(2);
+        _changeTester.assertNumEvents(3);
         {
             final JSFResourceChangedEvent event = _changeTester
                     .getSingleEvent(CHANGE_TYPE.ADDED);
@@ -215,23 +227,36 @@
             assertEquals("mylib1111", resource.getName());
             assertEquals(Type.CONTAINER, newValue.getType());
         }
-
         {
-            final JSFResourceChangedEvent event = _changeTester
-                    .getSingleEvent(CHANGE_TYPE.REMOVED);
-            assertEquals(CHANGE_TYPE.REMOVED, event.getChangeType());
-            assertNotNull(event.getOldValue());
-            assertNull(event.getNewValue());
-            assertEquals(Type.CONTAINER, event.getOldValue().getType());
-            final JSFResourceContainer oldValue = (JSFResourceContainer) event
-                    .getOldValue();
-            assertTrue(oldValue instanceof WorkspaceJSFResourceContainer);
-            final IResource resource = ((WorkspaceJSFResourceContainer) oldValue)
-                    .getResource();
-            assertEquals(IResource.FOLDER, resource.getType());
-            assertEquals("mylib333", resource.getName());
-            assertEquals(Type.CONTAINER, oldValue.getType());
-
+            final List<JSFResourceChangedEvent> events = _changeTester
+                    .getEvent(CHANGE_TYPE.REMOVED);
+            assertEquals(2, events.size());
+            JSFResourceChangedEvent event = events.get(0);
+            {
+                assertNotNull(event.getOldValue());
+                assertNull(event.getNewValue());
+                assertEquals(Type.CONTAINER, event.getOldValue().getType());
+                final JSFResourceContainer oldValue = (JSFResourceContainer) event
+                        .getOldValue();
+                assertTrue(oldValue instanceof WorkspaceJSFResourceContainer);
+                final IResource resource = ((WorkspaceJSFResourceContainer) oldValue)
+                        .getResource();
+                assertEquals(IResource.FOLDER, resource.getType());
+                assertEquals("mylib333", resource.getName());
+                assertEquals(Type.CONTAINER, oldValue.getType());
+            }
+            event = events.get(1);
+            {
+                assertNotNull(event.getOldValue());
+                assertNull(event.getNewValue());
+                assertEquals(Type.RESOURCE, event.getOldValue().getType());
+                final IWorkspaceJSFResourceFragment oldValue = (IWorkspaceJSFResourceFragment) event
+                        .getOldValue();
+                final IResource resource = ((IWorkspaceJSFResourceFragment) oldValue)
+                        .getResource();
+                assertEquals(IResource.FILE, resource.getType());
+                assertEquals("tag1.xhtml", resource.getName());
+            }
         }
         assertEquals(3, _locator.locate(_project).size());
     }
@@ -241,7 +266,8 @@
     {
         _locator.start(_project);
         assertEquals(3, _locator.locate(_project).size());
-        _changeTester.fireResourceFileRename("mylib333/tag1.xhtml", "mylib333/tag2.xhtml");
+        _changeTester.fireResourceFileRename("mylib333/tag1.xhtml",
+                "mylib333/tag2.xhtml");
         _changeTester.assertNumEvents(2);
         {
             final JSFResourceChangedEvent event = _changeTester
@@ -250,8 +276,7 @@
             assertNull(event.getOldValue());
             assertNotNull(event.getNewValue());
             assertEquals(Type.RESOURCE, event.getNewValue().getType());
-            final JSFResource newValue = (JSFResource) event
-                    .getNewValue();
+            final JSFResource newValue = (JSFResource) event.getNewValue();
             assertTrue(newValue instanceof WorkspaceJSFResource);
             final IResource resource = ((WorkspaceJSFResource) newValue)
                     .getResource();
@@ -260,7 +285,6 @@
             assertEquals("mylib333/tag2.xhtml", newValue.getId().toString());
             assertEquals(Type.RESOURCE, newValue.getType());
         }
-
         {
             final JSFResourceChangedEvent event = _changeTester
                     .getSingleEvent(CHANGE_TYPE.REMOVED);
@@ -268,8 +292,7 @@
             assertNotNull(event.getOldValue());
             assertNull(event.getNewValue());
             assertEquals(Type.RESOURCE, event.getOldValue().getType());
-            final JSFResource oldValue = (JSFResource) event
-                    .getOldValue();
+            final JSFResource oldValue = (JSFResource) event.getOldValue();
             assertTrue(oldValue instanceof WorkspaceJSFResource);
             final IResource resource = ((WorkspaceJSFResource) oldValue)
                     .getResource();
@@ -280,7 +303,97 @@
         assertEquals(3, _locator.locate(_project).size());
     }
 
-    
+    @Test
+    @BugRegressionTest(bugNumber = 312358)
+    public void testResourceRootDoesntExist()
+    {
+        ((MockResource) _resourceRoot).setExists(false);
+        _locator.start(_project);
+        // the workspace listener should get added event though the resource
+        // root doesn't yet exist.
+        assertEquals(1, _context.getWorkspace().getListeners().size());
+        // simulate adding the folder
+        ((MockResource) _resourceRoot).setExists(true);
+        _changeTester.fireResourceFolderAdd("");
+        _changeTester.assertNumEvents(1);
+        // simulate adding a sub-folder
+        _changeTester.fireResourceFolderAdd("ezcomp");
+        _changeTester.assertNumEvents(1);
+        List<JSFResourceChangedEvent> events = _changeTester
+                .getEvent(CHANGE_TYPE.ADDED);
+        assertEquals(1, events.size());
+        JSFResourceChangedEvent event = events.get(0);
+        ResourceFragmentIdentifier id = event.getNewValue().getId();
+        assertTrue(event.getNewValue().getType() == Type.CONTAINER);
+        assertEquals("ezcomp", id.getLibraryName());
+    }
+
+    @Test
+    @BugRegressionTest(bugNumber = 312358)
+    public void testRemoveResourceRootAndAdd()
+    {
+        _locator.start(_project);
+        assertEquals(1, _context.getWorkspace().getListeners().size());
+        // delete the folder
+        _changeTester.fireResourceFolderDelete("");
+        // should get an event for root, lib333 and lib333/tag1.xhtml
+        _changeTester.assertNumEvents(3);
+        // should still be listening event after root is removed in case
+        // it gets added back
+        assertEquals(1, _context.getWorkspace().getListeners().size());
+        // now add back the folder
+        _changeTester.fireResourceFolderAdd("");
+        _changeTester.assertNumEvents(1);
+        {
+            final JSFResourceChangedEvent event = _changeTester
+                    .getSingleEvent(CHANGE_TYPE.ADDED);
+            assertEquals("", event.getNewValue().getId().toString());
+        }
+        // now add a child to the resource root and assert we discover it.
+        _changeTester.fireResourceFolderAdd("ezcomp");
+        _changeTester.assertNumEvents(1);
+        {
+            final JSFResourceChangedEvent event = _changeTester
+                    .getSingleEvent(CHANGE_TYPE.ADDED);
+            assertEquals("ezcomp", event.getNewValue().getId().toString());
+        }
+    }
+
+    @Test
+    @BugRegressionTest(bugNumber = 312358)
+    public void testAddNoneResourceFolderToWebContent()
+    {
+        _locator.start(_project);
+        assertEquals(1, _context.getWorkspace().getListeners().size());
+        // delete the folder
+        _changeTester.fireResourceFolderAdd("../foobar");
+        _changeTester.assertNumEvents(0);
+    }
+
+    @Test
+    @BugRegressionTest(bugNumber = 312358)
+    public void testRemoveRecursiveFolder()
+    {
+        _locator.start(_project);
+        assertEquals(1, _context.getWorkspace().getListeners().size());
+        // delete the folder
+        _changeTester.fireResourceFileDeleteRecusive("");
+        final int expectedEvents = 3;
+        _changeTester.assertNumEvents(expectedEvents);
+        List<JSFResourceChangedEvent> events = _changeTester
+                .getEvent(CHANGE_TYPE.REMOVED);
+        assertEquals(expectedEvents, events.size());
+        Set<String> ids = new HashSet<String>();
+        for (final JSFResourceChangedEvent event : events)
+        {
+            ids.add(event.getOldValue().getId().toString());
+        }
+        assertTrue(ids.contains(""));
+        assertTrue(ids.contains("mylib333"));
+        assertTrue(ids.contains("mylib333/tag1.xhtml"));
+        assertEquals(expectedEvents, ids.size());
+    }
+
     private IJSFResourceFragment findById(
             final WorkspaceJSFResourceLocator locator, final String id)
             throws InvalidIdentifierException
diff --git a/jsf/tests/org.eclipse.jst.jsf.test.util/src/org/eclipse/jst/jsf/test/util/junit4/BugRegressionTest.java b/jsf/tests/org.eclipse.jst.jsf.test.util/src/org/eclipse/jst/jsf/test/util/junit4/BugRegressionTest.java
new file mode 100644
index 0000000..1e377fd
--- /dev/null
+++ b/jsf/tests/org.eclipse.jst.jsf.test.util/src/org/eclipse/jst/jsf/test/util/junit4/BugRegressionTest.java
@@ -0,0 +1,8 @@
+package org.eclipse.jst.jsf.test.util.junit4;
+
+public @interface BugRegressionTest
+{
+    String bugSystem() default "Eclipse";
+
+    long bugNumber();
+}
diff --git a/jsf/tests/org.eclipse.jst.jsf.test.util/src/org/eclipse/jst/jsf/test/util/mock/MockResourceChangeEventFactory.java b/jsf/tests/org.eclipse.jst.jsf.test.util/src/org/eclipse/jst/jsf/test/util/mock/MockResourceChangeEventFactory.java
index f754fb2..938b3f8 100644
--- a/jsf/tests/org.eclipse.jst.jsf.test.util/src/org/eclipse/jst/jsf/test/util/mock/MockResourceChangeEventFactory.java
+++ b/jsf/tests/org.eclipse.jst.jsf.test.util/src/org/eclipse/jst/jsf/test/util/mock/MockResourceChangeEventFactory.java
@@ -73,6 +73,13 @@
         return newPostChangeEvent(delta);
     }
 
+    public IResourceChangeEvent createRecursiveFolderDeleted(final IFolder folder)
+    {
+        final MockResourceDelta delta = _deltaFactory
+                .createRecursiveFolderRemoved(folder);
+        return newPostChangeEvent(delta);
+    }
+
     public IResourceChangeEvent createSimpleFolderRename(final IFolder folder,
             final IFolder newFolderName)
     {
diff --git a/jsf/tests/org.eclipse.jst.jsf.test.util/src/org/eclipse/jst/jsf/test/util/mock/MockResourceDeltaFactory.java b/jsf/tests/org.eclipse.jst.jsf.test.util/src/org/eclipse/jst/jsf/test/util/mock/MockResourceDeltaFactory.java
index 2da2785..0b70027 100644
--- a/jsf/tests/org.eclipse.jst.jsf.test.util/src/org/eclipse/jst/jsf/test/util/mock/MockResourceDeltaFactory.java
+++ b/jsf/tests/org.eclipse.jst.jsf.test.util/src/org/eclipse/jst/jsf/test/util/mock/MockResourceDeltaFactory.java
@@ -19,11 +19,10 @@
 
 public class MockResourceDeltaFactory
 {
-//    private final MockWorkspaceContext _wsContext;
-
+    // private final MockWorkspaceContext _wsContext;
     public MockResourceDeltaFactory(final MockWorkspaceContext wsContext)
     {
-//        _wsContext = wsContext;
+        // _wsContext = wsContext;
     }
 
     private void checkResourceValid(final IResource res)
@@ -62,31 +61,31 @@
             final int kind)
     {
         checkResourceValid(folder);
-        MockResourceDelta root = newAddDelta(folder, kind);
-
-//        MockResourceDelta folderAdd = (MockResourceDelta) root
-//                .findMember(folder.getFullPath());
-//
-//        if (folderAdd == null)
-//        {
-//            throw new IllegalStateException();
-//        }
-//
-//        // TODO: add recursive folders
-//        try
-//        {
-//            for (final IResource child : folder.members())
-//            {
-//                if (child.getType() == IResource.FILE)
-//                {
-//                    MockResourceDelta newAddDelta = new MockResourceDelta(child, null, kind, Collections.EMPTY_LIST);
-//                    folderAdd.getChildDeltas().add(newAddDelta);
-//                }
-//            }
-//        } catch (CoreException e)
-//        {
-//            throw new RuntimeException(e);
-//        }
+        final MockResourceDelta root = newAddDelta(folder, kind);
+        // MockResourceDelta folderAdd = (MockResourceDelta) root
+        // .findMember(folder.getFullPath());
+        //
+        // if (folderAdd == null)
+        // {
+        // throw new IllegalStateException();
+        // }
+        //
+        // // TODO: add recursive folders
+        // try
+        // {
+        // for (final IResource child : folder.members())
+        // {
+        // if (child.getType() == IResource.FILE)
+        // {
+        // MockResourceDelta newAddDelta = new MockResourceDelta(child, null,
+        // kind, Collections.EMPTY_LIST);
+        // folderAdd.getChildDeltas().add(newAddDelta);
+        // }
+        // }
+        // } catch (CoreException e)
+        // {
+        // throw new RuntimeException(e);
+        // }
         return root;
     }
 
@@ -114,6 +113,12 @@
         return newRemoveDelta(folder, kind);
     }
 
+    public MockResourceDelta createRecursiveFolderRemoved(final IFolder folder)
+    {
+        checkResourceValid(folder);
+        return newRemoveDeltaRecursive(folder, IResourceDelta.REMOVED);
+    }
+
     @SuppressWarnings("unchecked")
     protected MockResourceDelta newChangeDelta(final IResource resource,
             final int kind)
@@ -141,6 +146,33 @@
         return createWorkspaceRootedDeltaTo(resource, delta);
     }
 
+    private MockResourceDelta newRemoveDeltaRecursive(final IFolder folder,
+            final int kind)
+    {
+        final MockResourceDelta delta = recursiveContainerRemoved(folder, kind);
+        return createWorkspaceRootedDeltaTo(folder, delta);
+    }
+
+    private MockResourceDelta recursiveContainerRemoved(
+            final IResource rootRes, final int kind)
+    {
+        List<MockResourceDelta> childDeltas = new ArrayList<MockResourceDelta>();
+        try
+        {
+            if (rootRes instanceof IContainer)
+            {
+                for (final IResource res : ((IContainer) rootRes).members())
+                {
+                    childDeltas.add(recursiveContainerRemoved(res, kind));
+                }
+            }
+            return new MockResourceDelta(null, rootRes, kind, childDeltas);
+        } catch (CoreException e)
+        {
+            throw new RuntimeException(e);
+        }
+    }
+
     /**
      * @return a delta that doesn't represent a change itself but has
      *         descendants that do.
@@ -158,8 +190,8 @@
         IContainer parent = res.getParent();
         while (parent != null)
         {
-            curDelta = createPathToChangeDelta(parent, Collections
-                    .singletonList(curDelta));
+            curDelta = createPathToChangeDelta(parent,
+                    Collections.singletonList(curDelta));
             parent = parent.getParent();
         }
         return curDelta;
@@ -190,7 +222,8 @@
         return createFolderMove(folder, newFolder);
     }
 
-    public MockResourceDelta createFolderMove(IFolder folder, IFolder newFolder)
+    public MockResourceDelta createFolderMove(final IFolder folder,
+            final IFolder newFolder)
     {
         final MockResourceDelta fileAddEvent = createSimpleFolderAdded(
                 newFolder, IResourceDelta.ADDED | IResourceDelta.MOVED_FROM);
@@ -265,7 +298,7 @@
             for (final Map.Entry<IResource, MockResourceDelta> entry : _merged
                     .entrySet())
             {
-                IResource key = entry.getKey();
+                final IResource key = entry.getKey();
                 if (key == null)
                 {
                     throw new NullPointerException();
@@ -285,7 +318,6 @@
                             break;
                         }
                     }
-
                     if (mergeChild != null)
                     {
                         newDelta.getChildDeltas().remove(mergeChild);
diff --git a/jsf/tests/org.eclipse.jst.jsf.validation.el.tests/src/org/eclipse/jst/jsf/validation/el/tests/base/ELAssert.java b/jsf/tests/org.eclipse.jst.jsf.validation.el.tests/src/org/eclipse/jst/jsf/validation/el/tests/base/ELAssert.java
index 112f634..f758472 100644
--- a/jsf/tests/org.eclipse.jst.jsf.validation.el.tests/src/org/eclipse/jst/jsf/validation/el/tests/base/ELAssert.java
+++ b/jsf/tests/org.eclipse.jst.jsf.validation.el.tests/src/org/eclipse/jst/jsf/validation/el/tests/base/ELAssert.java
@@ -42,6 +42,10 @@
     {
         final IStructuredDocumentContext context = 
             IStructuredDocumentContextFactory.INSTANCE.getContext(document, docPos);
+        if (context == null)
+        {
+        	fail("context is null");
+        }
         final ITextRegionContextResolver resolver =
             IStructuredDocumentContextResolverFactory.INSTANCE.getTextRegionResolver(context);
         return resolver.getRegionText();