Revert "Revert "Bug 475440 - Investigate p2 related target editor performance issues ""
This reverts commit 91a82080432da3c529759df9c6e85ff6d139ae8e.
diff --git a/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/target/IUBundleContainer.java b/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/target/IUBundleContainer.java
index 795806e..cefc82c 100644
--- a/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/target/IUBundleContainer.java
+++ b/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/target/IUBundleContainer.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2009, 2015 IBM Corporation and others.
+ * Copyright (c) 2009, 2016 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@@ -290,7 +290,12 @@
// query for bundles
IFileArtifactRepository artifacts = null;
try {
- artifacts = P2TargetUtils.getBundlePool();
+ if (P2TargetUtils.fgTargetArtifactRepo.containsKey(target)) {
+ artifacts = P2TargetUtils.fgTargetArtifactRepo.get(target);
+ } else {
+ artifacts = P2TargetUtils.getBundlePool();
+ P2TargetUtils.fgTargetArtifactRepo.put(target, artifacts);
+ }
} catch (CoreException e) {
if (PDECore.DEBUG_TARGET_PROFILE) {
System.out.println("Bundle pool repository could not be loaded"); //$NON-NLS-1$
@@ -417,7 +422,20 @@
private void generateBundle(IInstallableUnit unit, IFileArtifactRepository repo, Map<BundleInfo, TargetBundle> bundles) throws CoreException {
Collection<IArtifactKey> artifacts = unit.getArtifacts();
for (Iterator<IArtifactKey> iterator2 = artifacts.iterator(); iterator2.hasNext();) {
- File file = repo.getArtifactFile(iterator2.next());
+ IArtifactKey artifactKey = iterator2.next();
+ File file = null;
+ if (P2TargetUtils.fgArtifactKeyRepoFile.containsKey(artifactKey)) {
+ if (P2TargetUtils.fgArtifactKeyRepoFile.get(artifactKey).containsKey(repo))
+ file = P2TargetUtils.fgArtifactKeyRepoFile.get(artifactKey).get(repo);
+ }
+ if( file == null){
+ file = repo.getArtifactFile(artifactKey);
+ if (file != null) {
+ HashMap<IFileArtifactRepository, File> repoFile = new HashMap<>();
+ repoFile.put(repo, file);
+ P2TargetUtils.fgArtifactKeyRepoFile.put(artifactKey, repoFile);
+ }
+ }
if (file != null) {
TargetBundle bundle = new TargetBundle(file);
bundles.put(bundle.getBundleInfo(), bundle);
diff --git a/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/target/P2TargetUtils.java b/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/target/P2TargetUtils.java
index 52acf86..e05ea64 100644
--- a/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/target/P2TargetUtils.java
+++ b/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/target/P2TargetUtils.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2010, 2015 EclipseSource Inc. and others.
+ * Copyright (c) 2010, 2016 EclipseSource Inc. and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
@@ -112,6 +112,16 @@
private static Map<ITargetDefinition, P2TargetUtils> synchronizers = new HashMap<>();
/**
+ * Table mapping of ITargetDefinition and IFileArtifactRepository
+ */
+ public static HashMap<ITargetDefinition, IFileArtifactRepository> fgTargetArtifactRepo = new HashMap<>();
+
+ /**
+ * Table mapping IArtifactKey to table map of IFileArtifactRepository and IFileArtifactRepository
+ */
+ public static HashMap<IArtifactKey, HashMap<IFileArtifactRepository, File>> fgArtifactKeyRepoFile = new HashMap<>();
+
+ /**
* The profile to be synchronized
*/
private IProfile fProfile;
diff --git a/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/target/TargetDefinition.java b/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/target/TargetDefinition.java
index 87ba9c9..22454dd 100644
--- a/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/target/TargetDefinition.java
+++ b/ui/org.eclipse.pde.core/src/org/eclipse/pde/internal/core/target/TargetDefinition.java
@@ -241,6 +241,9 @@
MultiStatus status = new MultiStatus(PDECore.PLUGIN_ID, 0, Messages.TargetDefinition_2, null);
Set<P2TargetUtils> seen = new HashSet<>();
if (containers != null) {
+ // clear all previous maps
+ P2TargetUtils.fgTargetArtifactRepo.clear();
+ P2TargetUtils.fgArtifactKeyRepoFile.clear();
// Process synchronizers first, then perform resolves against the individual
// containers. A synchronizer may be shared among several containers, do we
// keep track of the synchronizers processed.