From b5e530f971498e190e377bcb38f2dec23b13a365 Mon Sep 17 00:00:00 2001 From: Andrey Loskutov Date: Wed, 20 Feb 2019 17:57:35 +0100 Subject: [PATCH] Bug 544578 - don't iterate over all projects if JRE was already found While searching for the matching JRE we don't need to loop over all projects if we had a match. With N projects in the workspace and ~50 modules we have in the JRE, we can save ~ N x 25 x 25 compares. Change-Id: I611e5e499ae07f380dfea7a4b092c809bdf9f87e Signed-off-by: Andrey Loskutov --- diff --git a/org.eclipse.jdt.launching/launching/org/eclipse/jdt/internal/launching/JavaSourceLookupUtil.java b/org.eclipse.jdt.launching/launching/org/eclipse/jdt/internal/launching/JavaSourceLookupUtil.java index cbbbe50..dbb4bdd 100644 --- a/org.eclipse.jdt.launching/launching/org/eclipse/jdt/internal/launching/JavaSourceLookupUtil.java +++ b/org.eclipse.jdt.launching/launching/org/eclipse/jdt/internal/launching/JavaSourceLookupUtil.java @@ -230,21 +230,30 @@ IJavaProject jp = jps[i]; IProject p = jp.getProject(); if (p.isOpen()) { - IPackageFragmentRoot[] allRoots = jp.getPackageFragmentRoots(); - for (int j = 0; j < allRoots.length; j++) { - IPackageFragmentRoot root = allRoots[j]; - if (root.getPath().equals(entryPath) && isSourceAttachmentEqual(root, entry)) { - PackageFragmentRootSourceContainer container = new PackageFragmentRootSourceContainer(root); - if (!containers.contains(container)) { - containers.add(container); - found = true; + try { + IPackageFragmentRoot[] allRoots = jp.getPackageFragmentRoots(); + for (int j = 0; j < allRoots.length; j++) { + IPackageFragmentRoot root = allRoots[j]; + if (root.getPath().equals(entryPath) && isSourceAttachmentEqual(root, entry)) { + PackageFragmentRootSourceContainer container = new PackageFragmentRootSourceContainer(root); + if (!containers.contains(container)) { + containers.add(container); + found = true; + } } } + } catch (JavaModelException e) { + LaunchingPlugin.log(e); + found = false; + } + if (found) { + // JRE module containers can't be spread over *multiple* projects, + // we have either all or nothing, no need to search other projects. + break; } } } - } - catch (JavaModelException e) { + } catch (JavaModelException e) { LaunchingPlugin.log(e); }