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;