Bug 427061 - OOME in Plug-in Image Browser
Change-Id: I444ca7dd69863b6a213e6a9dc9e7a9031eaa3e13
Signed-off-by: Vikas Chandra <Vikas.Chandra@in.ibm.com>
diff --git a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/views/imagebrowser/ImageBrowserView.java b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/views/imagebrowser/ImageBrowserView.java
index 74e0af5..cb06c71 100644
--- a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/views/imagebrowser/ImageBrowserView.java
+++ b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/views/imagebrowser/ImageBrowserView.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2012, 2013 Christian Pontesegger and others.
+ * Copyright (c) 2012, 2014 Christian Pontesegger 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
@@ -58,6 +58,8 @@
private List<Image> displayedImages = new ArrayList<Image>();
+ private AbstractRepository repository;
+
public ImageBrowserView() {
// create default filters
final IFilter iconSize = new SizeFilter(16, SizeFilter.TYPE_EXACT, 16, SizeFilter.TYPE_EXACT);
@@ -240,6 +242,9 @@
}
private void scanImages() {
+ if (repository != null) {
+ repository.cancel();
+ }
nextButton.setEnabled(false);
// reset UI components
@@ -263,7 +268,7 @@
// set maximum image counter
mImageCounter = spinMaxImages.getSelection();
- final AbstractRepository repository = (AbstractRepository) ((IStructuredSelection) sourceCombo.getSelection()).getFirstElement();
+ repository = (AbstractRepository) ((IStructuredSelection) sourceCombo.getSelection()).getFirstElement();
repository.schedule();
}
}
diff --git a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/views/imagebrowser/repositories/AbstractRepository.java b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/views/imagebrowser/repositories/AbstractRepository.java
index 9d9e62c..5773a6b 100644
--- a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/views/imagebrowser/repositories/AbstractRepository.java
+++ b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/views/imagebrowser/repositories/AbstractRepository.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2012, 2013 Christian Pontesegger and others.
+ * Copyright (c) 2012, 2014 Christian Pontesegger 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
@@ -27,7 +27,7 @@
public abstract class AbstractRepository extends Job {
- private List<ImageElement> mElementsCache = new LinkedList<ImageElement>();
+ protected List<ImageElement> mElementsCache = new LinkedList<ImageElement>();
private IImageTarget mTarget;
diff --git a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/views/imagebrowser/repositories/TargetPlatformRepository.java b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/views/imagebrowser/repositories/TargetPlatformRepository.java
index bfaacb8..7e9c054 100644
--- a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/views/imagebrowser/repositories/TargetPlatformRepository.java
+++ b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/views/imagebrowser/repositories/TargetPlatformRepository.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2012, 2013 Christian Pontesegger and others.
+ * Copyright (c) 2012, 2014 Christian Pontesegger 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
@@ -14,8 +14,7 @@
import java.io.File;
import java.net.URI;
import java.util.*;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.*;
import org.eclipse.osgi.util.NLS;
import org.eclipse.pde.core.target.*;
import org.eclipse.pde.internal.ui.PDEPlugin;
@@ -100,6 +99,19 @@
}
}
+ @Override
+ protected synchronized IStatus run(IProgressMonitor monitor) {
+ super.run(monitor);
+ if (fBundles != null) {
+ fBundles.clear();
+ fBundles = null;
+ }
+ if (mElementsCache != null)
+ mElementsCache.clear();
+ return Status.OK_STATUS;
+ }
+
+ @Override
public String toString() {
if (!fUseCurrent) {
return PDEUIMessages.TargetPlatformRepository_RunningPlatform;
diff --git a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/views/imagebrowser/repositories/WorkspaceRepository.java b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/views/imagebrowser/repositories/WorkspaceRepository.java
index 44dd34c..0d6593d 100644
--- a/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/views/imagebrowser/repositories/WorkspaceRepository.java
+++ b/ui/org.eclipse.pde.ui/src/org/eclipse/pde/internal/ui/views/imagebrowser/repositories/WorkspaceRepository.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2012, 2013 Christian Pontesegger and others.
+ * Copyright (c) 2012, 2014 Christian Pontesegger 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
@@ -96,6 +96,19 @@
fProjects = Collections.emptyList();
}
+ @Override
+ protected synchronized IStatus run(IProgressMonitor monitor) {
+ super.run(monitor);
+ if (fProjects != null) {
+ fProjects.clear();
+ fProjects = null;
+ }
+ if (mElementsCache != null)
+ mElementsCache.clear();
+ return Status.OK_STATUS;
+ }
+
+
public String toString() {
return "Workspace"; //$NON-NLS-1$
}