Bug 559906 - improved ResourceWorkingSetFilter performance

Don't iterate over all java projects in workspace when checking working
set containment.
Instead only try to create a JavaElement for the resource's project.

Change-Id: I4034fa13d975142273e28f30fd4d242f5fa68a76
Signed-off-by: Julian Honnen <julian.honnen@vector.com>
diff --git a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/JavaElementContainmentAdapter.java b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/JavaElementContainmentAdapter.java
index 886fdeb..7d399d7 100644
--- a/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/JavaElementContainmentAdapter.java
+++ b/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/JavaElementContainmentAdapter.java
@@ -1,5 +1,5 @@
 /*******************************************************************************
- * Copyright (c) 2000, 2008 IBM Corporation and others.
+ * Copyright (c) 2000, 2020 IBM Corporation and others.
  *
  * This program and the accompanying materials
  * are made available under the terms of the Eclipse Public License 2.0
@@ -16,18 +16,15 @@
 import org.eclipse.core.runtime.IAdaptable;
 
 import org.eclipse.core.resources.IResource;
-import org.eclipse.core.resources.ResourcesPlugin;
 
 import org.eclipse.ui.IContainmentAdapter;
 
 import org.eclipse.jdt.core.IJavaElement;
-import org.eclipse.jdt.core.IJavaModel;
+import org.eclipse.jdt.core.IJavaProject;
 import org.eclipse.jdt.core.JavaCore;
 
 public class JavaElementContainmentAdapter implements IContainmentAdapter {
 
-	private IJavaModel fJavaModel= JavaCore.create(ResourcesPlugin.getWorkspace().getRoot());
-
 	@Override
 	public boolean contains(Object workingSetElement, Object element, int flags) {
 		if (!(workingSetElement instanceof IJavaElement) || element == null)
@@ -43,11 +40,7 @@
 			if (element instanceof IAdaptable) {
 				resource= ((IAdaptable)element).getAdapter(IResource.class);
 				if (resource != null) {
-					if (fJavaModel.contains(resource)) {
-						jElement= JavaCore.create(resource);
-						if (jElement != null && !jElement.exists())
-							jElement= null;
-					}
+					jElement= findJavaElement(resource);
 				}
 			}
 		}
@@ -64,6 +57,18 @@
 		return false;
 	}
 
+	private static IJavaElement findJavaElement(IResource resource) {
+		IJavaProject project= JavaCore.create(resource.getProject());
+		if (project == null) {
+			return null;
+		}
+		IJavaElement javaElement= JavaCore.create(resource, project);
+		if (javaElement != null && javaElement.exists()) {
+			return javaElement;
+		}
+		return null;
+	}
+
 	private boolean contains(IJavaElement workingSetElement, IJavaElement element, int flags) {
 		if (checkContext(flags) && workingSetElement.equals(element)) {
 			return true;