From 70c9a690d9224e6142bf2b4c06e50c5a48247954 Mon Sep 17 00:00:00 2001
From: Florian Hoelzl <hoelzl@fortiss.org>
Date: Thu, 19 Jan 2012 18:09:25 +0000
Subject: [PATCH] implemented recursive search for models refs 438

---
 .../EclipseResourceStorageProvider.java       | 32 ++++++++++++-------
 1 file changed, 20 insertions(+), 12 deletions(-)

diff --git a/org.fortiss.tooling.kernel/trunk/src/org/fortiss/tooling/kernel/internal/storage/eclipse/EclipseResourceStorageProvider.java b/org.fortiss.tooling.kernel/trunk/src/org/fortiss/tooling/kernel/internal/storage/eclipse/EclipseResourceStorageProvider.java
index 70d3dcfbe..1ee3e5938 100644
--- a/org.fortiss.tooling.kernel/trunk/src/org/fortiss/tooling/kernel/internal/storage/eclipse/EclipseResourceStorageProvider.java
+++ b/org.fortiss.tooling.kernel/trunk/src/org/fortiss/tooling/kernel/internal/storage/eclipse/EclipseResourceStorageProvider.java
@@ -32,7 +32,9 @@ import java.util.IdentityHashMap;
 import java.util.List;
 import java.util.Map;
 
+import org.eclipse.core.resources.IContainer;
 import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IFolder;
 import org.eclipse.core.resources.IProject;
 import org.eclipse.core.resources.IResource;
 import org.eclipse.core.resources.IResourceChangeEvent;
@@ -62,7 +64,7 @@ import org.osgi.framework.Bundle;
  * @author hoelzlf
  * @author $Author$
  * @version $Rev$
- * @ConQAT.Rating YELLOW Hash: 97A421BF172008E2FC3E5255ED918D14
+ * @ConQAT.Rating YELLOW Hash: AA6D000D4AB166B6B2703F2B2E9EE23F
  */
 public class EclipseResourceStorageProvider implements
 		IEclipseResourceStorageService, IResourceChangeListener,
@@ -100,19 +102,26 @@ public class EclipseResourceStorageProvider implements
 			if (!project.isOpen()) {
 				continue;
 			}
-			try {
-				for (IResource res : project.members()) {
-					if (res instanceof IFile) {
-						IFile file = (IFile) res;
-						if (checkLocationProvider(file)) {
-							loadContext(file);
-						}
+			searchResourceForModels(project);
+		}
+	}
+
+	/** Searches the given container for models. */
+	private void searchResourceForModels(IContainer container) {
+		try {
+			for (IResource res : container.members()) {
+				if (res instanceof IFile) {
+					IFile file = (IFile) res;
+					if (checkLocationProvider(file)) {
+						loadContext(file);
 					}
+				} else if (res instanceof IFolder) {
+					searchResourceForModels((IFolder) res);
 				}
-			} catch (CoreException e) {
-				error(ToolingKernelActivator.getDefault(),
-						"Core Exception while scanning Eclipse workspace", e);
 			}
+		} catch (CoreException e) {
+			error(ToolingKernelActivator.getDefault(),
+					"Core Exception while scanning Eclipse workspace", e);
 		}
 	}
 
@@ -151,7 +160,6 @@ public class EclipseResourceStorageProvider implements
 	@Override
 	public boolean visit(IResourceDelta delta) {
 		if (delta.getResource() instanceof IFile
-				&& delta.getResource().getParent() instanceof IProject
 				&& checkLocationProvider((IFile) delta.getResource())) {
 			runWorkspaceChangeJob((IFile) delta.getResource(), delta.getKind());
 		}
-- 
GitLab